作成者は、:before および :after 疑似要素を使用して、生成されたコンテンツのスタイルと場所を指定します。名前が示すように、:before および :after 擬似要素は、要素のドキュメント ツリー コンテンツの前後のコンテンツの場所を指定します。「コンテンツ」プロパティは、これらの疑似要素と組み合わせて、挿入されるものを指定します。
以下は、HTML をルートとするドキュメント ツリーです。
HTML
.HEAD
..TITLE
.BODY
..H1
..P
..UL
...LI
...LI
...LI
たとえば、次のルールは、「class」属性の値が「note」であるすべての P 要素のコンテンツの前に、文字列「Note:」を挿入します。
p.note:before { content: "Note: " }
要素によって生成される書式設定オブジェクト (ボックスなど) には、生成されたコンテンツが含まれます。たとえば、上記のスタイル シートを次のように変更します。
p.note:before { content: "Note: " }
p.note { border: solid green }
最初の文字列を含む段落全体の周りに、実線の緑色の境界線がレンダリングされます。
:before および :after 疑似要素は、関連付けられているドキュメント ツリー内の要素から継承可能なプロパティを継承します。
たとえば、次のルールでは、すべての Q 要素の前に開き引用符が挿入されます。引用符の色は赤になりますが、フォントは Q 要素の残りのフォントと同じになります。
q:before {
content: open-quote;
color: red
}
:before または :after 疑似要素宣言では、継承されないプロパティは初期値を取ります。
したがって、たとえば、'display' プロパティの初期値が 'inline' であるため、前の例の引用はインライン ボックスとして挿入されます (つまり、要素の初期テキスト コンテンツと同じ行に)。次の例では、挿入されたテキストがブロックになるように、'display' プロパティを明示的に 'block' に設定します。
body:after {
content: "The End";
display: block;
margin-top: 2em;
text-align: center;
}
:before および :after 擬似要素要素は、関連する要素のすぐ内側に挿入された実際の要素であるかのように、実行ボックスなどの他のボックスと相互作用します。
たとえば、次のドキュメント フラグメントとスタイル シート:
<h2> Header </h2> h2 { display: run-in; }
<p> Text </p> p:before { display: block; content: 'Some'; }
...次のドキュメント フラグメントとスタイル シートとまったく同じ方法でレンダリングされます。
<h2> Header </h2> h2 { display: run-in; }
<p><span>Some</span> Text </p> span { display: block }
同様に、次のドキュメント フラグメントとスタイル シート:
<h2> Header </h2> h2 { display: run-in; }
h2:after { display: block; content: 'Thing'; }
<p> Text </p>
...次のドキュメント フラグメントとスタイル シートとまったく同じ方法でレンダリングされます。
<h2> Header <span>Thing</span></h2> h2 { display: block; }
span { display: block; }
<p> Text </p>