表を用いたレスポンシブ対応
一般的な表を作る
表を特定の場所へ填め込んでみる。ここで、想定した余白を確保し、はみ出さない、尚且つモバイルで塩梅良く表示しているかがポイントである。たっぷり時間をかけて、いくつかのタイプで表を試した結果、おススメは以下のものだ。
<div class="table-container">
<table id="adhere">
<tr>
<th class="fixed03">
<span class="corner"></span>
</th>
<th class="fixed01">体格</th>
<th class="fixed01">ヒラメ筋</th>
<th class="fixed01">大腿四頭筋</th>
<th class="fixed01">前腕屈筋</th>
<th class="fixed01">大臀筋</th>
</tr>
<tr>
<th class="fixed02">January</th>
<td>
<div class="graph-container">
<div class="label">Progress: 20%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 50%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 60%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 50%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 50%</div>
</div>
</td>
</tr>
<tr>
<th class="fixed02">February</th>
<td>
<div class="graph-container">
<div class="label">Progress: 30%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 60%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 65%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 50%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 50%</div>
</div>
</td>
</tr>
<tr>
<th class="fixed02">March</th>
<td>
<div class="graph-container">
<div class="label">Progress: 40%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 70%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 70%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 50%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 55%</div>
</div>
</td>
</tr>
<tr>
<th class="fixed02">April</th>
<td>
<div class="graph-container">
<div class="label">Progress: 50%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 80%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 70%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 60%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 55%</div>
</div>
</td>
</tr>
<tr>
<th class="fixed02">May</th>
<td>
<div class="graph-container">
<div class="label">Progress: 60%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 80%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 75%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 60%</div>
</div>
</td>
<td>
<div class="graph-container">
<div class="label">Progress: 60%</div>
</div>
</td>
</tr>
</table>
</div>
/* テーブルを囲む親要素 */
.table-container {
width: 100%;
overflow-x: auto; /* 横スクロールを許可 */
-webkit-overflow-scrolling: touch; /* iOSでの慣性スクロール */
margin-bottom: 1em;
}
table#adhere {
width: 90%;
/*width: auto; */
border-collapse: collapse;
border-spacing: 0; /* 隙間を0にする */
margin: 0 auto;
font-size: 0.7em;
background-color: white;
}
table#adhere th {
width: 80px;
height: 30px;
vertical-align: middle;
text-align: center;
padding: 0;
border: 1px solid #ccc;
}
table#adhere td {
width: 80px;
height: 40px;
vertical-align: middle;
padding: 0 4px;
border: 1px solid #ccc;
}
.fixed01 {
position: sticky;
top: 0;
left: 0;
color: #fff;
background: Darkorange;
}
.fixed02 {
position: sticky;
top: 0;
left: 0;
color: #fff;
background: Forestgreen;
}
.fixed03 {
position: sticky;
top: 0;
left: 0;
color: #fff;
background-color: white;
}
.fixed01:before,.fixed03:before,
.fixed02:before {
content: "";
position: absolute;
top: -1px;
left: -1px;
width: 100%;
height: 100%;
border: 1px solid #ccc;
}
.fixed01 {
z-index: 2;
}
.fixed02 {
z-index: 1;
}
.fixed03 {
z-index: 3;
}
.corner {
position: relative;
width: 100%;
height: 100%;
}
| 体格 | ヒラメ筋 | 大腿四頭筋 | 前腕屈筋 | 大臀筋 | |
|---|---|---|---|---|---|
| January |
Progress: 20%
|
Progress: 50%
|
Progress: 60%
|
Progress: 50%
|
Progress: 50%
|
| February |
Progress: 30%
|
Progress: 60%
|
Progress: 65%
|
Progress: 50%
|
Progress: 50%
|
| March |
Progress: 40%
|
Progress: 70%
|
Progress: 70%
|
Progress: 50%
|
Progress: 55%
|
| April |
Progress: 50%
|
Progress: 80%
|
Progress: 70%
|
Progress: 60%
|
Progress: 55%
|
| May |
Progress: 60%
|
Progress: 80%
|
Progress: 75%
|
Progress: 60%
|
Progress: 60%
|