:beforeそして、:afterされていない必要な置換要素のために仕事に、そしてCSSの仕様は、彼らが彼らのために働くだろうか指定していない、と置き換え要素の概念はやや曖昧です。
CSS 2.1仕様では、それらが置換された要素に対して機能することを明確に示唆しており、その方法は「完全に定義」されていないだけです。これは、置き換えられた要素には、CSSによって制御されない独自の視覚的レンダリングがあると予想されるが、疑似要素は要素のコンテンツに何かを追加する必要があるという問題に関連しています。仕様では、これは将来の仕様で「より詳細に」定義されると追加されていますが、これは今のところ行われていません。
ブラウザベンダーは、一部の要素に対してこれらの疑似要素をまったく実装しないことで問題を回避することを決定しました。
「置き換えられた要素」が何を意味するのかはまったく明確ではなく、意味が多少変更されたようです。多くの場合、空の要素(EMPTYコンテンツが宣言されていない要素、つまりコンテンツを持つことができない要素)と同じ意味として解釈されますが、CSS 2.1自体にセレクター付きのサンプルスタイルシートbr:beforeが表示されます(ブラウザーはこれを無視し、br独自のスタイルシートを実装しています)仕方)。少なくとも部分的には、ますます多くの要素がCSSレンダリングのスコープに移動したと主張できます。たとえば、input要素(そのフォント、色などを含む)は、最新のブラウザーのCSSで主に制御できます。
現在のブラウザ(Firefox、IE、Chrome)は、以外の空の要素の:afterおよび:before疑似要素をサポートしていないようですhr。の場合hr、IEとChromeは生成されたコンテンツを境界ボックス内に配置します。これはの実装ですhr。内容によってボックスの高さが高くなります。Firefoxは、両方の(!)擬似要素のコンテンツを、その実装である水平方向のルールの後に配置しhrます。このバリエーションは、CSS 2.1で言及されている「相互作用」の問題の種類を示しています。
これらの疑似要素は、HTML定義でコンテンツが許可されていないため、空の要素には使用できないとよく言われます。これはカテゴリエラーです。マークアップ言語の構文規則は、CSSで実行できることを制限しません。
結論として、 :after、:before現在は空の要素には使用できません(ただし、のわずかな例外を除くhr)。これは主に実装が原因であり、将来変更される可能性があります。
<before></before>、ソースで" "のようなものを見つけることができたら、私は驚きます。