Chome 135で::before::marker
とか::after::marker
のように疑似要素をネストしてスタイルを設定できるようになりました…
…これってどういうことだろう?ひょっとすると「縦書き順序付きリストの括弧付き番号で、番号だけを縦中横にする」のに使えるかもしれない。試してみました。
従来、生成されたテキストには構造がありませんでした。そこで例えば、括弧付き番号を生成するとして、生成した括弧と番号の色を変えたりといったことができませんでした。Chrome 135から、それができるようになりました。
::before::marker
の確認
次のようなHTMLで、note
クラスのp
要素に"1番目"、"2番目"、…と番号を生成することにします:
<p class="note">疑似要素のネスト</p>
<p class="note">縦書きの箇条書き</p>
次のようなCSSにすると、Chrome 135では、生成した"1"と"番目"の色を変えられます。
.note::before {
display: list-item inline;
counter-increment: note 1;
margin-inline-end: .5em;
content: "番目";
color: orange;
}
.note::before::marker {
content: counter(note);
color: crimson;
}
:root {
counter-reset: note 0;
}
次のような表示になると思います:
ポイントは::marker
疑似要素の順番だと思いました:
-
::before
疑似要素をlist-item
にします(display: list-item;
)。::marker
疑似要素はlist-item
にしかありません -
::before
疑似要素の中の::marker
疑似要素で番号を生成します。生成した番号は::before
疑似要素で生成した"番目"の前にあります
縦書き順序付きリストの括弧付き番号を縦中横
さて、
縦書きの論文では文末にまとめた注や文献の番号を縦中横にして、上下を括弧ではさむことがあります。
次のような順序付きリストを縦書きにして括弧付き番号を生成するのですが…
<ol>
<li>色は匂へど散りぬるを</li>
<li>我が世誰ぞ常ならむ</li>
<li>有為の奥山今日越えて</li>
<li>浅き夢見し酔ひもせず。</li>
</ol>
番号だけを縦中横にして括弧は縦書きのままとします。"(99)"と生成されたテキストのうち、"99"だけを縦中横にするのです。自動生成したテキストに構造があってほしいのです。こういうのが従来はできませんでした。
Chrome 135でサポートされた::before::marker
を使うと、かなり苦しいのですが、HTMLはそのままでCSSだけで実現できます。
:root {
writing-mode: vertical-rl; /* 縦書き */
}
ol {
padding-inline-start: 2.5em;
}
ol li {
display: list-item;
list-style-type: none;
text-indent: -2em;
}
ol li::marker {
content: "( "; /* 苦しい… */
}
ol li::before {
display: list-item inline;
content: ")";
}
ol li::before::marker {
content: counter(list-item);
text-combine-upright: all;
}
次のような結果になります:
li
要素がすでにlist-item
なのに、その疑似要素li::before
もまたlist-item
だとはややこしい。さらに、li
にli::marker
がすでにあるのに、li::before
にもli::before::marker
があるなんて!ひょっとすると、何か勘違いがあるのかもしれません。
次の部分の"( "の空白" "は何のために付いてるのかというと、リストのインデントのためです。
ol li::marker {
content: "( "; /* 苦しい… */
}
::marker
疑似要素にはmargin
プロパティが効かないので、"("の位置を調整するために空白を付けてます。苦しい。
次のような大きなリストだと効果が分かりやすいと思います。
See the Pen 縦書き順序付きリストで括弧付き番号が縦中横 by Taku Yamaguchi (@yamahige) on CodePen.
縦書き順序付きリストについては、縦中横を実現するtext-combine-upright
プロパティのdigits 2
などの値が実装されることが本筋と思います。ですが、とりあえずHTMLはシンプルなままに、括弧付きの縦中横番号を表示できました。