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を指定すると解決します。
ぜひお試しください。

こちらの書籍は初学者のウェブデザイナーの方々にオススメです。