番号付きリストの番号をどのようにカスタマイズできますか?


109

番号付きリストの番号を左揃えにするにはどうすればよいですか?

1.  an item
// skip some items for brevity 
9.  another item
10. notice the 1 is under the 9, and the item contents also line up

番号付きリストの番号の後の文字を変更しますか?

1) an item

また、ol要素でtype属性を使用する代わりに、数字からアルファベット/ローマ数字のリストに変更するためのCSSソリューションがあります。

私は主にFirefox 3で動作する回答に興味があります。

回答:


98

これは私がFirefox 3、Opera、Google Chromeで作業しているソリューションです。リストは引き続きIE7に表示されます(ただし、右角括弧と左揃えの番号は表示されません):

ol {
  counter-reset: item;
  margin-left: 0;
  padding-left: 0;
}
li {
  display: block;
  margin-bottom: .5em;
  margin-left: 2em;
}
li::before {
  display: inline-block;
  content: counter(item) ") ";
  counter-increment: item;
  width: 2em;
  margin-left: -2em;
}
<ol>
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
  <li>Four</li>
  <li>Five</li>
  <li>Six</li>
  <li>Seven</li>
  <li>Eight</li>
  <li>Nine<br>Items</li>
  <li>Ten<br>Items</li>
</ol>

編集: stragerによる複数行の修正が含まれています

また、ol要素でtype属性を使用する代わりに、数字からアルファベット/ローマ数字のリストに変更するためのCSSソリューションがあります。

list-style-type CSSプロパティを参照してください。または、カウンターを使用する場合、2番目の引数はリストスタイルタイプの値を受け入れます。たとえば、次は大文字のローマ字を使用します。

li::before {
  content: counter(item, upper-roman) ") ";
  counter-increment: item;
/* ... */

番号を元に戻す必要があり、グローバルスタイルではそれらを削除していました(なぜolを使用してulではなく番号を削除するのかを知っている人はいますか?)。完全な説明とコードのための非常に明確な回答+1、簡単に変更して何でもできます。
Morvael 14

CSS マージン/パディングソリューションをより明確にすることをお勧めしますol {counter-reset: item; padding-left: 0;} li {display: block; margin-bottom: .5em;} li:before {display: inline-block; content: counter(item) ") "; counter-increment: item; padding-right: 0.8em;}
mmj

28

リストをスタイリングするためのCSSはこちらですが、基本的には次のとおりです。

li {
    list-style-type: decimal;
    list-style-position: inside;
}

しかし、特定のは、あなたが後にしているおそらく唯一のようなもので、レイアウトの内臓掘り下げることによって達成することができるレイアウトこの(私は実際にそれを試していないことに注意してください):

ol { counter-reset: item }
li { display: block }
li:before { content: counter(item) ") "; counter-increment: item }

1
これは数字を並べますが、テキストの内容はそうではありません。
グロム

13

HTMLで独自の番号を指定することもできます-たとえば、番号がデータベースによって提供されている場合:

ol {
  list-style: none;
}

ol>li:before {
  content: attr(seq) ". ";
}
<ol>
  <li seq="1">Item one</li>
  <li seq="20">Item twenty</li>
  <li seq="300">Item three hundred</li>
</ol>

seq属性は、他の回答に与えられたものと同様の方法を用いて可視化されます。しかしcontent: counter(foo)、を使用する代わりに、を使用しますcontent: attr(seq)

よりスタイリングしたCodePenのデモ


7
value属性を使用するだけで、これを簡略化できます<li>。例えば<li value="20">。次に、疑似要素は必要ありません。デモ
GWB 2016年

1
@GWBこれは有効です(優れたソリューションです)が、リストが序数であるため、数値に制限されます。そのため、のように機能することはできませんvalue="4A"。さらに、value属性はこのtype属性で機能しますが、valueは数値である必要があります(順序付きセット内で機能するため)。
jedd.ahyoung 2016年

おかげで-私は必要なときに、これは私のために働いていたフライングソーサーを(逆の順序でリストを表示するreversed属性はHTML5のみ、として使用されているvalueのをli)。代わりに、あなたの使用してのseqIを設定valueし、使用attr(value)の代わりにattr(seq)
jaygooby

8

他の答えからこれをたくさん盗みましたが、これは私にとってFF3で機能しています。それはupper-roman、均一なインデント、閉じブラケットを持っています。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> new document </title>
<style type="text/css">
<!--
ol {
  counter-reset: item;
  margin-left: 0;
  padding-left: 0;
}
li {
  margin-bottom: .5em;
}
li:before {
  display: inline-block;
  content: counter(item, upper-roman) ")";
  counter-increment: item;
  width: 3em;
}
-->
</style>
</head>

<body>
<ol>
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
  <li>Four</li>
  <li>Five</li>
  <li>Six</li>
  <li>Seven</li>
  <li>Eight</li>
  <li>Nine</li>
  <li>Ten</li>
</ol>
</body>
</html>

5

:before属性で遊んで、それで何ができるかを見てみることをお勧めします。それはあなたのコードが本当に素敵な新しいブラウザに制限されていることを意味し、市場の(厄介なほどに大きな)セクションを除外し、まだ古い古いブラウザを使用しています、

次のようなもので、アイテムを強制的に修正します。はい、自分で幅を選択する必要があるのはそれほどエレガントではないことはわかっていますが、レイアウトにCSSを使用することは秘密の警察の仕事のようなものです。

li:before {
  content: counter(item) ") ";
  counter-increment: item;
  display: marker;
  width: 2em;
}

しかし、正確な解決策を見つけるために実験する必要があります。


カウンターリセットが必要です:アイテム。そのブロックの前。
グレッグ


5

HTML5:value属性を使用(CSSは不要)

最新のブラウザはvalue属性を解釈し、期待どおりに表示します。MDNのドキュメントを参照してください。

<ol>
  <li value="3">This is item three.</li>
  <li value="50">This is item fifty.</li>
  <li value="100">This is item one hundred.</li>
</ol>

また、見ていMDNの記事に特にドキュメントおよび属性を。<ol>start


4

マーカスダウニングの回答を借用および改善しました。テスト済みで、Firefox 3およびOpera 9で動作します。複数の回線もサポートしています。

ol {
    counter-reset: item;
    margin-left: 0;
    padding-left: 0;
}

li {
    display: block;
    margin-left: 3.5em;          /* Change with margin-left on li:before.  Must be -li:before::margin-left + li:before::padding-right.  (Causes indention for other lines.) */
}

li:before {
    content: counter(item) ")";  /* Change 'item' to 'item, upper-roman' or 'item, lower-roman' for upper- and lower-case roman, respectively. */
    counter-increment: item;
    display: inline-block;
    text-align: right;
    width: 3em;                  /* Must be the maximum width of your list's numbers, including the ')', for compatability (in case you use a fixed-width font, for example).  Will have to beef up if using roman. */
    padding-right: 0.5em;
    margin-left: -3.5em;         /* See li comments. */
}

また、text-alignが必要です。左。正しくはありません。そして最後の行はマージン左でなければなりません:-3.5em;
グロム

@grom、全文訂正をありがとう。また、Operaはデフォルトでリストを右揃えでレンダリングするため、この動作を模倣しました。
ストレージャー、2009年

@ grom、Firefoxの問題は... Firefoxは、たとえdisplay:inline-blockであっても、フロートなしで独自の行にli:before疑似要素を配置します。
ストレージャー、2009年

@strager、まあ、私はLinuxでは3.0.4、Windowsでは3.0.3を使用していますが、floatがなくても機能します。ルール。
グロム

@grom、うーん、面白い。私は自分でテストしたところ、フロートなしで動作しました。多分私はタイプミスした。
ストレージャー

2

そこには Type属性しかし、あなたが数字/文字の後にピリオドを変更することはできません、あなたは番号のスタイルを変更することができます。

<ol type="a">
    <li>Turn left on Maple Street</li>
    <li>Turn right on Clover Court</li>
</ol>

この回答のマークアップは修正する必要があります。小文字を使用し、属性値を「引用符」で囲みます。
dylanfm 2009年

そして、要素を閉じます:<li> ... </ li>。
dylanfm 2009年

@dylanfm —表示されたマークアップが適切で、100%有効なHTMLであることに気付いていますか?XHTMLが要求されない限り、XHTMLを使用しないことで人々に反対票を投じないでください。
Ben Blank

私はあなたに反対票を投じませんでした。そして、はい、それは本当です。HTML。私はちょうど標準的なうるさい人でした。
dylanfm 2009年

無効なHTMLを投稿したことをお詫びします。ウェブサイトからコードをコピーしましたが、修正するつもりはありませんでした。私は今恥ずかしいと思います:(
GateKiller 2009年

1

ドキュメントに関すると list-style-position: outside

CSS1はマーカーボックスの正確な位置を指定していませんでした。互換性の理由から、CSS2も同様にあいまいなままです。マーカーボックスをより正確に制御するには、マーカーを使用してください。

そのページのさらに上には、マーカーに関するものが含まれています。

一例は次のとおりです。

       LI:before { 
           display: marker;
           content: "(" counter(counter) ")";
           counter-increment: counter;
           width: 6em;
           text-align: center;
       }

マーカーのすべての例(w3.org/TR/CSS2/generate.html#q11を参照)は、私には機能しません。
グロム

1

いいえ、DLを使用してください:

dl { overflow:hidden; }
dt {
 float:left;
 clear: left;
 width:4em; /* adjust the width; make sure the total of both is 100% */
 text-align: right
}
dd {
 float:left;
 width:50%; /* adjust the width; make sure the total of both is 100% */
 margin: 0 0.5em;
}

0

私はそれを持ってます。以下を試してください:

<html>
<head>
<style type='text/css'>

    ol { counter-reset: item; }

    li { display: block; }

    li:before { content: counter(item) ")"; counter-increment: item; 
        display: inline-block; width: 50px; }

</style>
</head>
<body>
<ol>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
    <li>Something</li>
</ol>
</body>

キャッチは、これはということです間違いなく古い以下準拠したブラウザでは動作しません。display: inline-block非常に新しいプロパティです。


0

素早い汚れの代替ソリューション。事前にフォーマットされたテキストとともに集計文字を使用できます。ここに可能性があります:

<style type="text/css">
ol {
    list-style-position: inside;
}
li:first-letter {
    white-space: pre;
}
</style>

そしてあなたのhtml:

<ol>
<li>    an item</li>
<li>    another item</li>
...
</ol>

間のスペースに注意してください liタグとテキストの先頭とのは、集計文字(メモ帳内でTabキーを押すと表示される文字)であることに注意してください。

古いブラウザをサポートする必要がある場合は、代わりにこれを行うことができます:

<style type="text/css">
ol {
    list-style-position: inside;
}
</style>

<ol>
    <li><pre>   </pre>an item</li>
    <li><pre>   </pre>another item</li>
    ...
</ol>

0

他の答えは概念的な観点からはより良いです。ただし、適切な数の「&ensp;」を左に埋め込むことができます。それらを整列させるために。

*注:番号付きリストが使用されていることに最初は気づきませんでした。リストは明示的に生成されていると思いました。


0

ここでは、通常は読みたくない種類の答えを示しますが、やりたいことを達成する方法を示す他の答えがあるので、達成しようとしているものが本当にあるかどうかを再考するのは良いことだと思います良い考えです。

最初に、提供されているものとは異なるセパレータ文字を使用して、非標準的な方法でアイテムを表示することが適切かどうかを検討する必要があります。

その理由はわかりませんが、正当な理由があるとしましょう。

ここでは、主にCSS:before疑似クラスを使用して、マークアップにコンテンツを追加する方法を説明します。このコンテンツは、実際にDOM構造を変更し、それらのアイテムを追加しています。

標準の "ol"列挙を使用すると、 "li"テキストは選択可能であるが、その前の数字は選択できないレンダリングされたコンテンツが得られます。つまり、標準の番号付けシステムは、実際のコンテンツよりも「装飾」のようです。たとえば、「:before」メソッドを使用して数値のコンテンツを追加すると、このコンテンツは選択可能になり、これにより、望ましくないvopy / pasteの問題、またはこの「新しい」コンテンツを追加で読み取るスクリーンリーダーのアクセシビリティの問題が発生します。標準の記数法に。

おそらく別のアプローチは、画像を使用して数値のスタイルを設定することかもしれませんが、この代替案には固有の問題があります(画像が無効になっている場合は数値が表示されない、数値のテキストサイズが変更されない、など)。

とにかく、この回答の理由は、この「画像」の代替案を提案するだけでなく、順序付けられたリストの標準的な数え上げシステムを変更しようとした結果を人々に考えさせるためです。


0

このコードは、番号付けスタイルをliコンテンツのヘッダーと同じにします。

<style>
    h4 {font-size: 18px}
    ol.list-h4 {counter-reset: item; padding-left:27px}
    ol.list-h4 > li {display: block}
    ol.list-h4 > li::before {display: block; position:absolute;  left:16px;  top:auto; content: counter(item)"."; counter-increment: item; font-size: 18px}
    ol.list-h4 > li > h4 {padding-top:3px}
</style>

<ol class="list-h4">
    <li>
        <h4>...</h4>
        <p>...</p> 
    </li>
    <li>...</li>
</ol>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.