
CSSでテキストの縦書きに対応する
クライアントワークで縦書きのテキストを扱うケースがあったので備忘録として残しておきます。CSS3以降、様々な機能拡張が進められており、javascriptなどを使わず手軽に実装できるようになってきているようですね。
また、縦書きにした時の各プロパティですが、横書きとはテキストの方向軸が異なるのでこちらも変わります。テキストの調整をするときに必要となりますので合わせて覚えておきたいですね。
writing-modeでテキストを縦書きにする
テキストはデフォルトで左から右の横書きになっていますが、writing-modeというプロパティで縦書きを適用することができます。このプロパティはブラウザ間で対応状況が異なるのでベンダープレフィックスをつけておくといいでしょう。// HTML
<p class="tategaki">いろはにほへと ちりぬるを<br>わかよたれそ つねならむ
</p>
// CSS
.tategaki {
-webkit-writing-mode: vertical-rl;
-ms-writing-mode: tb-rl;
writing-mode: vertical-rl;
}
実際にこのプロパティを適用するとこんな感じになります。せっかくなのでフォントも明朝体などにしてみました。
いろはにほへと ちりぬるを わかよたれそ つねならむ
writing-modeのプロパティに使える値は下記のようになっています。表記方向が記載されているので覚えやすいのではないでしょうか。| horizontal-tb | 左から右方向へ水平にテキストが表記(=横書き)されます。※top to bottom |
|---|---|
| vertical-lr | 左から右方向へ垂直にテキストが表記(=縦書き)されます。※left to right |
| vertical-rl | 右から左方向へ垂直にテキストが表記(=縦書き)されます。※right to left |
| text-align | leftで上端に揃える、centerで中央軸に揃える、rightで下端に揃える |
|---|---|
| line-height | 左右への行の間隔を調整できる |
| letter-spacing | 文字の上下間の間隔を調整できる |
text-orientationで半角英数字も縦書きに合わせる
writing-modeのプロパティでテキストを縦書きにすることができましたが、そのままですと半角英数字だけ文字の表記方向が異なります。ABCDE ABCDEFG 12345 1234567
そこで全角文字と表記方向を合わせたいときは、下記のようにtext-orientationというプロパティで調整することが可能です。// HTML
<p class="tategaki-all">ABCDE ABCDEFG<br>12345 1234567
</p>
// CSS
.tategaki-all {
-webkit-writing-mode: vertical-rl;
-ms-writing-mode: tb-rl;
writing-mode: vertical-rl;
text-orientation: upright;
}
text-orientationのプロパティで値をuprightにすることで全角文字と半角文字の全てが縦書きに揃いました。ちなみに初期値にはmixedという値が設定され、こちらは文字に合わせて自動的に適切な方向で表示されるようになります。
ABCDE ABCDEFG 12345 1234567
ちなみに、このtext-orientationのプロパティですが、現在のところIEとsafariは未対応になっています。使用する際は注意するようにしましょう。 (参考にさせて頂いたサイト) CSS3で縦書きにする方法と挙動categories
- WordPress(61)
- JavaScript(49)
- Vue.js(48)
- CSS(46)
- jQuery(34)
- Nuxt.js(22)
- Sass(21)
- Gulp(17)
- webpack(16)
- PHP(14)
- HTML(14)
- GSAP(11)
- React(10)
- Vite(9)
- Pug(9)
- Laravel(8)
- Cordova(8)
- Linux(7)
- Next.js(6)
- Apache(5)
- Shopify(4)
- REST API(4)
- Node.js(4)
- Smarty(3)
- Git(3)
- JSON(3)
- その他プログラミング(3)
- Google Apps API(3)
- Bootstrap(3)
- 環境構築・システム(3)
- TypeScript(2)
- EJS(2)
- RMS(2)
- Docker(2)
- Instagram API(2)
- Excel VBA(2)
- SVG(1)
- Dart(1)
- ECカートASP(1)
- Markdown(1)
- AMP(1)
- Nginx(1)
- XML(1)
- shellscript(1)
- Ruby(1)
- MySQL(1)