(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)