テーブルの「行結合」で沼るな。rowspanを正しく操るための現場的解法
フロントエンド開発の現場で、テーブル(`
`)のマークアップを命じられたとき、ふと「あ、ここ行をまたいで結合したいな」と思う瞬間がありますよね。仕様書を眺めて「まあ`rowspan`を書けばいいだけでしょ」と高を括って実装し、結果として表示がガタガタに崩れて頭を抱えた経験、一度はあるはずです。
`rowspan`は、一見シンプルですが、ブラウザの描画アルゴリズムを理解していないと、途端にメンテナンス不能なスパゲッティコードを生み出す原因になります。今日は、中級エンジニアの皆さんが明日から自信を持ってテーブルを組めるよう、`rowspan`の「裏側の挙動」と「現場で愛される綺麗な書き方」について深掘りしていきましょう。
—
1. rowspanの基本:ブラウザはどう解釈しているのか?
`rowspan=”n”` を指定すると、そのセルは現在の行を含めて垂直方向に計`n`行分を占有します。ここで最も重要なのは、「結合した分、後続の行ではその列のセル定義を削らなければならない」という大原則です。
ブラウザのレンダリングエンジンは、テーブルを「グリッド」として捉えています。`rowspan`が指定された瞬間、ブラウザは「次の行の、この列の位置には、上の行から伸びてきたセルが既に存在している」と認識します。もし、その位置にわざわざ新しい`
`を追加してしまうと、グリッドが強制的に右へ押し出され、レイアウトが崩壊するというわけです。
現場の教訓: `rowspan`を使うときは、エディタ上で「仮想的なグリッド」を頭の中に描き、削るべきセルを正確に把握する癖をつけましょう。
—
2. 実践:綺麗なマークアップのサンプルコード
例えば、「2日間にわたるイベントスケジュール」を表示するテーブルを考えてみます。1日目の枠を2行分確保し、2日目は通常のテーブル構造にするケースです。
| 日付 |
時間 |
イベント名 |
| 10月1日 |
10:00 |
オープニングセレモニー |
| 13:00 |
基調講演 |
| 10月2日 |
11:00 |
ワークショップ |
このコードのポイント
- 構造の明示: `
`と`
`を分けることで、ブラウザがテーブルの構造をより正確に解釈しやすくなります。
- 行の引き算: 2行目の`
`内には、本来あるはずの「日付」のセルを記述していません。これが`rowspan`実装における唯一かつ最大の注意点です。
—
3. シニアからのアドバイス:メンテナンス性を高めるために
`rowspan`を多用するデザインは、アクセシビリティの観点から見ても、またレスポンシブ対応の観点から見ても「鬼門」になりがちです。実務において以下のルールを意識するだけで、チームの生産性は劇的に向上します。
① CSSでの装飾を前提にする
`rowspan`したセルに対して、`vertical-align: middle;` を当てるのは基本中の基本です。また、結合したセルと他のセルで背景色を変えるような場合、`tr:nth-child`セレクタを安易に使うと、結合の影響でスタイルが期待通りに当たらないことがあります。クラス名を適切に付与し、依存関係を断ち切る設計を心がけましょう。
② スマホ対応を考える(ここが最重要)
テーブルはスマホとの相性が最悪です。`rowspan`を多用したテーブルをスマホで表示すると、横幅が足りず、ユーザーは迷子になります。
- 推奨: `rowspan`を使うような複雑なテーブルは、スマホ表示時には`display: block;`でリスト形式に変換する、あるいは`overflow-x: auto;`のコンテナで囲むのが定石です。
③ 「本当に必要か?」を問う
デザイナーから渡されたFigmaのデザインが、過度に複雑な結合を求めている場合、一度立ち止まってください。「これ、`rowspan`を使わずに、CSS GridやFlexboxで擬似的なテーブルを作った方が保守性が高くないか?」と提案できるのが、シニアなエンジニアの役割です。
—
まとめ
`rowspan`は強力な武器ですが、同時に諸刃の剣でもあります。「次の行からセルを消す」という基本さえ押さえていれば怖くはありません。しかし、それ以上に「このテーブルは後から誰かが編集するのか?」「スマホでどう崩れるのか?」という視点を持ってマークアップに向き合ってください。
綺麗なコードは、書いた瞬間の美しさだけでなく、数ヶ月後に見返したときに「あ、ここは意図的にこう書いたんだな」と伝わる納得感の中に宿ります。皆さんの実装が、明日もバグ知らずでありますように!
よりよいエクスペリエンスを提供するため、当ウェブサイトでは Cookie を使用しています。引き続き閲覧する場合、Cookie の使用を承諾したものとみなされます。
タイトルとURLをコピーしました
|
コメント