このページの中身

版面と行長

行がどこで折り返るかは、文章が決めるのではなく、レイアウトが決めます。

文章ブロックだけに幅を与えた悪い例と、レイアウトで幅を決めた良い例を比較した図
図を大きく見る
図の中身を文字で読む
  • ✕ 文章ブロックだけに max-width を当てる ○ 版面をコンテナで定義する
  • コンテナは広いのに文章だけが途中で終わり、右に説明のつかない空白が残る 見出し・本文・表がすべて同じ右端で揃う。図版だけが越えてよい
  • 図版だけ全幅なので、右端が揃わない 図版は断ち落としで版面を越える
  • この空白に理由がない 右端が1本に揃っている
  • 行長を短くしたいなら、幅を制限するのではなく理由を作る
  • 隣に要素を置いて列幅で決める / 版面そのものを狭くしてコンテナに与える。どちらも、折り返す位置がレイアウトで説明できる。

ひと目で#

幅は中身ではなく、レイアウトが決める。

版面
内容を収める枠。コンテナで定義し、すべての節がここを通る
行長
1行の文字数。和文は全角35〜45字、欧文は45〜75字が目安
断ち落とし
図版だけが版面を越えて、画面の端まで届く手法

行が折り返る位置は、レイアウトで説明できること。「1行が長いと読みにくいから」を理由にした幅の指定は使いません。

使い分け#

行長を短くしたいやり方
隣に何か置ける分割レイアウトにする。折り返しは列の幅で決まる
読み物のページ全体を狭くしたいコンテナそのものを狭くする
図版だけ大きく見せたい断ち落としで版面を越えさせる
版面に収めるもの版面を越えてよいもの
本文、見出し、表、リスト、フォーム図版、写真、背景の色面、区切りの帯

間違えやすいところ#

断ち落としは、どこに要素を置くかで決まります。幅の指定で越えさせようとすると、必ずどこかで数値が合いません。

断ち落としをコンテナの内側で幅指定した失敗例と、コンテナの外にDOMを出した正しい例の比較
図を大きく見る
図の中身を文字で読む
  • ✕ コンテナの中で 100vw ○ DOM でコンテナの外に出す
  • 縦スクロールバーの幅が余分に出る 帯は幅100%。中の文字だけ版面に戻す
  • 画面の幅 画面の幅
  • 図版(100vw) 図版(幅100%・親は .page の外)
  • はみ出す
  • 横スクロールが出て、375px でページ全体が横に動く。 .page > .bleed { inline-size: 100%; }
  • calc(100vw - scrollbar) のような当て物も、環境で外れる。 版面を越えてよいのは図版・写真・色面・区切りの帯だけ。
  • 本文まで断ち落とすと行長が伸び、そもそも版面が消える。越えるのは「見せるもの」に限る。

直す例#

架空の案件を1つ例にとります。どこを見て、何をどう直すかを書きます。

珈琲店の読み物ページです。本文に max-width: 34em を直接書いてありました。1280px の画面で開くと、コンテナは版面いっぱいまで広がっているのに、文章だけが左寄りで途中で終わります。右に、説明のつかない空白が残ります。

さらに悪いのは見出しと表です。見出しには幅を書いていないので版面の右端まで届き、本文だけが手前で折り返します。右端が2本ある状態です。読者は「何かが欠けている」と感じますが、原因は指摘できません。

直し方は2手です。まず p から幅の指定を外し、見出し・本文・表・リストを同じ右端に揃えます。そのうえで行長を短くしたいなら、隣に何かを置きます。 目次でも図版でも構いません。折り返しは、その列の幅で決まります。

このページでは、右に「この記事の目次」を 16rem で置きました。本文の列は残りの幅になり、1280px の画面で全角40字前後に落ち着きます。幅を1つも書いていないのに、行長が決まります。 画面が狭くなれば目次が下へ落ち、本文は版面いっぱいに戻ります。

写真だけは版面を越えさせます。ただし width: 100vw は使いません。100vw には縦スクロールバーの幅が含まれるので、横スクロールが出ます。帯にしたい要素を DOM でコンテナの外に出し、幅は 100% にします。文字は版面の中、写真は端まで、という形になります。

本文+サイドバー が、隣に列を置く形の完成形です。

確認する#

使えるパターン#

このページで扱う語#

このページで扱う語を並べる本文では太字3 語

語の名前から引くなら用語索引へ。

コンテナ
内容を収める版面の枠。幅の上限と左右の余白を定義し、ページ全体の整列の基準になる。
最大幅
要素がこれ以上広がらない上限値。可変レイアウトの中で幅を制限するために使う。
単一カラムグリッド
版面を1つの大きな矩形として扱う、最も単純なグリッド。長文を読ませることに特化する。

この話が要る場面#

このページが答えになる、現場の困り事です。困り事の側から探すと、同じ場所に着きます。

1行を何文字にすればいいか

和文は全角35〜45字、欧文は45〜75字。ただし文字数で幅を指定せず、レイアウトで決める。

このコードで動いている見本です

文章の右に意味のない空白が残る

行長を文字数で決めない。版面をコンテナに与えて、見出しも本文も表も同じ右端に揃える。

このコードで動いている見本です

広い画面で文章が間延びする

隣に要素を置く。目次でも図版でも、置けば折り返しがその列幅で決まる。

このコードで動いている見本です

画面いっぱいに広げるか、中央に寄せるか

読ませるものは版面を決めて寄せる。見せるもの(写真・図)は端まで出してよい。

このコードで動いている見本です

この場面のほかの困り事と、そのまま貼れる部品は文字を読ませる、余白と幅を決めるにまとめてある。逆引きには全188件。

版面を試す#

この値は作業台で決められます。和文の予約ページに載せて、幅と明暗を替えて確かめてから CSS を持ち帰る: 字と余白と幅

版面の幅と、隣に置く列を選ぶと、下の記事の折り返しが変わります。行長は結果として決まる数字で、文章に max-width を当てて作る数字ではありません。

約42字/行

  • 和文の目安(全角35〜45字)収まる

折り返しは列の幅で説明できます。本文側に max-width を足す必要はありません。

プレビューは幅に合わせて縮小します。折り返しの位置は実寸のままです。

生成した CSS です。既定は 68rem の版面に、18rem のサイドを置いた2列です。

:root {
  --page: 68rem;             /* 版面はここ1か所で決める */
  --gutter: var(--space-6);  /* 32px */
}

.page {
  max-inline-size: var(--page);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

/* 行長を短くしたいなら、隣に列を作る */
.with-aside {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 18rem;
  gap: var(--space-8);
}

@media (max-width: 47.9375em) {
  .with-aside { grid-template-columns: minmax(0, 1fr); }
}

/* 本文・見出し・表・リストには幅を持たせない。この構成で 1行 約42字(全角) */

この道具は JavaScript で動きます。無効の場合は、下の既定値のコードから始めてください。

出典#

関連#

この資料は、Webサイトを作るときに引くためのものです。 何のために作ったか。作っているのは AK²Lab。