(1) HTMLの表でヘッダー行を固定してスクロール時も残るようにする方法
(1-1) 構文
(1-2) サンプルプログラム
(1-3) サンプルプログラム実行結果
(1) HTMLの表でヘッダー行を固定してスクロール時も残るようにする方法
HTMLの表(<table>)で、縦長の場合などにスクロールした際に、ヘッダーだけは固定して残したい場合があるかと思いますが、その方法についてご紹介します。
最終的なアウトプットとしては、次のようなイメージになります。
(動画)Stickyの動画
(1-1) 構文
要素を固定するためには、cssに「position」プロパティを追記し、その値に「sticky」を指定します。例えば、表(<table>)のヘッダー(<th>)を固定する例ですと、cssに次の記述を行います。
- th {
- background:#eee;
- position: -webkit-sticky;
- position: sticky;
- top: 0;
- z-index: 2;
- }
(構文説明)
●セレクタ「th {・・・}」
●プロパティと値「background:#eee;」
スクロールした際にヘッダーと明細が重なって見えないように、ヘッダーには適当な色を付けています(これがないとヘッダーはスケルトン状態で、明細がスクロールで重なってしまう)。
●プロパティと値「position: sticky;」
●プロパティ: 値「position: -webkit-sticky;」
(1-2) サンプルプログラム
(1-2-1) css
cssに関しては、上記でご紹介した構文のまんまです。
(サンプル)
- @charset "UTF-8";
- th {
- background:#eee;
- position: -webkit-sticky;
- position: sticky;
- top: 0;
- }
(図121)
(1-2-2) JSP
JSPに関してはスクロールの様子を確認できるよう、適用な100行の<table>を作成しています。
(サンプル)
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <link rel="stylesheet" type="text/css" href="css/IT0996_FixTableHeader.css">
- <title>Fix Table Header Example</title>
- </head>
- <body>
- <p>
- これは表(table)のヘッダー(th)の固定テストです。<br />
- 先頭行を固定するためにcssでposition: stickyを指定しています。<br />
- </p>
- 空行1<br />空行2<br />空行3<br />空行4<br />空行5<br />
- 空行6<br />空行7<br />空行<br />空行9<br />空行10<br />
- <table border="1" width="1000" >
- <tr>
- <th width="250">Row #1</th>
- <th width="250">Row #2</th>
- <th width="250">Row #3</th>
- <th width="250">Row #4</th>
- </tr>
- <%for(int i=0; i<100; i++){%>
- <tr>
- <td>############<%=i%></th>
- <td>============<%=i%></th>
- <td>************<%=i%></th>
- <td>@@@@@@@@@@@@<%=i%></th>
- </tr>
- <%}%>
- </body>
- </html>
(図122)
(1-3) サンプルプログラム実行結果
●初期状態
(図131)
今回は閾値は「top: 0」を指定しているので、表の先頭行(ヘッダー)がブラウザのウィンドウのtop: 0の位置を通過した後は、ヘッダーがtop: 0の位置に固定される動きになります(position: fixedに相当する挙動)。
これで当初の目的だった「表のヘッダーをスクロール時に固定」する挙動を達成しています。
(図133)