このデモを見ると、Opera を除くすべてのブラウザはアイコンを文字「A」の中央の行に配置しますが、Opera はアイコンを少し高く、線の上に配置します。ここでは違いはあまり目立ちませんが、他の場合には違いがあります。
この動作の理由は何ですか? また、どのように修正できますか?
このデモを見ると、Opera を除くすべてのブラウザはアイコンを文字「A」の中央の行に配置しますが、Opera はアイコンを少し高く、線の上に配置します。ここでは違いはあまり目立ちませんが、他の場合には違いがあります。
この動作の理由は何ですか? また、どのように修正できますか?
Opera は現在、inline-block
垂直方向の配置または疑似要素の定義のいずれかをうまく処理していますが (前者と後者line-height
の参照テストを参照して、UA 間でのレンダリングを比較してください)、違いは置き換えられた要素のサイズ定義にあるようです。
さまざまなブラウザーでストライプ化されたデモを調べるとわかるように、置き換えられた要素 (疑似要素のcontent
URL 値として生成された) だけがあると、置き換えられた要素の寸法が (Opera で) 含まれる要素に追加されるなど、レイアウトに影響します。これは、あなたが目撃している奇妙な副作用をもたらします。今のところ、仕様では、これらのディメンションをどのように扱うかを UA の解釈に任せているためです。
ノート。この仕様は、:before および :after と置き換えられた要素 (HTML の IMG など) との相互作用を完全には定義していません。これは、将来の仕様でより詳細に定義されます。
未定義の動作への取り組みを避けるために問題を回避し、疑似要素を配置するより標準的な方法を使用します。絶対配置を利用する:
.icon {
/* absolute positioning - parent container */
position: relative;
/* layer adjustments for the background image */
z-index: 1;
padding-left: 24px;
}
.icon:before {
content: '';
/* absolute positioning - child element */
position: absolute;
/* layer adjustments for the background image */
z-index: -1;
display: block;
width: 24px;
height: 24px;
/* vertically align */
top: 50%;
left: 0;
/* compensate for vertical offset due to element's own height */
margin-top: -12px;
background-image: url('http://utdallas.docutek.com/eres/images/icon_arrow.gif');
}
:before
および:after
W3Cの疑似要素。vertical-align
Mozilla Developer Network で。display
Mozilla Developer Network で。