🎃

【CSS】文字を縦書きにする

2024/03/18に公開

この記事の目的

最近、日本のWebサイトで、文字を 縦書き にしたレイアウトを見ることが多いです。

例えば、以下のサイトたちです。

https://www.pola.co.jp/special/p/wrinkle/divetowrinkle/

https://www.kayanoya.com/ozouni/

https://unforgettable.studio.site/

このようなサイトの他に、メニューバーの文字を縦書きで表示するサイトもよく見ます。

この記事では、「文字の縦書きを使えるようにする」ことを目的に、以下のプロパティについて解説します。

  • 文字を縦書きにする「writing-mode」プロパティ
  • 縦書きテキストの向きを設定する「text-orientation」プロパティ
  • 数字が横向きになるのを防ぐ「text-combine-upright」プロパティ

文字を縦書きにする「writing-mode」プロパティ

https://developer.mozilla.org/ja/docs/Web/CSS/writing-mode#sideways-rl

writing-mode は、厳密には、ブロックのフロー方向を設定するプロパティです。

ブロックのフロー方向は、左書き言語( ltr:英語など) 又は、右書き言語( rtl:ヘブライ語など) によって変わります。

右書き言語について、詳しく知りたい方向け:

https://ja.wikipedia.org/wiki/右横書き言語

続いて、値の紹介です。

※「rtl」の説明は省いております。

horizontal-tb

既定値です。文字を「左から右」に流す設定がされています。

他のプロパティは、全て縦書きになります。

horizontal-tb.png

vertical-rl

「ltr」では、文字は「上から下」に流れ、行は「右から左」に流れます。

イメージとしては、原稿用紙の書く方向です。

vertical-lr

「ltr」では、文字は「上から下」に流れ、行は「左から右」に流れます。

vertical-rl-lr.png


以下の値は、firefox ブラウザーでしか使えないので注意が必要です。

sideways-rl

「ltr」では、文字は「下から上」に流れ、に90度回ります。

sideways-lr

「ltr」では、文字は「上から下」に流れ、に90度回ります。

sideways-rl-lr.png

ブラウザーとの互換性

Can I use writing mode

writing-mode-caniuse.png

縦書きテキストの向きを設定する「text-orientation」プロパティ

https://developer.mozilla.org/ja/docs/Web/CSS/text-orientation

text-orientation は、文字の向きを設定するプロパティです。

縦書きテキスト(writing-modehorizontal-tb 以外の値)の時だけ、使用できます。

続いて、値の紹介です。

mixed

既定値です。縦書き用の文字は自然に配置します。横書き用の文字は右に 90° 回転させます

upright

横書き用の文字を、正立(縦書き)で配置します。また、すべての文字を左書きと見なします。 direction の使用値は ltr に強制されます。

sideways

すべてのテキストを 90° 回転したように配置します。

text-orientation.png

/* vertical-rl を基準 */
writing-mode: vertical-rl;

/* mixed */
text-orientation: mixed;

/* upright */
text-orientation: upright;

/* sideways */
text-orientation: sideways;

以下は使われていない値です

sideways-right

sideways の別名。使われていない。

use-glyph-orientation

SVG 要素上で、プロパティ glyph-orientation-vertical と glyph-orientation-horizontal の値を使用する。現在は、使用されていない。

ブラウザーとの互換性

Can I use text-orientation

text-orientation-caniuse.png

数字が横向きになるのを防ぐ「text-combine-upright」プロパティ

https://developer.mozilla.org/ja/docs/Web/CSS/text-combine-upright

text-combine-upright は、1文字分の空間にどれくらいの文字を入れるかを設定するプロパティです。

簡単に言うと、word などで見かける「縦中横」の設定を行います。

縦中横について知りたい方向け:

https://www.weblio.jp/content/縦中横

続いて、値の紹介です。

none

特別な処理をしません。

all

文字を1文字分の空間に収めます。「縦中横」の設定です。

設定したい部分を<span> タグなどで囲みます。

text-combine-upright.png

/* vertical-rl を基準 */
writing-mode: vertical-rl;

/* 「2024」の部分を <span> で囲む */
span {
    text-combine-upright: all;
}

digits <integer>?

※ 対応しているブラウザがないので、使いません。

指定した桁数の数字を1文字分の空間に収めます。

桁数の範囲は、2~4です。範囲外になると無視されます。

既定値は、2です。

ブラウザーとの互換性

Can I use text-combine-upright

text-combine-upright-caniuse.png

他の参考資料

https://www.codegrid.net/articles/2015-vertical-script-1/

Discussion