今回はテーブルを分けて縦スクロールをする方法をご紹介いたします。
サンプル
サンプルではテーブルの見出し下のデータ部分がスクロールします。
html
外枠、見出し、データ部分に分かれています。見出しとデータ部分のテーブルをdivで切って分けているところがポイントです。
<!-- 外枠 -->
<div class="y-data-area">
<!-- 見出し -->
<table class="y-data-ttl">
<col style="width: 20%;" />
<col style="width: 20%;" />
<col style="width: 20%;" />
<col style="width: 20%;" />
<col style="width: 20%;" />
<tr>
<th>見出し</th>
<th>見出し</th>
<th>見出し</th>
<th>見出し</th>
<th class="rb-none">見出し</th>
</tr>
</table>
<!-- /見出し -->
<!-- データ -->
<div class="y-scroll-box">
<div class="y-hidden">
<table class="y-data">
<col style="width: 20%;" />
<col style="width: 20%;" />
<col style="width: 20%;" />
<col style="width: 20%;" />
<col style="width: 20%;" />
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
</table>
</div>
</div>
<!-- /データ -->
</div>
<!-- /外枠 -->
css
外枠、見出し、データ部分に分かれています。IE6とIE7は「border-collapse: collapse;」でハックして、IE8以上のブラウザと同じテーブル表示を実現させています。
/* 外枠 */
div.y-data-area {
width: 300px;
border-right: 1px solid #CCC;
border-bottom: 1px solid #CCC;
border-left: 1px solid #CCC;
}
/* 見出し */
table.y-data-ttl {
width: 300px;
table-layout: fixed;
border-collapse: separate;
border-spacing: 0;
}
table.y-data-ttl th {
border-top: 1px solid #CCC;
background: #ECECEC;
}
table.y-data-ttl th,
table.y-data-ttl td {
padding: 2px;
border-right: 1px solid #CCC;
border-bottom: 1px solid #CCC;
}
table.y-data-ttl th.rb-none,
table.y-data-ttl td.rb-none {
border-right: none;
}
/* データ */
div.y-scroll-box {
width: 300px;
max-height: 150px;
height: auto !important;
height: 150px;
overflow-x: hidden;
overflow-y: scroll;
}
div.y-hidden {
overflow: hidden;
padding-bottom: 15px;
}
table.y-data {
width: 300px;
border-collapse: separate;
border-spacing: 0;
table-layout: fixed;
}
table.y-data th,
table.y-data td {
padding: 2px;
border-right: 1px solid #CCC;
border-bottom: 1px solid #CCC;
}
table.y-data th.rb-none,
table.y-data td.rb-none {
border-right: none;
}
table.y-data td {
overflow: hidden;
white-space: nowrap;
}
table.y-data td p {
margin: 0;
}
/* IE6ハック */
table.y-data-ttl,
table.y-data {
_border-collapse: collapse;
}
/* IE7ハック */
*:first-child+html table.y-data-ttl,
*:first-child+html table.y-data {
border-collapse: collapse;
}
全ソース
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>
部分縦スクロール
</title>
<meta name="viewport" content="width=device-width,initial-scale=1" />
<style type="text/css">
/* 外枠 */
div.y-data-area {
width: 300px;
border-right: 1px solid #CCC;
border-bottom: 1px solid #CCC;
border-left: 1px solid #CCC;
}
/* 見出し */
table.y-data-ttl {
width: 300px;
table-layout: fixed;
border-collapse: separate;
border-spacing: 0;
}
table.y-data-ttl th {
border-top: 1px solid #CCC;
background: #ECECEC;
}
table.y-data-ttl th,
table.y-data-ttl td {
padding: 2px;
border-right: 1px solid #CCC;
border-bottom: 1px solid #CCC;
}
table.y-data-ttl th.rb-none,
table.y-data-ttl td.rb-none {
border-right: none;
}
/* データ */
div.y-scroll-box {
width: 300px;
max-height: 150px;
height: auto !important;
height: 150px;
overflow-x: hidden;
overflow-y: scroll;
}
div.y-hidden {
overflow: hidden;
padding-bottom: 15px;
}
table.y-data {
width: 300px;
border-collapse: separate;
border-spacing: 0;
table-layout: fixed;
}
table.y-data th,
table.y-data td {
padding: 2px;
border-right: 1px solid #CCC;
border-bottom: 1px solid #CCC;
}
table.y-data th.rb-none,
table.y-data td.rb-none {
border-right: none;
}
table.y-data td {
overflow: hidden;
white-space: nowrap;
}
table.y-data td p {
margin: 0;
}
/* IE6ハック */
table.y-data-ttl,
table.y-data {
_border-collapse: collapse;
}
/* IE7ハック */
*:first-child+html table.y-data-ttl,
*:first-child+html table.y-data {
border-collapse: collapse;
}
</style>
</head>
<body>
<!-- 外枠 -->
<div class="y-data-area">
<!-- 見出し -->
<table class="y-data-ttl">
<col style="width: 20%;" />
<col style="width: 20%;" />
<col style="width: 20%;" />
<col style="width: 20%;" />
<col style="width: 20%;" />
<tr>
<th>見出し</th>
<th>見出し</th>
<th>見出し</th>
<th>見出し</th>
<th class="rb-none">見出し</th>
</tr>
</table>
<!-- /見出し -->
<!-- データ -->
<div class="y-scroll-box">
<div class="y-hidden">
<table class="y-data">
<col style="width: 20%;" />
<col style="width: 20%;" />
<col style="width: 20%;" />
<col style="width: 20%;" />
<col style="width: 20%;" />
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
<tr>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
<td class="rb-none"><p title="データデータデータデータデータ">データデータデータデータデータ</p></td>
</tr>
</table>
</div>
</div>
<!-- /データ -->
</div>
<!-- /外枠 -->
</body>
</html>
まとめ
- HTML、CSS共に外枠、見出し、データ部分と3つ分かれている。
- IE6、IE7はCSSハックを行っている。
コメント