logo
コーディング

更新日

段組みを使って縦書きの文章をレスポンシブ対応させる方法

CSSで文章を縦書きにする表現、少しずつ目にする機会が増えてきたように思います。しかし、縦書きのコンテンツをレスポンシブ対応させるのはなかなか大変。様々なサイトを見てみましたが、文章を横にスクロールしたり、文字サイズを調整してなんとかモバイルに対応しているようです。今回はたった一行でそんな問題を解決する方法を紹介します。

縦書きの設定

縦書きを設定するのはとっても簡単!縦書きにしたい箇所に CSS で writing-mode: vertical-rl; を記述します。この「vertical」が縦、「rl」が右から左(Right to Left)という意味です。

また、IE 用には別の書き方になります。 -ms- というベンダープレフィックスを付け、tb-rl(上から下、右から左= Top to Bottom, Right to Left)を指定すれば OK。

CSS

body{
  -ms-writing-mode: tb-rl;
  writing-mode: vertical-rl;
}

これだけで縦書きは実装できました!

段組みの設定

段組みとは、特に紙のデザインではよく見かける、文章を複数のカラムにわけて読みやすく表示するレイアウトです。文章を囲っている親要素に対して column-count で段数を指定するだけで実装できます。Flexbox や Grid を使ったカラム分けとは違い、次のカラムにまたがった文章もドラッグして選択・コピペできる特徴を持ちます。

例えば wrapper というクラスのついた親要素に長い文章が入っている状態で、column-count: 2; を指定すると、縦書きの文章も二段にわけられます。

HTML

<div class="wrapper">
  <p>これは、私が小さいときに、村の茂平というおじいさんからきいたお話です。</p>
  <p>むかしは、私たちの村のちかくの、中山というところに小さなお城があって、中山さまというおとのさまが、おられたそうです。.........</p>
</div>

CSS

.wrapper {
  column-count: 2;
}

仕切りの線をつける

段と段の間にラインを引く時は column-rule が使えます。値の書き方は border の指定と同じく、線の幅、線の種類、線の色を指定。

CSS

.wrapper {
  column-count: 2;
  column-rule: solid 1px #ccc;
}

余白の指定

段と段の間の余白は column-gap で調整可能。

CSS

.wrapper {
  column-count: 2;
  column-rule: solid 1px #ccc;
  column-gap: 2.5rem;
}

レスポンシブ対応させる

このままでは画面の幅よりも文章量が多くなると、画面左側にズラーッと表示されてしまいます。横にスクロールしないと全文を読めませんね…。文章量にかかわらず、画面の端まできたら自動的に次の段に移って欲しい…!

そこで、ほんの一行、width: 100vw; を足してみましょう!

CSS

.wrapper {
  column-count: 2;
  column-rule: solid 1px #ccc;
  column-gap: 2.5rem;
  width: 100vw; /* ←これを足すだけ! */
}

これでレスポンシブ対応でき、文章が自動的に次の段に流れるようになりました。vw は viewport width の略で、表示している画面幅に対する割合です。100vw で「画面幅いっぱい」という意味ですね。

デモ画面右上の「EDIT ON CODEPEN」をクリックすると別タブで表示できるので、画面幅をドラッグして変更しながら動きを確認してみてください!

column-count を 2 以上に設定すると、画面幅が狭くなった時に段数が多くなり、折返しが細かくなってしまいます。メディアクエリーを使って調整するなどの工夫が必要です。

対応ブラウザー

この段組みはIE, Edge 含む主要ブラウザーに対応しています!安心して利用できますよ!


仕上げに振り仮名(ルビ)や字下げの設定も行いたいですね!以前書いた「日本らしさを表現!CSS で文字の縦書きに挑戦!」という記事の中で縦書き Web サイトと一緒に使いたい小技を紹介しているので、そちらも参考にカスタマイズしてみてください!