TL;DR
カウンターに名前を付けないでくださいlist-item
問題:
CSS カウンターは比較的理解しやすく、十分に文書化されており、ブラウザーのサポートも充実しています。
しかし、理解できない予期しない動作に遭遇し、なぜこれが発生するのか知りたい. おそらくブラウザのバグでしょう…</p>
次の例では、カウンターが期待どおりに機能していることがわかります。
ol {
list-style-type: none;
counter-reset: list-counter;
}
ol>li {
counter-increment: list-counter;
}
ol>li:before {
content: counter(list-counter) '. ';
}
<ol>
<li>n</li>
<li>n</li>
<li>n</li>
<li>n</li>
</ol>
<ol>
<li>n</li>
<li>n</li>
<li>n</li>
</ol>
<ol>
<li>n</li>
<li>n</li>
</ol>
しかし、カウンターの識別子を に変更すると、list-item
ブラウザーによって動作が異なることがわかります。
ol {
list-style-type: none;
counter-reset: list-item;
}
ol>li {
counter-increment: list-item;
}
ol>li:before {
content: counter(list-item) '. ';
}
<ol>
<li>n</li>
<li>n</li>
<li>n</li>
<li>n</li>
</ol>
<ol>
<li>n</li>
<li>n</li>
<li>n</li>
</ol>
<ol>
<li>n</li>
<li>n</li>
</ol>
Chrome と Firefox では期待どおりに動作しますが、Edge と Internet Explorer 11 では 2 からカウントを開始して 2 ずつ増加し、Safari では 0 からカウントを開始して 1 ずつ増加します。
たとえば、プロパティをコメントアウトすると、さらに奇妙になりcounter-reset
ます。その後、Safari は正しくカウントしますが、Chrome は 2 からカウントを開始しますcounter-increment
。Chrome と IE/Edge だけをコメント アウトすると、実際には 0 が表示されるはずですが、正しくカウントされます。
これをいじると、さまざまなブラウザーでさらに奇妙な動作が発生します。これはすべて、識別子がlist-item
.
最初にこの問題に遭遇したとき、それ以上調査せずに最初に想定したのは、少なくともdisplay
プロパティ valueに関係しているということlist-item
でした。MDN が述べているように:
list-item キーワードにより、要素は、そのリスト スタイルのプロパティ (箇条書きなど) によって指定された内容を持つ ::marker 疑似要素を生成し、それ自体の内容に対して指定された型の主要なボックスを生成します。
参照: https://developer.mozilla.org/en-US/docs/Web/CSS/display-listitem
しかし、これに関する詳細なドキュメントが見つからなかったため、さまざまなベンダーがこのような同様のバグをどのように実装できるのだろうかと思います...</p>
質問:
ここで私が本当に見逃しているものはありますか?仕様による識別子の予約語はありますか? について何か特別なことはありlist-item
ますか?
W3C仕様では、それについて何も見つかりません:
https://www.w3.org/wiki/CSS/Properties/counter-increment
https://www.w3.org/wiki/CSS/Properties/counter-reset
追加情報:
完全を期すために、使用されているバージョンを次に示します。
- Chrome 70.0.3538.110 MacOS Mojave 10.14.1
- クロム 70.0.3538.110 Windows 10 17134.407
- エッジ 17.17134 Windows 10 17134.407
- Firefox 63.0.3 MacOS Mojave 10.14.1
- Firefox 63.0.3 Windows 10 17134.407
- Internet Explorer 11.407.17134.0 Windows 10 17134.407
- Safari 12.0.1 MacOS Mojave 10.14.1