[css] tableタグのstickyでborderが隠れる状態の回避方法

2025/01/24

CSS

t f B! P L
eyecatch 帳票システムなどを作る時に、HTMLでは必ず使用するTableタグ。 position:sticky機能が使える様になってから、ヘッダや見出しのスクロール固定ができるようになり、非常に便利に使っています。 でも、Tableのセルにborderがセットされていると、色々な不具合が生じるため、自分がやっているその回避方法について解説したいと思います。

borderが隠れる症状

普通にセルにborderを書いた状態でのtableの状態がコチラ。 ヘッダ部分のborderラインがスクロールすると、消えてしまうのがわかります。

Amazon売れ筋ランキング 2025年1月 : 周辺機器

※値段は、2025/1/8時点の表示です。
ID Image Price Name URL
1 ¥1,280 KIOXIA(旧東芝メモリ) microSD 128GB UHS-I Class10 KLMEA128G https://amzn.to/4afL5dW
2 ¥1,890 Anker PowerLine III Flow USB-C & USB-C ケーブル https://amzn.to/3DVmy1o
3 ¥7,826 ロジクール ワイヤレスマウス トラックボール 無線 M575S https://amzn.to/40sqxuj
4 ¥740 Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル https://amzn.to/40lhAUC
5 ¥2,480 KIOXIA(旧東芝メモリ) microSD 256GB UHS-I Class10 (最大読出速度100MB/s) https://amzn.to/4h3pAiD
ざっくりとcssを抜き出すとこんな感じ。 .wrap{ overflow:scroll; width:100%; height:300px; position:relative; } .wrap table{ border-collapse:collapse; } .wrap table tr:nth-of-type(1){ position:sticky; top:0; left:0; } いろんなサイトに、"border-collapse:collapse;" コイツが原因と書かれているので、 "border-collapse:separate;" に変更してみる。

Amazon売れ筋ランキング 2025年1月 : ノートパソコン

※値段は、2025/1/8時点の表示です。
ID Image Price Name URL
1 ¥12,800 NEC等 ノートPC VK23/ 12.5型/ 第6世代 i3-6100U /Win11 Pro/MS Office H&B 2019 /wajunのWIFI/Bluetooth/4GB/128GB SSD https://amzn.to/4fSEK9g
2 ¥16,907 超軽量Panasonic Let's note CF-SZ6■第7世代 Intel Core i5-7200U@2.5GHz/メモリ8GB/ https://amzn.to/4j9SpeX
3 ¥14,800 2-in-1 ノートパソコン IdeaPad D330 Windows11Pro 10.1型 office2019付き HD IPS液晶/Intel Celeron/メモリ:4GB/eMMC:64GB/Webカメラ搭載/Type-C USB3.1/日本語 キーボード搭載 https://amzn.to/3WbLTe1
4 ¥16,800 富士通 15.6インチ ノートパソコン A577/ Win11 Pro/MS Office H&B 2019 /Core i3 7130U/WIFI/HDMI / 8GB/256GB SSD/テンキー https://amzn.to/3BOXzMR
5 ¥99,800 ASUS ノートパソコン Vivobook 15 15.6インチ Ryzen 7 7730U メモリ16GB SSD1TB WPS Office搭載 Windows11 バッテリー駆動12.9時間 重量1.7kg インカメラ搭載 クワイエットブルー M1502YA-BQ183W https://amzn.to/424NiGR
.wrap table{ border-collapse:separate; border-spacing:0; } .wrap table th, .wrap table td{ border:1px solid black; } この状態だと、セルが隣り合っている箇所がborderが 1px + 1px = 2px になってしまいます。

対応仮説

borderを表示する箇所を特定(上と左だけ)に限定して、最下段のみ下、一番右のセルのみ右、にborderを表示すると、いい感じになるはずです。

Amazon売れ筋ランキング 2025年1月 : 家電&カメラ

※値段は、2025/1/8時点の表示です。
ID Image Price Name URL
1 ¥6,980 Amazon Fire TV Stick HD https://amzn.to/4j99fum
2 ¥3,490 Anker Power Bank (10000mAh, 22.5W) (モバイルバッテリー 10000mAh 最大22.5W出力 USB-C & USB-C ケーブル付属 ディスプレイ搭載) https://amzn.to/40mLCY8
3 ¥789 Amazonベーシック 乾電池 単3形 単三電池 アルカリ 保存期限10年 20個セット 1.5V 液漏れ防止 https://amzn.to/40qSDat
4 ¥4,490 Anker Nano II 65W (PD 充電器 USB-C)【独自技術Anker GaN II採用/PD対応/PSE技術基準適合/折りたたみ式プラグ】 https://amzn.to/3PxK5Ih
5 ¥702 Amazonベーシック 乾電池 単4形 アルカリ 保存期限10年 20個セット 1.5V 液漏れ防止 https://amzn.to/4h3efPy
.wrap table tr:nth-of-type(1){ position:sticky; top:0; left:0; } .wrap table{ border-collapse:separate; border-spacing:0; } .wrap table th, .wrap table td{ border-color:black; border-style : solid; border-top-width:black; border-left-width:black; border-bottom-width:0px; border-right-width:0px; } .wrap table tr:last-child{ border-bottom-width:1px; } .wrap table td:last-child{ border-right-width:1px; } この状態だと、stickyの下部のborderラインが消えてしまいますね。 もうちょっと改良してみましょう。

最終対応方法

Amazon売れ筋ランキング 2025年1月 : DIY・工具・ガーデン

※値段は、2025/1/8時点の表示です。
ID Image Price Name URL
1 ¥4,980 SwitchBot スイッチボット スイッチ ボタンに適用 指ロボット スマートスイッチ スマートホーム ワイヤレス タイマー https://amzn.to/4fUkyUp
2 ¥1,562 椅子脚カバー カルガルー 椅子の足カバー 椅子脚キャップ 椅子の脚 カバー 家具スライダー 丸形 長方形 正方形 滑りやすく 取れない フッ素 カンガルー マルチサイズ フリーサイズ 日本製 木製脚 8個入 シェリー Shelly https://amzn.to/4fWG8rK
3 ¥1,980 SwitchBot スマートプラグ プラグミニ スマートコンセント スイッチボット 消費電力モニター タイマー コンセント 節電·省エネ 直差し 遠隔操作 音声コントロール Bluetooth&Wi-Fi両方対応 https://amzn.to/40aLedZ
4 ¥571 東洋アルミ(Toyo Aluminium) 換気扇 フィルター 整流板 貼るだけ 切り取りミシン目付き 約64cm×91cm 1枚入 フィルたん S3074 https://amzn.to/4j6PLqf
5 ¥1,340 コジット ダンボールのストック ゴミ出し これ一つで解決 持ち運びできる段ボールストッカー https://amzn.to/4gLEXwe
.wrap table tr:nth-of-type(1){ position:sticky; top:0; left:0; } .wrap table{ border-collapse:separate; border-spacing:0; } .wrap table th, .wrap table td{ border-color:black; border-style : solid; border-top-width:black; border-left-width:black; border-bottom-width:0px; border-right-width:0px; } .wrap table tr:first-child th{ border-bottom-width:1px; } .wrap table tr:first-child + * td{ border-top-width:0px; } .wrap table tr:last-child{ border-bottom-width:1px; } .wrap table td:last-child{ border-right-width:1px; }

縦横対応

最後に、トップメニューだけじゃなく、サイドのナンバリングに関しても、sticky対応してみたいと思います。

Amazon売れ筋ランキング 2025年1月 : スポーツ&アウトドア

※値段は、2025/1/8時点の表示です。
ID Image Price Name URL
1 ¥1,919 Amazonベーシック ヨガマット 厚め 12mm キャリーストラップ付 トレーニングマット ストレッチマット ピラティスマット 188×61×1cm https://amzn.to/3C8DmS3
2 ¥3,380 [Geekin] 【新登場】 スノボ ゴーグル スキーゴーグル OTG広視野球面レンズ メンズ/レディース UV400保護 スノーボード ゴーグル イタリア製曇り止めレンズ 滑り止めベルト https://amzn.to/40odzyz
3 ¥4,817 トリガーポイント(TRIGGERPOINT) グリッド フォームローラー https://amzn.to/423o63s
4 ¥2,980 ALLOUT パワーグリップ プロ 正規品 オールアウト https://amzn.to/4gJWQM6
5 ¥1,980 créer(クレエ) 自転車カバー 防水 厚手 破れにくい 雨避け UV加工 盗難防止 210D-300D https://amzn.to/4j9j2AE
.wrap table tr:nth-of-type(1){ position:sticky; top:0; left:0; z-index:3; } .wrap table tr > *:first-child{ position:sticky; left:0; z-index:2; } .wrap table{ border-collapse:separate; border-spacing:0; } .wrap table th, .wrap table td{ border-color:black; border-style : solid; border-top-width:black; border-left-width:black; border-bottom-width:0px; border-right-width:0px; } .wrap table tr:first-child th{ border-bottom-width:1px; } .wrap table tr:first-child + * th, .wrap table tr:first-child + * td{ border-top-width:0px; } .wrap table tr > *:first-child{ border-right-width:1px; } .wrap table tr > *:first-child + *{ border-left-width:0px; } .wrap table tr:last-child{ border-bottom-width:1px; } .wrap table td:last-child{ border-right-width:1px; } 非常に長いコードになってしまいましたが、この書き方をコピペするのではなく、table内のセルのどの部分のborderを表示して、どこを非表示にするかをイメージできれば、それに適した書き方をするのがいいと思います。

あとがき

今回のsticky対応のborder表示をcssで行った場合、tableのリスト項目をjavascriptで絞り込みする様なシステムにおいて、思った様にborderの表示ができない場合があります。 classやattributeなどを駆使して、cssのselectorをうまく使いこなす必要があるので、この辺はコーダースキルが求められる点だと思います。 これが理解できない人は、今一度cssについて基礎学習をしてみることをオススメします。 意外とcssって奥深いんですよね。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ