2011-12-31 3 views
1

私はこのHTMLを使用する場合:WebKitブラウザがGecko、Presto、およびTridentと同じ方法でこの定義リストをレンダリングしないのはなぜですか?

<dl> 
    <dt>term</dt> 
    <dd>description</dd> 
    <dt>term</dt> 
    <dd>description</dd> 
</dl> 

そして、このCSS:

dl, dt, dd { 
    margin: 0; 
    padding: 0; 
} 
dt, dd { 
    display: inline; 
} 
dt { 
    font-weight: bold; 
} 
dt:before { 
    display: block; 
    content: "separator"; 
    font-weight: normal; 
} 
dt:after { 
    content: ":"; 
} 
dd { 
    padding-left: 0.5em; 
} 

WebKitのは、このようにそれをレンダリングする:
WebKit's rendering

しかし、上記のFirefox 3.5と、オペラ座10と上記(私は10未満のテストをしていません)、Internet Explorer 8以上は次のようにレンダリングします。
Gecko rendering

WebKitがdisplay: block;を無視したようです。dt:beforeです。

Try it yourself.

何がこの行動を起こし、そしてどのように私は他のブラウザの結果のように見えるようにWebKitの結果を得ることができますか?

+0

私はバグの可能性を除外しません。 'display:inline'を' display:inline-block'にすると、もっと面白い方法でスタックします。 – BoltClock

+0

[spec](http://www.w3.org/TR/CSS21/generate.html)を読むと、これはWebKitのバグのようです: ":beforeと:after擬似要素は他のボックスと相互作用します実際の要素は関連要素のすぐ内側に挿入されていました。 –

答えて

0

これはWebkitのバグですが、コードを使って正しくレンダリングすることができました。listed here.基本的に、ブロックを「インラインブロック」に変更し、幅を100%にしました。

+0

Hmm。これは、 ':before'に' content 'があるときにはかなりうまくいくようですが、 'content'を空にする(' content: ""; ')ように設定すると、(ブラウザでは)いずれのブラウザでも 'height'、' line-height'、 'font-size'には反応しないようです。 – icktoofay

+0

コンテンツを動的に設定していますか?あなたはコンテンツを持っているときと持っていないときに違うクラスを使うことができますか?間隔を維持する理由は、インラインブロックステートメントでブロックを適用するためにクロムを強制しているためです。 –

+0

いいえ、動的ではありません。 ':before'には' content 'は存在しません。私はちょうど質問の問題を説明するのを助けるためにそれを使用していました。 – icktoofay

関連する問題