順序付けされたリストは、CSSで(1、2、3、...ではなく)1.1、1.2、1.3のような結果を生成できますか?これまでのところ、使用したのlist-style-type:decimal
は1、2、3のみで、1.1、1.2、1.3ではありません。
順序付けされたリストは、CSSで(1、2、3、...ではなく)1.1、1.2、1.3のような結果を生成できますか?これまでのところ、使用したのlist-style-type:decimal
は1、2、3のみで、1.1、1.2、1.3ではありません。
回答:
そのためにカウンターを使用できます。
次のスタイルシートは、ネストされたリストアイテムに「1」、「1.1」、「1.1.1」などの番号を付けます。
OL { counter-reset: item } LI { display: block } LI:before { content: counters(item, ".") " "; counter-increment: item }
例
ol { counter-reset: item }
li{ display: block }
li:before { content: counters(item, ".") " "; counter-increment: item }
<ol>
<li>li element
<ol>
<li>sub li element</li>
<li>sub li element</li>
<li>sub li element</li>
</ol>
</li>
<li>li element</li>
<li>li element
<ol>
<li>sub li element</li>
<li>sub li element</li>
<li>sub li element</li>
</ol>
</li>
</ol>
詳細については、ネストされたカウンターとスコープを参照してください。
li:before
ます: content: counters(item, ".")". ";
このページの解決策は、すべてのレベルと長い(ラップされた)段落に対して正しく、普遍的に機能しません。マーカーのサイズが可変であるため、一貫したインデントを実現するのは本当に難しい(1.、1.2、1.10、1.10.5、…)。可能なインデントレベルごとに事前に計算されたマージン/パディングがあったとしても、それを単に「偽造」することはできません。
最終的に、実際に機能し、JavaScriptを必要としないソリューションを見つけました。
Firefox 32、Chromium 37、IE 9、Androidブラウザーでテストされています。IE 7以前では動作しません。
CSS:
ol {
list-style-type: none;
counter-reset: item;
margin: 0;
padding: 0;
}
ol > li {
display: table;
counter-increment: item;
margin-bottom: 0.6em;
}
ol > li:before {
content: counters(item, ".") ". ";
display: table-cell;
padding-right: 0.6em;
}
li ol > li {
margin: 0;
}
li ol > li:before {
content: counters(item, ".") " ";
}
選ばれた答えは素晴らしいスタートですが、それは本質的list-style-position: inside;
にリスト項目のスタイルを強制し、折り返されたテキストを読みにくくします。これは、数値とテキストの間のマージンを制御し、デフォルトの動作に従って数値を右揃えにする簡単な回避策です。
ol {
counter-reset: item;
}
ol li {
display: block;
position: relative;
}
ol li:before {
content: counters(item, ".")".";
counter-increment: item;
position: absolute;
margin-right: 100%;
right: 10px; /* space between number and text */
}
JSFiddle: http ://jsfiddle.net/3J4Bu/
ol
動作に従って、各数値の終わりにピリオドを追加するだけです。プロパティ"."
から最後を削除することで簡単に削除できますがcontent
、これは少し奇妙に見えます。
ここに投稿された解決策は私にとってうまくいかなかったので、この質問と次の質問の両方を組み合わせて行いました:HTMLで複数レベルの順序付きリストを作成することは可能ですか?
/* Numbered lists like 1, 1.1, 2.2.1... */
ol li {display:block;} /* hide original list counter */
ol > li:first-child {counter-reset: item;} /* reset counter */
ol > li {counter-increment: item; position: relative;} /* increment counter */
ol > li:before {content:counters(item, ".") ". "; position: absolute; margin-right: 100%; right: 10px;} /* print counter */
結果:
注:ソースコードまたはこの投稿の内容を確認する場合のスクリーンショット:http : //estiloasertivo.blogspot.com.es/2014/08/introduccion-running-lean-y-lean.html
注:CSS を使用して、最新のブラウザーでネストされた番号付けを作成します。受け入れられた答えを見てください。以下は歴史的関心のためだけのものです。counters
ブラウザがcontent
およびをサポートしている場合counter
、
.foo {
counter-reset: foo;
}
.foo li {
list-style-type: none;
}
.foo li::before {
counter-increment: foo;
content: "1." counter(foo) " ";
}
<ol class="foo">
<li>uno</li>
<li>dos</li>
<li>tres</li>
<li>cuatro</li>
</ol>
.foo > ol > li
。
counters()
上記の例のように、counter()
関数の代わりに関数を使用します。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Sandro Alvares - KingRider">
</head>
<body>
<style type="text/css">
li.title {
font-size: 20px;
font-weight: lighter;
padding: 15px;
counter-increment: ordem;
}
.foo {
counter-reset: foo;
padding-left: 15px;
}
.foo li {
list-style-type: none;
}
.foo li:before {
counter-increment: foo;
content: counter(ordem) "." counter(foo) " ";
}
</style>
<ol>
<li class="title">TITLE ONE</li>
<ol class="foo">
<li>text 1 one</li>
<li>text 1 two</li>
<li>text 1 three</li>
<li>text 1 four</li>
</ol>
<li class="title">TITLE TWO</li>
<ol class="foo">
<li>text 2 one</li>
<li>text 2 two</li>
<li>text 2 three</li>
<li>text 2 four</li>
</ol>
<li class="title">TITLE THREE</li>
<ol class="foo">
<li>text 3 one</li>
<li>text 3 two</li>
<li>text 3 three</li>
<li>text 3 four</li>
</ol>
</ol>
</body>
</html>
2つのリストがあり、2番目のリストがDIV内にある場合、いくつかの問題があります。2番目のリストは、2.1ではなく1から開始する必要があります。
<ol>
<li>lorem</li>
<li>lorem ipsum</li>
</ol>
<div>
<ol>
<li>lorem (should be 1.)</li>
<li>lorem ipsum ( should be 2.)</li>
</ol>
</div>
http://jsfiddle.net/3J4Bu/364/
編集: 私はこのhttp://jsfiddle.net/hy5f6161/で問題を解決しました
近い将来、::marker
疑似要素を使用して、他のソリューションと同じ結果を1行のコードで実現できるようになる可能性があります。
ブラウザ互換性テーブルを必ず確認してくださいこれはまだ実験的な技術である。現時点では、FirefoxとAndroid版Firefoxのみをバージョン68以降でサポートしています。
以下は、互換性のあるブラウザーで試した場合に正しくレンダリングされるスニペットです。
::marker { content: counters(list-item,'.') ':' }
li { padding-left: 0.5em }
<ol>
<li>li element
<ol>
<li>sub li element</li>
<li>sub li element</li>
<li>sub li element</li>
</ol>
</li>
<li>li element</li>
<li>li element
<ol>
<li>sub li element</li>
<li>sub li element</li>
<li>sub li element</li>
</ol>
</li>
</ol>
また、トピックについてsmashingmagazineでこの素晴らしい記事をチェックすることもできます。
以下は私のために働きました:
ol {
list-style-type: none;
counter-reset: item;
margin: 0;
padding: 0;
}
ol > li {
display: table;
counter-increment: item;
margin-bottom: 0.6em;
}
ol > li:before {
content: counters(item, ".") ") ";
display: table-cell;
padding-right: 0.6em;
}
li ol > li {
margin: 0;
}
li ol > li:before {
content: counters(item, ".") ") ";
}
見てください:http : //jsfiddle.net/rLebz84u/2/
または、この1つhttp://jsfiddle.net/rLebz84u/3/ より正当なテキスト
他のcssの最初の子liサイズを変更する場合、これは適切なコードです。
<style>
li.title {
font-size: 20px;
counter-increment: ordem;
color:#0080B0;
}
.my_ol_class {
counter-reset: my_ol_class;
padding-left: 30px !important;
}
.my_ol_class li {
display: block;
position: relative;
}
.my_ol_class li:before {
counter-increment: my_ol_class;
content: counter(ordem) "." counter(my_ol_class) " ";
position: absolute;
margin-right: 100%;
right: 10px; /* space between number and text */
}
li.title ol li{
font-size: 15px;
color:#5E5E5E;
}
</style>
htmlファイル内。
<ol>
<li class="title"> <p class="page-header list_title">Acceptance of Terms. </p>
<ol class="my_ol_class">
<li>
<p>
my text 1.
</p>
</li>
<li>
<p>
my text 2.
</p>
</li>
</ol>
</li>
</ol>