質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

18069閲覧

見出しが複数行あるテーブルの実装方法について

yayaya

総合スコア19

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/07/20 11:56

編集2019/07/20 12:08

イメージ説明
写真のように、見出しが複数行あるテーブルを作成しているのですが、この場合の見出し部分の実装について、
ご意見を伺いたいです。
なお、縦見出しの列は固定で、他のセルは横にスクロールできるイメージです。
前提として
・PCのみ
・firefox/Chromeのみ
になります。

悩んでいる箇所としては、
大・中・小の見出しが重なっている部分で、tableレイアウトにおいては、あまり適切な実装方法のイメージがつかず。
display:grid を使うといいのか・・?と思いつつも決めかねています。
(縦見出しの列はCSSのposition: stickyで固定しようとしています。)

ご意見いただけると嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

同様の実装を試みた経験からお話します。

邪推ですが、見出し部分にはjsonのようなデータを渡して、動的に表示する実装をするかと思います。
その前提で書きました。ご留意ください。

方法としては以下が考えられます。
・大中小ごとに行をつくり、ループを回す
・CSSGridをつかう
・大の行をつくり、その中に中の行をつくり、その中に小の行をつくる
・canvasで実装

順番はおすすめ順です。

・大中小ごとに行をつくり、ループを回す
こちらは一番簡易な実装です。

<tr> <th colspan="3">大1</th> <th>2</th> <th>3</th> </tr> <tr> <th>中1-1</th> <th>中1-2</th> <th>中1-3</th> <th>2</th> <th>3</th> </tr> <tr> <th>小1</th> <th>2</th> <th>3</th> </tr>

注意点としては2つあります。このループを回せるデータ構造にすること。加えてセルの幅を決定するために、大中には自分が持つ(中)小の個数データをもたせることがあります。

・CSSGridをつかう
ほぼ説明不要です。
ただし、上記と違い<tr>を使わないため、<tbody>側とのズレを細かく修正しなくてはいけません。そういった点で上記より手間がかかります。

・大の行をつくり、その中に中の行をつくり、その中に小の行をつくる

<tr> <table> <th>大</th> <tr> <th>中1</th> <table> <th>小</th> </table> </tr> <tr> <th>中2</th> </tr> </table> </tr>

記憶が怪しいですが、このような実装だったはずです。<table>のネストですね。こちらは構造も複雑ですし、CSSの調整にも時間がかかります。データ構造がわかりやすいことがメリットです。

・canvasで実装
一番自由度と性能が高く、一番難易度も高い実装方法です。
ひとつライブラリをつくるぐらいの気概が必要です。

投稿2019/07/20 18:26

編集2019/07/21 09:04
ttakatech

総合スコア118

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yayaya

2019/07/21 07:10

ありがとうございます! 1の場合、CSSの実装があまりイメージつかず、アドバイスいただけると嬉しいのですが、 描いていただいたようなテーブルタグにdisplay:glidで実装していくようなイメージでしょうか?
ttakatech

2019/07/21 09:03 編集

1の場合とは「大中小ごとに行をつくり、ループを回す」のことだとしてお話します。 htmlの<table>でつくられた要素は、すでに表のセルを持っています。そのため、display:gridは不要です。 widthやheight、borderなどの設定をすれば、すぐにでも表として機能します。 ただし大や中は、かかえる中小の数に応じてwidthを変える必要があります。 cssで変えるのもいいですし、colspan属性をつかうのも有用です。 http://html5.cyberlab.info/elements/table/td-colspan.html 回答をcolspanを混ぜたものに少々修正しました。ご確認ください。
yayaya

2019/07/21 13:58

> 1の場合とは「大中小ごとに行をつくり、ループを回す」のことだとしてお話します。 質問内容に不備があり、失礼しました・・! ご回答いただきありがとうございます! まさにやりたいことがcolspan属性でできそうです・・! 早速試してみます!
yayaya

2019/07/23 10:37

上記試してみました! 思った通りの実装ができました。 本当に感謝です。 ありがとうございました!
ttakatech

2019/07/23 11:05

参考になったようで何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問