HTMLとCSSで漢字にルビを振る方法
今回はHTMLとCSSで漢字にルビを振る方法を紹介します。
前提条件は以下
- IE11に対応する
- Andoroidに対応する
- サイト全体でgooglefontsのNoto Sans JP、もしくはNoto Serif JPを使う
- rubyタグは使わず、data属性を使う
説明環境は以下
- macOS Catalina v10.15.5
- Visual Studio Code v1.52.1
HTMLとCSSで漢字にルビを振る方法
rubyタグでも実装できますが、HTML上で本文とルビの判断がつきづらいため、data属性で実装します。
googlefontsのNoto Sans JP、もしくはNoto Serif JPを使う理由は、IE11対応と、Andoroid端末でも同じフォントで表示させるためです。
同じフォントで表示させることで、ルビを振ったときに位置がズレてしまったり、ルビの段落ちを防ぐことができます。
googlefontsをインストールする
まずはgooglefontsを読み込みます。以下はNoto Sans JPを読み込む例です。2行目にあるsubset=japaneseがないとIE11でフォントが適用されないので注意しましょう。
htmlファイルのhead内で読み込む場合は以下をコピペします。
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP&display=swap&subset=japanese" rel="stylesheet">
cssから読み込む場合は、以下の1行をcssファイルの一番上にコピペします。
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+JP&display=swap&subset=japanese");
HTMLで書くこと
ルビの部分にはクラス名c-rubyとdata属性を使います。
<p>
<span data-ruby="きょう" class="c-ruby">今日</span>の<span data-ruby="てんき" class="c-ruby">天気</span>は<span data-ruby="は" class="c-ruby">晴</span>れだ。
</p>
Sassで書くこと
p{
font-family: 'Noto Sans JP', sans-serif;
line-height: 2; //行間はルビがあるので広くとる
}
.c-ruby {
&[data-ruby] {
position: relative;
text-align: center;
}
&[data-ruby]::before {
content: attr(data-ruby);
position: absolute;
top: -1em; //ルビの上下の位置を調整する
left: 0;
right: 0;
margin: auto;
font-size: 0.5em;
line-height: 1;
white-space: nowrap; //ルビを段落ちさせないように
}
ルビの位置は15行目のtopで調整します。ルビが段落ちする場合があるので20行目のwhite-spaceを指定して段落ちを防ぎます。
ルビの位置をそれぞれ調整するには?
ルビの長さによっては漢字の中央に配置できない場合あります。そのときは以下のようにクラス名c-ruby--vr2を追加して位置を調整します。
<p>
<span data-ruby="はつばいちゅう" class="c-ruby c-ruby--vr2">発売中</span>の<span data-ruby="えいが" class="c-ruby">映画</span>の<span data-ruby="きゃくほん" class="c-ruby c-ruby--vr2">脚本</span>
</p>
sassでは18〜22行目のように指定します。
.c-ruby {
&[data-ruby] {
position: relative;
text-align: center;
}
&[data-ruby]::before {
content: attr(data-ruby);
position: absolute;
top: -1em; //ルビの上下の位置を調整する
left: 0;
right: 0;
margin: auto;
font-size: 0.5em;
line-height: 1;
white-space: nowrap; //ルビを段落ちさせないように
}
.c-ruby.c-ruby--vr2{
&[data-ruby]::before {
left: -0.5em;
}
}
さいごに
今回はHTMLとCSSで漢字にルビを振る方法を説明しました。漢字にルビを振る場合、1ページすべての漢字に対応することが多いでしょう。
本来はrubyタグで実装するのが自然ですが、本文とルビを判別するのが難しいため、テキストの修正が入ったときに苦労します。
ルビを振るエリアが限られているなら、rubyタグを使ったほうがcssの調整も少なく実装できます。
rubyタグについては以下の記事を参考にしてみてください。