position:stickyを使ってテーブルの1行目を固定する【css】

position:sticky を使ってテーブルの 1行目を固定する【css】

デザイナーのオッコです。

表が長くなると、見出しを固定したくなることがありますね。

今日はそんなときに使える、position:stickyを使った処理をご紹介したいと思います。

前提:UIKitを使用しているためある程度のテーブルが既に出来上がっている(ukクラスの記載は省略)

【html】
<div class="contents sticky-container">
/* 中略 */
 <table>
  <tbody>
   <tr class="sticky-item">
    <th colspan="1">見出し1</th>
    <th colspan="1">見出し2</th>
    <th colspan="2">見出し3</th>
    <th colspan="2">見出し4</th>
   </tr>
   <tr class="sticky-item">
    <th colspan="1">サブ見出し1</th>
    <th colspan="1">サブ見出し2</th>
    <th colspan="1">サブ見出し3</th>
    <th colspan="1">サブ見出し4</th>
    <th colspan="1">サブ見出し5</th>
    <th colspan="1">サブ見出し6</th>
   </tr>
   <tr>
    <td colspan="1">内容1</th>
    <td colspan="1">内容2</th>
    <td colspan="1">内容3</th>
    <td colspan="1">内容4</th>
    <td colspan="1">内容5</th>
    <td colspan="1">内容6</th>
   </tr>
  </tbody>
 </table>
</div>
【css】

.contents.sticky-container {
    overflow: visible;
    /* sticky-itemの親要素・先祖要素はoverflowがvisibleの必要がある */
}

.sticky-container table {
    border-collapse: separate;
    /* tableがborder-collapse:collapseだとborderが固定されない */
}

.sticky-item {
    position: sticky; /* 必須処理 */
    top: 〇〇px; /* 固定する高さを指定(ヘッダがない場合0でおk) */
    border: solid #CCC;
    border-width: 1px 0 0 1px;
    /* border-collapseをseparateにした対応で、borderを付け直し */
}

.sticky-item:nth-child(2) {
    /* 見出しが2行ある場合、2行目trに対しtopを再設定 */
    top: 〇〇px; /* 1行目の要素の高さ */
}

/* 以下全てborder-collapse:separate対応 */

.sticky-item th {
    border-top: solid 1px #CCC;
}

th, td {
    border: solid #CCC;
    border-width: 0 1px 1px 0;
}

th:first-child, td:first-child {
    border-left: solid 1px #CCC;
}

tr:first-child th {
    border-bottom: 0;
}

自分で一からテーブルを作成する場合は、overflow: visible;やborder-collapse: separate;の処理はいらない可能性もあります。

しかし、行を固定したいという要望が出るのはテーブルを作成し終わった後だったりしますよね。

そんなときに陥りやすいポイントが、以下2点です。

  1. sticky-itemの親要素・先祖要素がoverflow: visible;以外になっているとposition: sticky; が効かない。
  2. tableがborder-collapse:collapseになっているとborderが固定されない。

overflowはvisibleに上書きし、borderはseparateにして、全部のセルに付いちゃった線は綺麗に付け直しましょう。

参考記事↓

福岡のホームページ制作会社 | シ...
CSSでテーブル表の一部を固定してスクロールする方法 | 福岡のホームページ制作会社 | シンス株式会社 こんにちは。福岡のホームページ制作会社、シンス株式会社の芦刈です。

CSS position:stickyの使い方と動かない時の対処法

【CSS】table-cellを[position:sticky;]で固定したときのボーダーが消える現象を解決する方法

目次

関連記事紹介

APICE INTELIGENCE
scroll-hintで横長の表の操作性を改善する | APICE INTELIGENCE デザイナーのオッコです。 どうしても横長のコンテンツをスマホで表示しなければならないときってありますよね。 でもぱっと見て「横スクロールができる」とユーザーに分か...
APICE INTELIGENCE
インデント【無料】HTMLのコード整形ツール | APICE INTELIGENCE コーディングにはインデントを入れるルールがありますが、複数のエンジニアやコーダーが入ってコピー&ペーストなどで編集した時、かなりインデントが乱れ、コードがわから...
tecn
カレンダーがスマホで横スクロール表示になってくれない | tecn TECN NEWS 自動表示枠 横長の要素にoverflowが効かない問題 コーダーのオッコです。 カレンダーをスマホで横スクロールにしたかったのですが、カレンダーの横幅のcssを以下...
APICE INTELIGENCE
YouTubeのiframeのサイズ調整CSS | APICE INTELIGENCE /* YouTube */ /*親*/ .youtube { position: relative; padding-bottom: 50%; height: 150px; overflow: hidden; margin-bottom:

システム開発はアピステクノロジーへ

アピステクノロジーでは、システム開発をはじめ、システムパッケージの販売にも力を入れています。

「IT TOOL」をご存じですか?

既に標準の機能が実装されているシステムパッケージを、貴社用にデザインカスタマイズし提供します。

さらに、IT導入補助金の利用で価格を大きく抑えることも可能です。

実績多数、低価格で本格的なサイトができると好評いただいております。

詳しくは弊社HPをご覧ください。

アピステクノロジーの実績紹介はこちら↓

ITツール紹介ページはこちら↓

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次