行にカーソルを乗せるとハイライト表示するテーブル
縦列をスタイルの対象とする方法を学んだところで、図3のように縦列をグループごとに色分けし、横行にカーソルを乗せるとハイライト表示するテーブルをスタイリングしてみましょう。
HTMLソースは次のようになります。縦列は、colgroup要素で1列、4列、4列にグループ化し、左端の1列にはmonth(月)、次の4列をtokyo(東京)、続く4列にosaka(大阪)というID名を付けました。さらにcolgroup要素内にcol要素を配置して、それぞれ、average(平均気温)、max(最高気温)、min(最低気温)、rain(降水量)というクラス名を付けました。
<table> <caption>東京と大阪の2013年の気象データ</caption> <colgroup span="1" id="month"></colgroup> <colgroup id="tokyo"> <col span="1" class="average" /> <col span="1" class="max" /> <col span="1" class="min" /> <col span="1" class="rain" /> </colgroup> <colgroup id="osaka"> <col span="1" class="average" /> <col span="1" class="max" /> <col span="1" class="min" /> <col span="1" class="rain" /> </colgroup> <thead> <tr><th></th><th colspan="4">東京</th><th colspan="4">大阪</th></tr> <tr><th>月</th><th>平均気温(℃)</th><th>最高気温(℃)</th><th>最低気温(℃)</th><th>降水量(mm)</th><th>平均気温(℃)</th><th>最高気温(℃)</th><th>最低気温(℃)</th><th>降水量(mm)</th></tr> </thead> <tbody> <tr><td>1月</td><td>5.5</td><td>14.4</td><td>-1.4</td><td>70</td><td>5.2</td~中略~ </tbody> </table>
縦列に背景色と境界線を付ける
サンプルでは、東京(tokyo)と大阪(osaka)のcolgroupを対象に背景色を指定しました。東京と大阪の間の境界線は、東京のcolgroupに右ボーダーを付けて実現しています。スタイルの対象はcolgroup要素なので、borderプロパティが使えるように、テーブルセルのボーダーの表示形式を「border-collapse:collapse;」にする必要があります。
また、東京・大阪の最高気温(max)と降水量(rain)の縦列には半透明の白を指定して、ストライプにしています。半透明の指定は、CSS3のrgba(R, G, B, A)を使用しています。Red、Green、Blueの値に続けて、カンマで区切って透明度Alphaの値を指定します。透明度は0~1の範囲で、0は完全に透明、1は不透明です。「rgba(255, 255, 255, 0.5);」の場合は半透明の白を50%、という指定になります。
table{ border-collapse: collapse; /* colgroupでborderプロパティを使うため、collapseにする */ } #tokyo { background: rgba(255, 230, 230, 1); border-right: 5px solid #fff; /* 右側に白の境界線 */ } #osaka { background: rgba(230, 230, 255, 1); } .max, .rain { background: rgba(255, 255, 255, 0.5); /* 半透明の白を50% */ }
行にカーソルを乗せるとハイライト表示
同じ要領で、見出しセルには「background: rgba(0, 0, 0, 0.05);」を指定して、不透明の黒を5%指定しています。さらに、カーソルホバー時に横列をハイライトするよう、不透明の黄色を30%乗算しました。不透明にすることで、縦列と横行の色が乗算されてホバー時のハイライトが自然な感じになります。さらにカーソルが乗っているセルは不透明にし、ハッキリと目立たせるようにしています。
thead tr:nth-child(2) th { background: rgba(0, 0, 0, 0.05); /* 半透明の黒を5% */ } tbody tr:hover { /* ホバー時の行(横) */ background: rgba(255, 255, 150, 0.3); /* 半透明の黄色を30% */ } tbody td:hover { /* ホバー時のセル */ background: rgba(255, 255, 150, 1); /* 不透明の黄色 */ }
キャプションの装飾
キャプションは、デフォルトでは、テーブルの上にセンタリングされて表示されますが、「caption-size:bottom;」を指定することでテーブルの下に配置できます。右寄せにするには、「text-align: right;」を指定します。サンプルでは、さらに「:before擬似要素」とcontentプロパティを使って、caption要素の直前に「▲」のアイコンを表示しています。
caption { caption-side: bottom; /* キャプションを下に */ text-align: right; padding-top: 5px; font-size: 80%; } caption:before { content: "▲"; padding-right: 0.5em; }