私はtext-align: center
と親の内部position: absolute
インライン子供を持っている場合は、私が実際にdiv要素を中心とするのではなく、left: 50%
を書いていたかのように結果が正確です。テキスト整列:センター、絶対-位置付け子には、左のように振る舞う:50%
これは2つが一緒に使用されることを意図していないため、これは異常なケースですが、私はそれらをプロダクションのために使用するつもりはありませんが、なぜこれが当てはまるのか理解しようとしています。
.centered,
.positioned {
border: 1px solid blue;
margin-bottom: 20px;
height: 200px;
position: relative;
}
.centered {
text-align: center;
}
.centered .child,
.positioned .child {
width: 100px;
height: 100px;
border: 1px solid red;
position: absolute;
display: inline-block;
}
.positioned .child {
left: 50%;
transform: translate(-50%, 0);
}
<div class="centered">
<div class="child"></div>
</div>
<div class="positioned">
<div class="child"></div>
</div>
あなたがleft: 50%
を使用するときは、負のマージン左半分の要素の幅と等しくする必要があるか、あなたは、DOMので、-50%の変換必要親の50%に左端を配置しています。つまり、divは中央揃えではなく右詰めです。
親の場合はtext-align: center
、子の場合はposition: absolute
と同じように動作します。 text-align: center
は子供の幅を考慮に入れられないのですか?たとえそれが特別に設定されていても?
本当にこの情報に感謝します。私は仕様でこの振る舞いを説明するものは見当たらなかったので、それはブラウザの仮定であり、したがって異なるクロスブラウザであると考えました。私のcodepenの例を見ると、Chrome、Firefox、Edgeでは同じですが、IE10とIE11では完全に 'left:0'です。私は偶然、これを偶然偶然見つけました。以前は「left:50%」を絶対配置/変換したモーダルをtext-align:center、line-height:100vhを使用して中心にあるものに変更しました。奇妙な高さを持っています。 – helion3