こんにちは、ぷにこです🐹
本日は、自己学習として理解したことを
ブログに備忘録として残そうと思います。
至らない部分も多々多いと思いますので、
もしこの記事を読んでいただける方がおりましたら、
お手柔らかに見ていただけますと幸いです🐣
|本日の学び
- まずはーテーブルの骨組みを作ってみる
- スクロールができるようにする
- ヘッダー・フッターを固定する
【おまけ】
id、class名 命名の仕方何にしよう・・・(練習段階で迷いだす)
参考にしたサイト↓ https://qiita.com/itagakishintaro/items/168667d5ee4c56b30d52
まずはテーブルの骨組みを作ってみる
はじめに、テーブルに必要な要素をHTMLで記載しました。
<!-- HTML -->
<main>
<section id="scrollableTable" class="wrapper">
<table>
<thead>
<tr>
<th>ヘッダー</th>
<th>ヘッダー</th>
<th>ヘッダー</th>
</tr>
</thead>
<tbody>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>フッター</td>
<td>フッター</td>
<td>フッター</td>
</tr>
</tfoot>
</table>
</section>
</main>

シンプルすぎるので、枠をつけます。CSSで指定します。
<!-- CSS -->
.table-layout {
margin: 0 25% 25% 25%;
border: solid 1px black;
}

<!-- CSS -->
.table-layout {
margin: 0 25% 25% 25%;
border: solid 1px black;
}
.table-layout thead tr th,
.table-layout tbody tr td,
.table-layout tfoot tr td {
border: solid 1px black;
}

スクロールをつけるには、行がなさすぎるので行を増やします。
<tbody></tbody>の中に、行を意味する<tr></tr>を追加で9個追加します。
<tr></tr>の中には、カラム(列)分(<th></th>の個数)のセルデータ(<td></td>)を追加します。今回は列が3列のため、3個追加します。
<!-- HTML -->
<main>
<section id="scrollableTable">
<table class="table-layout">
<thead>
<tr>
<th>ヘッダー</th>
<th>ヘッダー</th>
<th>ヘッダー</th>
</tr>
</thead>
<tbody>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>フッター</td>
<td>フッター</td>
<td>フッター</td>
</tr>
</tfoot>
</table>
</section>
</main>

ヘッダーの文字が意図せず太くなっているのが嫌だったので、
CSSを指定。
※font-weight:none; が効かなかった・・・。
font-weight: nomal;で効いた・・・。
ヘッダーとフッターがわかりやすいように色を付けました。
<!-- CSS -->
.table-layout thead tr th {
font-weight: normal;
background-color: #ef86b2;
}
.table-layout thead tr th,
.table-layout tbody tr td,
.table-layout tfoot tr td {
border: solid 1px black;
}
.table-layout tfoot tr td {
font-weight: normal;
background-color: coral;
}

スクロールができるようにする
<table></table>を<div></div>で囲み、
<div>にクラス名 table-containerを付与して、そこに overflow-y: scroll;(縦にスクロール)を追加しました。
他にも、見やすいようにCSSで微調整しています。
<!-- HTML -->
<main>
<section id="scrollableTable">
<div class="table-container">
<table class="table-layout">
<thead>
<tr>
<th>ヘッダー</th>
<th>ヘッダー</th>
<th>ヘッダー</th>
</tr>
</thead>
<tbody>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
<tr>
<td>ボディ</td>
<td>ボディ</td>
<td>ボディ</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>フッター</td>
<td>フッター</td>
<td>フッター</td>
</tr>
</tfoot>
</table>
</div>
</section>
</main>
<!-- CSS -->
.table-container {
height: 200px;
width: 100px;
margin: 0 25% 25% 45%;
overflow-y: scroll;
}
.table-layout {
border: solid 1px black;
/* overflow-y: scroll; */
}
.table-layout thead tr th {
font-weight: normal;
background-color: #ef86b2;
}
.table-layout thead tr th,
.table-layout tbody tr td,
.table-layout tfoot tr td {
border: solid 1px black;
}
.table-layout tfoot tr td {
font-weight: normal;
background-color: coral;
}

ちなみに、<table></table>自体に対して overflow-y: scroll; を追加しても、効かなかったです。
あくまでも、<table></table>を囲んでいる外側の<div></div>に対して追加することが必要そうです。
ヘッダー・フッターを固定する
ヘッダー・フッターを固定します。
<thead></thead>にヘッダーを固定するためのCSSを、<tfoot></tfoot>にフッターを固定するためのCSSを追加しました。
<!-- CSS -->
.table-container {
height: 200px;
width: 100px;
margin: 0 25% 25% 45%;
overflow-y: scroll;
}
.table-layout {
border: solid 1px black;
/* overflow-y: scroll; */
}
.table-layout thead {
position: sticky;
top: 0px;
z-index: 2px;
}
.table-layout tfoot {
position: sticky;
bottom: 0px;
z-index: 2px;
}
.table-layout thead tr th {
font-weight: normal;
background-color: #ef86b2;
}
.table-layout thead tr th,
.table-layout tbody tr td,
.table-layout tfoot tr td {
border: solid 1px black;
}
.table-layout tfoot tr td {
font-weight: normal;
background-color: coral;
}

これで、ヘッダー・フッターを固定しつつ、スクロールができるテーブルができました!
ただ一つ・・・気になることが・・・

黄色く囲っているここの部分の枠線が、
スクロールする度に、表示されたり消えたり・・・

なんならスクロールの位置によっては、
body部分がちらみえしている・・・
この部分の調節が厄介だったりします(´;ω;`)
この点については課題としてとっておいて、
また別の機会に投稿したいと思います!
本日はこれにて・・・おわります。
ぷにこ🐹
コメント