12 生成された コンテンツ、自動番号付け、 およびリスト

目次

場合によっては、著者がユーザーエージェントに文書ツリーからではないコンテンツをレンダリングさせたいことがあります。よく知られた例としては、番号付きリストがあります。著者は番号を明示的にリスト化したくないが、ユーザーエージェントにそれらを自動的に生成させたいと考えています。同様に、著者は図のキャプションの前に「図」という単語を挿入したり、第7章のタイトルの前に「第7章」と挿入させることを望むことがあります。特に音声または点字では、ユーザーエージェントがこれらの文字列を挿入できるべきです。

CSS 2.2 では、コンテンツは以下の2つのメカニズムによって生成されます:

12.1 :before:after 擬似要素

著者は :before および :after 擬似要素を使用して、生成されたコンテンツのスタイルと位置を指定します。名前が示すように、:before および :after 擬似要素は、要素の文書ツリーの内容の前後にコンテンツを配置することを指定します。'content' プロパティは、これらの擬似要素と組み合わせて、挿入される内容を指定します。

例:

例えば、次のルールは "Note: " という文字列を、"class" 属性が "note" の値を持つすべての P 要素の内容の前に挿入します:

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 擬似要素は、関連付けられた要素のすぐ内側に挿入された実際の要素のように他のボックスと相互作用します。

例:

例えば、次の文書断片とスタイルシート:

<p> Text </p>                   p:before { display: block; content: 'Some'; }

...は、次の文書断片とスタイルシートとまったく同じ方法でレンダリングされます:

<p><span>Some</span> Text </p>  span { display: block }

同様に、次の文書断片とスタイルシート:

<h2> Header </h2>     h2:after { display: block; content: 'Thing'; }

...は、次の文書断片とスタイルシートとまったく同じ方法でレンダリングされます:

<h2> Header <span>Thing</span></h2>   h2 { display: block; }
                                      span { display: block; }

注意。:before および :after が置換要素(例えば HTML の IMG)とどのように相互作用するかについては、この仕様では完全には定義されていません。これについては将来の仕様でより詳細に定義される予定です。

12.2 'content' プロパティ

名前: content
値: normal | none | [ <string> | <uri> | <counter> | attr(<identifier>) | open-quote | close-quote | no-open-quote | no-close-quote ]+ | inherit
初期値: normal
適用対象: :before および :after 擬似要素
継承: いいえ
パーセンテージ: N/A
メディア: すべて
計算値: 要素上では常に 'normal' に計算されます。:before および :after では、'normal' が指定されている場合 'none' に計算されます。それ以外の場合、URI 値は絶対 URI に、attr() 値は生成された文字列に、その他のキーワードは指定された通りに計算されます。

このプロパティは :before および :after 擬似要素とともに使用して、文書内にコンテンツを生成します。値の意味は以下の通りです:

none
擬似要素は生成されません。
normal
:before および :after 擬似要素に対して 'none' に計算されます。
<string>
テキストコンテンツ (文字列のセクションを参照してください)。
<uri>
値は外部リソース(画像など)を指定する URI です。 ユーザーエージェントがリソースを表示できない場合、指定されていないかのように削除するか、リソースが表示できないことを示すインジケーターを表示する必要があります。
<counter>
カウンターは 'counter()' または 'counters()' の2つの関数で指定できます。 前者には 'counter(name)' または 'counter(name, style)' の形式があります。 生成されたテキストは、この擬似要素のスコープ内にある指定された名前の最も内側のカウンターの値です。それは指定されたスタイル(デフォルトは 'decimal')でフォーマットされます。後者の関数は 'counters(name, string)' または 'counters(name, string, style)' の形式を持ちます。生成されたテキストは、この擬似要素のスコープ内にある指定された名前のすべてのカウンターの値を、最外部から最内部まで指定された文字列で区切って結合したものです。カウンターは指定されたスタイル(デフォルトは 'decimal')でレンダリングされます。詳細は自動カウンターと番号付けのセクションを参照してください。 名前は 'none'、'inherit'、'initial' であってはなりません。そのような名前は宣言を無視させます。
open-quote および close-quote
これらの値は'quotes' プロパティから適切な文字列に置き換えられます。
no-open-quote および no-close-quote
コンテンツを挿入しませんが、引用符のネストレベルを増減させます。
attr(X)
この関数は、セレクターの対象の属性 X の値を文字列として返します。 文字列は CSS プロセッサによって解析されません。セレクターの対象が属性 X を持たない場合、空の文字列が返されます。 属性名の大文字小文字の区別は文書言語に依存します。
注意。 CSS 2.2 では、セレクターの対象以外の要素の属性値を参照することはできません。

'display' プロパティは、コンテンツがブロックボックスまたはインラインボックスに配置されるかどうかを制御します。

例:

次のルールは、各 H1 要素の前に "Chapter: " という文字列を生成します:

H1:before { 
  content: "Chapter: ";
  display: inline;
}

著者は、新しい行を生成されたコンテンツに含めるために、'content' プロパティの文字列内で "\A" エスケープシーケンスを記述することができます。この挿入された改行は、'white-space' プロパティの影響を受けます。"\A" エスケープシーケンスの詳細は、"文字列"および"文字と大文字小文字"を参照してください。

例:

h1:before {
    display: block;
    text-align: center;
    white-space: pre;
    content: "chapter\A hoofdstuk\A chapitre"
}

生成されたコンテンツは文書ツリーを変更しません。特に、文書言語プロセッサ(例:再解析のため)には戻されません。

12.3 引用符

CSS 2.2では、著者はスタイルに依存し文脈に応じた方法で、ユーザーエージェントが引用符をどのようにレンダリングすべきかを指定できます。'quotes' プロパティは、埋め込み引用の各レベルに対応した引用符のペアを指定します。'content' プロパティはこれらの引用符にアクセスし、引用の前後に挿入させます。

12.3.1 'quotes' プロパティによる引用符の指定

名前: quotes
値: [<string> <string>]+ | none | inherit
初期値: ユーザーエージェントに依存
適用対象: すべての要素
継承: はい
パーセンテージ: N/A
メディア: 視覚
計算値: 指定通り

このプロパティは、任意の数の埋め込み引用に対応する引用符を指定します。値の意味は以下の通りです:

none
'content' プロパティの 'open-quote' および 'close-quote' の値は引用符を生成しません。
[<string>  <string>]+
'content' プロパティの 'open-quote' および 'close-quote' の値に対応する引用符は、このペアリストから取得されます。最初の(最左側の)ペアは最外層の引用レベルを表し、2番目のペアは最初の埋め込みレベルを表します。ユーザーエージェントは埋め込みレベルに応じて適切な引用符のペアを適用する必要があります。

例:

例えば、次のスタイルシートを適用します:

/* 2つの言語で2レベルの引用符ペアを指定 */
q:lang(en) { quotes: '"' '"' "'" "'" }
q:lang(no) { quotes: "«" "»" '"' '"' }

/* Q要素の内容の前後に引用符を挿入 */
q:before { content: open-quote }
q:after  { content: close-quote }

以下のHTML断片に適用すると:

<HTML lang="en">
  <HEAD>
  <TITLE>Quotes</TITLE>
  </HEAD>
  <BODY>
    <P><Q>Quote me!</Q>
  </BODY>
</HTML>

ユーザーエージェントは以下を生成できます:

"Quote me!"

一方で、このHTML断片:

<HTML lang="no">
  <HEAD>
  <TITLE>Quotes</TITLE>
  </HEAD>
  <BODY>
    <P><Q>Trøndere gråter når <Q>Vinsjan på kaia</Q> blir deklamert.</Q>
  </BODY>
</HTML>

は以下を生成します:

«Trøndere gråter når "Vinsjan på kaia" blir deklamert.»

注意。 前述の例で'quotes' プロパティで指定された引用符は、コンピューターのキーボードで便利に利用可能ですが、高品質な組版には異なるISO 10646文字が必要です。以下の参考表にはいくつかのISO 10646引用符文字が記載されています:

文字 近似レンダリング ISO 10646コード(16進) 説明
" " 0022 QUOTATION MARK [ASCII の二重引用符]
' ' 0027 APOSTROPHE [ASCII の単一引用符]
< 2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
> 203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
« « 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
» » 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
` 2018 LEFT SINGLE QUOTATION MARK [single high-6]
' 2019 RIGHT SINGLE QUOTATION MARK [single high-9]
`` 201C LEFT DOUBLE QUOTATION MARK [double high-6]
'' 201D RIGHT DOUBLE QUOTATION MARK [double high-9]
,, 201E DOUBLE LOW-9 QUOTATION MARK [double low-9]

12.3.2 引用符の挿入: 'content' プロパティを使用

引用符は、'open-quote' および 'close-quote' の値を持つ'content' プロパティを使用して文書内の適切な場所に挿入されます。 'open-quote' または 'close-quote' の各出現は、'quotes' プロパティの値に基づき、ネストの深さに応じた文字列の1つに置き換えられます。

'open-quote' は引用符ペアの最初の部分を指し、'close-quote' は2番目を指します。使用される引用符ペアは引用のネストレベルに依存します: 現在の 'open-quote' の出現前のすべての生成されたテキスト内での 'open-quote' の出現回数から、'close-quote' の出現回数を引いた値です。ネストの深さが0の場合は最初のペアが使用され、深さが1の場合は2番目のペアが使用されます。深さがペアの数を超える場合、最後のペアが繰り返されます。深さを負の値にする 'close-quote' または 'no-close-quote' はエラーとなり無視されます(レンダリング時に)。深さは0のままで引用符はレンダリングされません(ただし 'content' プロパティの他の値は引き続き挿入されます)。

注意。 引用の深さはソース文書やフォーマット構造のネストとは無関係です。

一部のタイポグラフィスタイルでは、複数の段落にわたる引用内の各段落の前に開く引用符を繰り返し挿入し、最後の段落にのみ閉じる引用符を付けることが求められます。CSSでは、"見えない"閉じる引用符を挿入することでこれを実現できます。キーワード 'no-close-quote' は引用レベルを減少させますが、引用符は挿入されません。

例:

次のスタイルシートは、BLOCKQUOTE 内の各段落に開く引用符を配置し、最後に1つの閉じる引用符を挿入します:

blockquote p:before     { content: open-quote }
blockquote p:after      { content: no-close-quote }
blockquote p.last:after { content: close-quote }

これは、最後の段落に "last" クラスがマークされていることに依存します。

対称性のために、'no-open-quote' キーワードもあり、これは何も挿入せず、引用の深さを1増加させます。

12.4 自動カウンターと番号付け

CSS 2.2における自動番号付けは、'counter-increment''counter-reset' の2つのプロパティによって制御されます。 これらのプロパティで定義されたカウンターは、'content' プロパティの counter() および counters() 関数と共に使用されます。

名前: counter-reset
値: [ <identifier> <integer>? ]+ | none | inherit
初期値: none
適用対象: すべての要素
継承: いいえ
パーセンテージ: N/A
メディア: すべて
計算値: 指定通り
名前: counter-increment
値: [ <identifier> <integer>? ]+ | none | inherit
初期値: none
適用対象: すべての要素
継承: いいえ
パーセンテージ: N/A
メディア: すべて
計算値: 指定通り

'counter-increment' プロパティは、カウンター(識別子)の名前を1つ以上受け取り、それぞれにオプションで整数を続けます。整数は、要素の各出現時にカウンターがどれだけ増加するかを示します。デフォルトの増加値は1です。ゼロおよび負の整数も許可されます。

'counter-reset' プロパティも、1つ以上のカウンター名のリストを含み、それぞれにオプションで整数を続けます。整数は、要素の各出現時にカウンターが設定される値を示します。デフォルトは0です。

'none'、'inherit' および 'initial' というキーワードは、カウンター名として使用してはなりません。'none' 単独の値は、カウンターがリセットまたは増加しないことを意味します。'inherit' 単独の値は通常の意味を持ちます(6.2.1を参照)。'initial' は将来の使用のために予約されています。

例:

この例は、"Chapter 1"、"1.1"、"1.2" などで章やセクションを番号付けする方法を示しています:

BODY {
    counter-reset: chapter;      /* 章カウンタースコープを作成 */
}
H1:before {
    content: "Chapter " counter(chapter) ". ";
    counter-increment: chapter;  /* 章に1を加算 */
}
H1 {
    counter-reset: section;      /* セクションを0に設定 */
}
H2:before {
    content: counter(chapter) "." counter(section) " ";
    counter-increment: section;
}

要素がカウンターを増加/リセットし、かつそのカウンターを使用する場合(その :before または :after 擬似要素の'content' プロパティで)、カウンターは増加/リセットされたに使用されます。

要素がカウンターをリセットし、かつ増加させる場合、カウンターは最初にリセットされ、その後増加されます。

同じカウンターが'counter-reset' および 'counter-increment' プロパティの値で複数回指定されている場合、カウンターの各リセット/増加は指定された順序で処理されます。

例:

次の例は 'section' カウンターを0にリセットします:

H1 { counter-reset: section 2 section }

次の例は 'chapter' カウンターを3増加させます:

H1 { counter-increment: chapter chapter 2 }

'counter-reset' プロパティはカスケードルールに従います。そのため、以下のスタイルシートでは、カスケードにより:

H1 { counter-reset: section -1 }
H1 { counter-reset: imagenum 99 }

'imagenum' だけがリセットされます。両方のカウンターをリセットするには、次のように一緒に指定する必要があります:

H1 { counter-reset: section -1 imagenum 99 }

12.4.1 ネストされたカウンターとスコープ

カウンターは「自己ネスト」であり、子孫要素または擬似要素でカウンターをリセットすると、自動的にそのカウンターの新しいインスタンスが作成されます。これは、HTMLのリストのように、要素が任意の深さで自分自身の中にネストされる可能性がある場合に重要です。各レベルのためにユニークな名前のカウンターを定義するのは不可能です。

例:

したがって、ネストされたリスト項目に番号を付けるには次のように記述するだけで十分です。この結果は、LI要素に 'display:list-item' および 'list-style: inside' を設定した場合と非常に似ています:

OL { counter-reset: item }
LI { display: block }
LI:before { content: counter(item) ". "; counter-increment: item }

スコープとは、カウンターが最初に'counter-reset'によってリセットされたドキュメント内の最初の要素から始まり、その要素の子孫と、兄弟要素およびその子孫を含みます。ただし、後続の兄弟要素の 'counter-reset' または同じ要素の後続の 'counter-reset' によって作成された同じ名前のカウンターのスコープ内の要素は含まれません。

もし、要素または擬似要素上で'counter-increment' または 'content' が、 いずれの'counter-reset'のスコープにもないカウンターを参照する場合、実装はその要素または擬似要素上でカウンターが0にリセットされたかのように振る舞うべきです。

上記の例では、OLはカウンターを作成し、そのOLのすべての子要素がそのカウンターを参照します。

「item[n]」で「item」カウンターのn番目のインスタンスを、また「{」と「}」でスコープの開始と終了を表すとすると、以下のHTML断片は示されたカウンターを使用します。(上記の例で示されたスタイルシートを想定しています)。

<OL>                    <!-- {item[0]=0        -->
  <LI>item</LI>         <!--  item[0]++ (=1)   -->
  <LI>item              <!--  item[0]++ (=2)   -->
    <OL>                <!--  {item[1]=0       -->
      <LI>item</LI>     <!--   item[1]++ (=1)  -->
      <LI>item</LI>     <!--   item[1]++ (=2)  -->
      <LI>item          <!--   item[1]++ (=3)  -->
        <OL>            <!--   {item[2]=0      -->
          <LI>item</LI> <!--    item[2]++ (=1) -->
        </OL>           <!--                   -->
        <OL>            <!--   }{item[2]=0     -->
          <LI>item</LI> <!--    item[2]++ (=1) -->
        </OL>           <!--                   -->
      </LI>             <!--   }               -->
      <LI>item</LI>     <!--   item[1]++ (=4)  -->
    </OL>               <!--                   -->
  </LI>                 <!--  }                -->
  <LI>item</LI>         <!--  item[0]++ (=3)   -->
  <LI>item</LI>         <!--  item[0]++ (=4)   -->
</OL>                   <!--                   -->
<OL>                    <!-- }{item[0]=0       -->
  <LI>item</LI>         <!--  item[0]++ (=1)   -->
  <LI>item</LI>         <!--  item[0]++ (=2)   -->
</OL>                   <!--                   -->

例:

スコープがネストされていない要素上でカウンターが使用される場合の動作を示す別の例として、以下のマークアップに番号を付けるためのスタイルルールがどのように適用されるかを示します。

                     <!--"chapter" カウンター|"section" カウンター -->
<body>               <!-- {chapter=0      |                  -->
  <h1>About CSS</h1> <!--  chapter++ (=1) | {section=0       -->
  <h2>CSS 2</h2>     <!--                 |  section++ (=1)  -->
  <h2>CSS 2.2</h2>   <!--                 |  section++ (=2)  -->
  <h1>Style</h1>     <!--  chapter++ (=2) |}{ section=0      -->
</body>              <!--                 | }                -->

'counters()' 関数は、スコープ内の同じ名前を持つすべてのカウンターから構成され、指定された文字列で区切られた文字列を生成します。

例:

次のスタイルシートは、ネストされたリスト項目に「1」、「1.1」、「1.1.1」などと番号を付けます。

OL { counter-reset: item }
LI { display: block }
LI:before { content: counters(item, ".") " "; counter-increment: item }

12.4.2 カウンタースタイル

デフォルトでは、カウンターは10進数でフォーマットされますが、'list-style-type' プロパティで利用可能なすべてのスタイルもカウンターに使用できます。この記法は以下の通りです:

counter(name)

デフォルトスタイルの場合、または:

counter(name, <'list-style-type'>)

'disc'、'circle'、'square'、および 'none' を含むすべてのスタイルが許可されています。

例:

H1:before        { content: counter(chno, upper-latin) ". " }
H2:before        { content: counter(section, upper-roman) " - " }
BLOCKQUOTE:after { content: " [" counter(bq, lower-greek) "]" }
DIV.note:before  { content: counter(notecntr, disc) " " }
P:before         { content: counter(p, none) }

12.4.3 'display: none' の要素におけるカウンター

表示されない要素('display' が 'none' に設定されている場合)は、カウンターを増加またはリセットすることはできません。

例:

例えば、次のスタイルシートでは、クラス "secret" を持つ H2 は 'count2' を増加させません。

H2.secret {counter-increment: count2; display: none}

生成されない擬似要素も、カウンターを増加またはリセットすることはできません。

例:

例えば、次の例では 'heading' は増加しません:

h1::before {
    content: normal;
    counter-increment: heading;
}

一方で、'visibility' が 'hidden' に設定されている要素は、カウンターを増加します

12.5 リスト

CSS 2.2 はリストの基本的な視覚フォーマットを提供します。'display: list-item' を持つ要素は、要素の内容のための主要ブロックボックスを生成し、'list-style-type' および 'list-style-image' の値に応じて、要素がリスト項目であることを示す視覚的なマーカー・ボックスを生成する場合があります。

リストプロパティは、リストの基本的な視覚フォーマットを記述します: それらはスタイルシートがマーカーのタイプ(画像、グリフ、または番号)を指定し、主要ボックスに対するマーカーの位置(外側または内容の前の内側)を指定することを可能にします。ただし、著者がリストマーカーの独自のスタイル(色、フォント、配置など)を指定したり、主要ボックスに対する位置を調整することはできません。これらは主要ボックスに由来します。

背景プロパティは主要ボックスのみに適用されます。'outside' マーカー・ボックスは透明です。

12.5.1 リスト: 'list-style-type', 'list-style-image', 'list-style-position', および 'list-style' プロパティ

名前: list-style-type
値: disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit
初期値: disc
適用対象: 'display: list-item' を持つ要素
継承: はい
パーセンテージ: N/A
メディア: 視覚
計算値: 指定通り

このプロパティは、'list-style-image' が 'none' の値を持つ場合、または URI によって指し示される画像を表示できない場合に、リスト項目マーカーの外観を指定します。'none' の値はマーカーなしを指定し、それ以外の場合は3種類のマーカー(グリフ、番号システム、アルファベットシステム)があります。

グリフは次のように指定されます: disc, circle, および square。その正確なレンダリングはユーザーエージェントに依存します。

番号システムは次のように指定されます:

decimal
1から始まる10進数。
decimal-leading-zero
先頭にゼロを付けた10進数(例: 01, 02, 03, ..., 98, 99)。
lower-roman
小文字のローマ数字(i, ii, iii, iv, v, etc.)。
upper-roman
大文字のローマ数字(I, II, III, IV, V, etc.)。
georgian
ジョージア語の伝統的な番号付け (an, ban, gan, ..., he, tan, in, in-an, ...)。
armenian
アルメニア語の伝統的な大文字番号付け。

アルファベットシステムは次のように指定されます:

lower-latin または lower-alpha
小文字のASCII文字(a, b, c, ... z)。
upper-latin または upper-alpha
大文字のASCII文字(A, B, C, ... Z)。
lower-greek
小文字の古典ギリシャ文字(alpha, beta, gamma, ... (α, β, γ, ...))。

この仕様はアルファベットシステムがアルファベットの最後でどのようにラップするかを定義しません。例えば、26のリスト項目以降の 'lower-latin' のレンダリングは未定義です。そのため、長いリストの場合、著者が真の番号を指定することを推奨します。

CSS 2.2 はリスト番号付けがどのようにリセットおよび増加されるかを定義しません。これは CSS リストモジュールで定義される予定です [CSS3LIST]

例えば、次のHTML文書:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
   <HEAD>
     <TITLE>小文字のラテン番号付け</TITLE>
     <STYLE type="text/css">
          ol { list-style-type: lower-roman }   
     </STYLE>
  </HEAD>
  <BODY>
    <OL>
      <LI> これは最初の項目です。
      <LI> これは2番目の項目です。
      <LI> これは3番目の項目です。
    </OL>
  </BODY>
</HTML>

は次のような結果を生成する可能性があります:

  i これは最初の項目です。
 ii これは2番目の項目です。
iii これは3番目の項目です。

リストマーカーの配置(ここでは右揃え)はユーザーエージェントに依存します。

名前: list-style-image
値: <uri> | none | inherit
初期値: none
適用対象: 'display: list-item' を持つ要素
継承: はい
パーセンテージ: N/A
メディア: 視覚
計算値: 絶対URIまたは'none'

このプロパティはリスト項目マーカーとして使用される画像を設定します。画像が利用可能な場合、それは'list-style-type' マーカーで設定されたマーカーを置き換えます。

画像のサイズは以下のルールに従って計算されます:

  1. 画像に固有の幅と高さがある場合、使用される幅と高さはその固有の幅と高さです。
  2. それ以外の場合、画像に固有の比率と固有の幅または高さのいずれかがある場合、使用される幅/高さは提供された固有の幅/高さと同じであり、提供された寸法と比率から不足する寸法が計算されます。
  3. さらに、それ以外の場合、画像に固有の比率がある場合、使用される幅は1emであり、その幅と固有の比率から使用される高さが計算されます。これにより高さが1emを超える場合、使用される高さは代わりに1emに設定され、その高さと固有の比率から使用される幅が計算されます。
  4. 最後に、それ以外の場合、画像の使用される幅は固有の幅があればその幅、そうでなければ1emです。画像の使用される高さは固有の高さがあればその高さ、そうでなければ1emです。

例:

次の例では、各リスト項目の先頭に "ellipse.png" という画像をマーカーとして設定します。

ul { list-style-image: url("http://png.com/ellipse.png") }
名前: list-style-position
値: inside | outside | inherit
初期値: outside
適用対象: 'display: list-item' を持つ要素
継承: はい
パーセンテージ: N/A
メディア: 視覚
計算値: 指定通り

このプロパティは、主要ブロックボックスに対するマーカーボックスの位置を指定します。値の意味は以下の通りです:

outside
マーカーボックスは主要ブロックボックスの外側に配置されます。フロートに隣接するリスト項目マーカーの位置はCSS 2.2では未定義です。CSS 2.2では、マーカーボックスの正確な位置またはペインティング順序内の位置を指定していませんが、'direction' プロパティが 'ltr' のリスト項目では、マーカーボックスが内容の左側にあり、'rtl' の場合は右側にある必要があります。 マーカーボックスは主要ブロックボックスの境界に対して固定されており、主要ブロックボックスの内容と一緒にスクロールしません。 CSS 2.2では、要素の'overflow' が 'visible' 以外の場合、UAはマーカーを非表示にする場合があります。(これは将来的に変更される予定です。) マーカーボックスのサイズや内容は主要ブロックボックスの高さやその最初の行ボックスの高さに影響を及ぼす場合があり、一部のケースでは新しい行ボックスを作成する場合があります。注意: この相互作用はCSSの将来のレベルでより正確に定義される可能性があります。
inside
マーカーボックスは主要ブロックボックス内の最初のインラインボックスとして配置され、要素の内容や :before 擬似要素の前に配置されます。CSS 2.2はマーカーボックスの正確な位置を指定していません。

例えば:

<HTML>
  <HEAD>
    <TITLE>inside/outside 位置の比較</TITLE>
    <STYLE type="text/css">
      ul         { list-style: outside }
      ul.compact { list-style: inside }
    </STYLE>
  </HEAD>
  <BODY>
    <UL>
      <LI>最初のリスト項目
      <LI>2番目のリスト項目
    </UL>

    <UL class="compact">
      <LI>最初のリスト項目
      <LI>2番目のリスト項目
    </UL>
  </BODY>
</HTML>

上記の例は次のようにフォーマットされる場合があります:

inside と outside のリストスタイル位置の違い   [D]

右から左へのテキストでは、マーカーはボックスの右側に配置されます。

名前: list-style
値: [ <'list-style-type'> || <'list-style-position'> || <'list-style-image'> ] | inherit
初期値: 個別のプロパティを参照
適用対象: 'display: list-item' を持つ要素
継承: はい
パーセンテージ: N/A
メディア: 視覚
計算値: 個別のプロパティを参照

'list-style' プロパティは、'list-style-type', 'list-style-image', および 'list-style-position' の3つのプロパティをスタイルシートの同じ場所で設定するための省略記法です。

例:

ul { list-style: upper-roman inside }  /* 任意の "ul" 要素 */
ul > li > ul { list-style: circle outside } /* 任意の "ul" は 
                                             "li" の子であり、
                                             "ul" 要素の子 */

著者は'list-style' 情報をリスト項目要素(HTMLの "li" など)に直接指定できますが、注意して行うべきです。次の規則は似ていますが、最初のものは子孫セレクターを宣言し、2番目のものは(より具体的な)子セレクターを宣言しています。

ol.alpha li   { list-style: lower-alpha } /* 任意の "ol" の子孫 "li" */ 
ol.alpha > li { list-style: lower-alpha } /* 任意の "ol" の子 "li" */

子孫セレクターのみを使用する著者は、期待する結果を得られない場合があります。次の規則を考えてみてください:

<HTML>
  <HEAD>
    <TITLE>警告: カスケードによる予期しない結果</TITLE>
    <STYLE type="text/css">
      ol.alpha li  { list-style: lower-alpha }
      ul li        { list-style: disc }
    </STYLE>
  </HEAD>
  <BODY>
    <OL class="alpha">
      <LI>レベル1
      <UL>
         <LI>レベル2
      </UL>
    </OL>
  </BODY>
</HTML>

期待されるレンダリングでは、レベル1のリスト項目には 'lower-alpha' ラベルが付き、レベル2の項目には 'disc' ラベルが付きます。しかし、カスケード順序により、最初のスタイル規則(具体的なクラス情報を含む)が2番目をマスクします。次の規則は代わりに子セレクターを使用して問題を解決します:

ol.alpha > li  { list-style: lower-alpha }
ul li   { list-style: disc }

もう1つの解決策は、リストタイプ要素のみに'list-style' 情報を指定することです:

ol.alpha  { list-style: lower-alpha }
ul        { list-style: disc }

継承により、'list-style' の値が OL および UL 要素から LI 要素に転送されます。これがリストスタイル情報を指定する推奨方法です。

例:

URI値は他の値と組み合わせて使用することができます。例えば:

ul { list-style: url("http://png.com/ellipse.png") disc }

上記の例では、画像が利用できない場合 'disc' が使用されます。

'list-style' プロパティ内の 'none' 値は、'list-style-type' および 'list-style-image' が他に指定されていない場合にそれらを 'none' に設定します。しかし、両方が他に指定されている場合、その宣言はエラーとみなされ(したがって無視されます)。

例:

例えば、'list-style' プロパティに 'none' が指定された場合、'list-style-type''list-style-image' の両方が 'none' に設定されます:

ul { list-style: none }

結果として、リスト項目マーカーは表示されません。