何も指定しなければ、HTMLで記述した文字列は横書きになります。和風のサイトなどでは、文字を縦書きにしたい時もあるかと思います。
画像を使うという方法もありますが、今回はCSSを使って文字を縦書きにする方法をご紹介したいと思います。
CSSで文字を縦書きにする方法
文字を縦書きにするには、writing-modeプロパティを使います。
以下のように指定すれば、p要素が縦書きになります。
p {
-ms-writing-mode: tb-rl;
writing-mode: vertical-rl;
}
逆に以下のように指定すれば、文字は横書きになります。
p {
-ms-writing-mode: lr-tb;
writing-mode: horizontal-tb;
}
横書きの場合は通常は指定する必要はありませんが、PCでは縦書きで、スマホだけ横書きに戻したい場合などに指定します。
文字の向きを変更する
writing-modeプロパティを使って、文字を縦書きにすることができますが、そのままだと英数字の向きが横に倒れてしまいます。
text-orientationプロパティを使うことで、文字の向きを調整できます。以下のように指定すると、英数字も縦向きに表示されます。
p {
-ms-writing-mode: tb-rl;
writing-mode: vertical-rl;
text-orientation: upright;
}
text-orientationで指定できる値は、以下の通りです。デフォルトはmixedです。
| mixed | 英数字は右に90度回転して表示 |
| upright | 英数字を縦向きに表示 |
| sideways | すべての文字を右に90度回転して表示 |
英数字や記号を縦中横にする
複数の英数字や記号を1文字分として扱う「縦中横」も実現可能です。
このように、02と14だけが横方向に表示される縦中横を実現するには、text-combine-uprightプロパティを使います。
まずHTML側では、縦中横にしたい部分をspan要素で内包します。
<p><span class="vertical-mid">02</span>丁目<span class="vertical-mid">14</span>番地</p>
CSSでは、以下のように指定します。
.vertical-mid {
-webkit-text-combine: horizontal;
-ms-text-combine-horizontal: all;
text-combine-upright: all;
}
-webkit-text-combineはsafari、-ms-text-combine-horizontalはIE用のプロパティです。
このように指定することで、縦中横が実装できます。
あとがき
CSSだけでも縦書きが実現できるようになりました。画像を使わなくて良いので、自由度が高まりますよね。
文字を縦書きにしたい時は、ぜひ参考にしてください。

