Last update: 2008-09-09
要素に list-item を定義すると、その要素は ul の子要素の li と同じ性質を持ったリストエレメントとして表示される。list-item は li 同様ブロックレベル要素として以下の特徴を持っている。
display: list-item で定義されたセレクタはブロック要素となるため、要素の前後に改行を伴う。ブロック要素は元々の改行が存在するので、display: list-item を適用した場合は相殺されるようだが、インライン要素では inline-block のように inline (行内) で改行される。
下のサンプルは、パラグラフ内でインライン要素の span で囲んだテキスト「disc」「circle」「square」にそれぞれ display: list-item を定義している。辛子色の背景で表示されているブロックが span 要素のボックス。
HTML<p>リストエレメント値の中で<span id="inline-list1">disc</span><span id="inline-list2>circle</span><span id="inline-list3">square</span>の3つは UA に依存したレンダリング結果となる。
CSS.inline-list1 { display: list-item; list-style-type: disc;/* Marker style property */ color: #663333; background-color: #eee8aa; }
リストエレメント値の中で disccirclesquare の3つは UA に依存したレンダリング結果となる。
span 要素はインライン要素だが list-item を指定することでブロック要素の素質を持つため、width (幅) と height (高さ) を指定することができる。ただ、inline-block とは違い、生成ボックスの高さの基準は行の下端に有るような感じだ。
ちなみにレンダリング結果は Safari, Opera, Firefox 2 とも同じ。
.inline-list2 {
display: list-item;
width: 8em;
height: 2em;
color: #663333;
background-color: #eee8aa;
}
リストエレメント値の中で disccirclesquare の3つは UA に依存したレンダリング結果となる。
ブロック要素の性質である padding、margin、border を前後左右に設定することができる。このレンダリング結果も Safari, Opera, Firefox 2 とも同じ。
.inline-list3 {
display: list-item;
width: 8em;
height: 2em;
margin: 0.1em 2em;
padding: 0.6em;
color: #663333;
background-color: #eee8aa;
border: 4px solid #6600cc;
}
リストエレメント値の中で disccirclesquare の3つは UA に依存したレンダリング結果となる。
このプロパティは色々あるが、手軽な text-align: center と float: left を定義してみる。
.inline-list4 {
display: list-item;
width: 12em;
margin: 0.4em 3em;
padding: 1.4em;
border: 4px solid #6600cc;
text-align: center;
float: left;
color: #663333;
background-color: #eee8aa;
}
リストエレメント値の中で disccirclesquare の3つは UA に依存したレンダリング結果となる。
レンダリング結果は Safari, Opera, Firefox 2 とも同じ。
結果は両方とも有効だが、こういった使い方にメリットが有るのかどうか分からないし、コントロールは面倒くさそう。
作っておいてなんですが、役に立ちそうなサンプルはありませんねぇ。
こういうこともできるのだということでお茶を濁して、この list-item は単独で存在することになるので、ul 要素の中の li 要素のように連続する番号マーカーを期待することはできない(もしかしたら方法はあるのかもしれないが、見つからない)連番が必要なければ問題はないのだが、項目数の多いリストの場合は ul 要素を使う方が無難ではないだろうか。。
ちなみに、英文ではパラグラフ内にリスト項目が現れることがある(役所の書類などで見かける)。欧文圏からの要求で用意されたプロパティなのだろうか、これって?
定義できるのは list-style, list-style-image, list-style-position, list-style-type の4つ。ただし上でも書いたように、display: list-item は単独のリストアイテムとなるため、連番リストは期待できない。
また、マーカーについては簡単に説明するので、より詳しい情報は参考書かネット上で調べてください。
inside を指定したリストエレメント
outside を指定したリストエレメント
本来「01.」が初期値のはずだが「00.」とレンダリングされると思う。ちなみに Safari は全て正しくレンダリングする。
This value causes an element (e.g., LI in HTML) to generate a principal block box and a list-item inline box. For information about lists and examples of list formatting, please consult the section on lists.w3c display properties
upper-roman もなかなかおかしな結果となる。uppe-roman は I, II, III と続くのだが「0.」が表示されるはずだ。
This value causes an element (e.g., LI in HTML) to generate a principal block box and a list-item inline box. For information about lists and examples of list formatting, please consult the section on lists.w3c display properties
なお、Safari 3.1 と Opera 9.51 は正常にレンダリングする。
その他のキーワードも Firefox では同じ状態なので、もう少し検証して、これがバグかどうかを確かめてみることにする。
まずリストの連番の基本だが、通常リストを作成する場合は ul 要素の中に必要数の li 子要素を格納して組み立てる。イメージは左の通り。
この時 decimal のような数字マーカーを指定していれば、上から順に 1., 2. 3. と自動的に連番がふられる。この連番は <ul>〜</ul> で囲まれた li 要素にのみ効果を与える。つまり ul タグがリストの開始位置と終了位置を決定するわけ。というのがリストの基本。
要素に対して display: list-item でリスト要素にした場合は、リストの開始位置と終了位置を明示するものが存在しない。
この場合はどうなるかというと、list-item を定義した要素を梱包する親ブロック要素が ul の役目を担う。毎度分かりにくい書き方なので、左にイメージを置きます。
list-item を定義した要素はそれぞれ単独で存在するが、親要素になるブロック要素からみれば、出現順に関連性をもつので、上から順に連番がふられる。
ただし、display: list-item で連番が有効になる条件は次の通り。
下のサンプルは div 内に置いた p 要素に list-item: decimal で連番になるように設定してみた。HTML と CSS はこんな感じ。
<div>
<p class="item1">最初のマーカーは「1」</p>
<p>このパラグラフはリスト設定していない</p>
<p class="item1">2番目のマーカーは「2」</p>
<p class="item1">3番目のマーカーは「3」</p>
</div>
.marker-test1 {
display: list-item;
list-style-type: decimal;
}
最初のマーカーは「1」
このパラグラフはリスト設定していない
2番目のマーカーは「2」
3番目のマーカーは「3」
残念ながら Firefox では連番で表示されずに「0.」となっているはずだ。
で、正しくレンダリングできるブラウザなら div 内に置いた list-item は出現順に連番付けされ、上のサンプルでは2番目のパラグラフを飛び越して「1」から「3」の連番になっていると思う。
下のサンプルは DIV 内にもう一つ DIV を設け、その中に list-item を定義したパラグラフを加えた。
<div>
<p class="item1">最初のマーカーは "Ι."</p>
<div>
<p class="item1">このパラグラフは子 DIV の中にあるので連番にならない</p>
</div>
<p class="item1">2番目のマーカーは "ΙΙ."</p>;
<p class="item1">3番目のマーカーは "ΙΙΙ."</p>;
</div>
marker-test1 {
display: list-item;
list-style-type: upper-roman;
}
最初のマーカーは "Ι."
このパラグラフは子 DIV の中にあるので連番にならない
2番目のマーカーは "ΙΙ."
3番目のマーカーは "ΙΙΙ."
Firefox では確認のしようがないのだが…、2番目の DIV に梱包したパラグラフのリストマーカーは「Ι.」で 1 番扱いになっているはずだ。
テストケースはアップしないが、要素毎に異なるマーカー値を設定しても連番は有効だ。また要素の種類にも関係なく、display: list-item を適用した要素は、親要素ブロックの中で連番付けされる。
ブラウザでのレンダリング状況を確認できるように、css 2.1 で定義されている 15 種のキーワード一覧を置いときます。
現在 (2008-08-01) このマーカーを全て表示できるのは Firefox, Safari 3.1, Opera 9.5.1 です。
| Velue | Description | Example |
|---|---|---|
| disc | 黒丸 |
|
| circle | 白抜きの丸 |
|
| square | 黒い四角 |
|
| decimal | 1から始る数字 |
|
| decimal-leading-zero | 01から始る数字 |
|
| lower-roman | 小文字のローマ数字 |
|
| upper-roman | 大文字のローマ数字 |
|
| lower-greek | 小文字のギリシア文字 |
|
| lower-latin | 小文字の英字 |
|
| upper-latin | 大文字の英字 |
|
| armenian | アルメニア数字 |
|
| georgian | グルジア数字 |
|
| lower-alpha | 小文字の英字 |
|
| upper-alpha | 大文字の英字 |
|
| none | 生成しない |
|