HTMLのtable
タグ、およびCSSのdisplay:table;
を使ったレイアウト実装時に、テーブルのセルを[position:sticky;]で固定すると、そのセルのボーダーが消えてしまう現象の解決方法を紹介します。
まずはエラーが発生する状況をご確認ください。
DEMO : テーブルのボーダーが消える現象
解決方法
この現象は親要素のtableにborder-collapse:collapse;
を指定しているときに発生します。
つまり。親要素のtableに対して[border-collapse:separate;]を指定すると、ボーダーが正常に表示されるようになります。
HTMLサンプル
<div class="responsive-table"> <table> <tr> <th class="fixed-cell">サンプル</th> <th>サンプル</th> <th>サンプル</th> <th>サンプル</th> </tr> <tr> <th class="fixed-cell">サンプル</th> <td>サンプル</td> <td>サンプル</td> <td>サンプル</td> </tr> </table> </div>
ここでは「class="fixed-cell"」と名付けたテーブルセルを左側に固定すると仮定します。
CSSサンプル
.responsive-table { padding:0; margin:0 0 6em 0; overflow:auto; white-space:nowrap; } table { border-collapse:separate; border-spacing:0; width:auto; } table th, table td { background-color:#fff; border-right:1px solid olivedrab; border-bottom:1px solid olivedrab; padding:1em; white-space:nowrap; } table tr:first-child th, table tr:first-child td { border-top:1px solid olivedrab; } table th:first-child, table td:first-child { border-left:1px solid olivedrab; } table th.fixed-cell, table td.fixed-cell { position:-webkit-sticky; position:sticky; left:0; min-width:60px; width:60px; }
先ほどHTML側で「class="fixed-cell"」と名付けたテーブルセルにposition:sticky;
を効かせ、さらに親要素のtableタグにborder-collapse:separate;
を指定しました。
これでボーダーが消える現象を回避できます。
DEMO : テーブルのボーダーが消える現象の解決方法
補足
[border-collapse:separate;]を指定しているにも関わらず、横スクロール発生時にborderが消えてしまうケースがあります。
これはtable要素に対してborderを指定していることが原因です。
table-cellである「th」または「td」に対してborderを指定すると解決します。
ぜひお試しください。
こちらの書籍は初学者のウェブデザイナーの方々にオススメです。
↓