こんにちは!Webフロントエンドの世界へようこそ。
HTMLのテーブル(表)といえば、Webサイトで価格表やスケジュールを表示するときによく使いますよね。でも、いざ「この画面を紙に印刷して配布しよう!」となったとき、テーブルがページをまたいで無残に切り裂かれたり、2ページ目以降に「これ何の項目だっけ?」と迷子になったりして、頭を抱えた経験はありませんか?
今回は、そんな「Web画面を紙に印刷したときの切なさ」を解消するための、ちょっとした魔法のテクニックを伝授します。
—
なぜテーブルは印刷で「迷子」になるのか?
Webサイトは「どこまでも縦に長い巻物」のようなものですが、紙は「A4」という決まった枠組みですよね。ブラウザは、長いテーブルを適当な位置でパツンと切り離して次のページへ送るため、「2ページ目の表には見出し(項目名)がない」という悲劇が起こります。
これを解決するには、HTMLの構造を少し整えて、CSSで「紙への配慮」をしてあげる必要があります。
—
手順1:HTMLを「役割」ごとに整理する
まずは、HTMLのテーブルを「役割」に分けて記述しましょう。これ、実はとても重要です。
- `
`: 表の「顔」。一番上の見出し部分。
- `
`: 表の「体」。メインの中身。これらを分けることで、ブラウザに「ここが見出しで、ここからが中身だよ」と教えてあげることができます。
日付 項目 金額 10月1日 文房具代 500円
—
手順2:CSSで「おもてなし」をする
ここからが本題です。印刷するときだけ効く魔法のCSSを書いていきましょう。
見出し(thead)をページごとに繰り返す
「2ページ目以降も、一番上に同じ見出しを表示させたい!」という願いを叶えるのが `display: table-header-group` です。これを `thead` に指定します。
「行」を無理やり切り裂かないようにする
紙の都合で、1行の途中で改ページが入ってしまい、文字が半分に切れてしまうと読みづらいですよね。これを防ぐのが `break-inside: avoid` です。
では、これらのCSSをまとめてみましょう。
/ 印刷するときだけの特別な設定 /
@media print {
/ theadをページごとに自動で繰り返す設定 /
thead {
display: table-header-group;
}/ 1行(tr)がページをまたぐときに、無理やり分割されないようにする /
tr {
break-inside: avoid;
page-break-inside: avoid; / 古いブラウザ向け /
}/ 表全体に余白をとって、紙に収まりやすくする工夫 /
table {
width: 100%;
border-collapse: collapse;
}
}—
「なるほど!」ポイント:なぜうまくいくの?
この設定のすごいところは、「人間がわざわざ改ページ位置を計算しなくていい」という点です。
- 「あと3行でページが終わるから、残りは次のページに回そう」
- 「じゃあ次のページの先頭に見出しをコピーして置こう」
これらを全部ブラウザにお任せできるので、データが増えても減っても、常に美しい状態で印刷されるようになります。まるで、優秀な秘書が常にレイアウトを整えてくれているようなものですね。
—
最後に:完璧を目指しすぎない優しさも大切
ここまで印刷最適化の方法を解説してきましたが、Webの世界は多様です。ブラウザの種類や設定によっては、どうしても少しだけ崩れてしまうこともあります。
そんなときは、「完璧に印刷できなきゃダメだ!」と追い詰めすぎず、「まずは項目名が見えるだけで十分進歩!」と自分を褒めてあげてくださいね。HTMLとCSSの基本構造を正しく書いてあげること、それだけでWebは十分に「優しい」ものになります。
少しずつ、読み手に寄り添ったコードを書けるようになっていきましょう!また分からないことがあれば、いつでも聞きに来てくださいね。応援しています!
タイトルとURLをコピーしました - `

コメント