1. 程式人生 > >一種相對自適應表格(relative responsive table)並且第一列凍結的方法

一種相對自適應表格(relative responsive table)並且第一列凍結的方法

轉載:http://caibaojian.com/relative-responsive-table

需求分析

該樣式的主要需求分析是這樣子的:一個表格,有很多列內容,超出了螢幕的最大寬度,如果不做處理的情況下,瀏覽器會多出一個滾動條,所以我們需要改為沒有滾動條,同時可以查看錶格的內容。這個常常叫自適應。我之前也寫過一篇文章詳細的介紹了網路上大多數的自適應表格方法:響應式表格,HTML表格自適應(responsive table)

程式碼思路

首先左邊的第一列是資料的名稱,那麼滾動的時候這一列最好不隨著滾動條拉動而滾動,他會清晰的顯示了右邊是什麼內容。

所以我們分成兩部分:一部分是第一列的資料名稱,另一部分是資料列表。

左邊的資料採用固定寬度或者相對寬度,使用絕對定位浮動在一個地方。

右邊則使用正常流,距離左邊的寬度等於上面的,這樣子右邊的整體內容就是一個正常流,我們在裡面再巢狀一個div,那麼他就是100%的寬度,超出就會隱藏了。

實現程式碼

html

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>responsive table by caibaojian.com</title>
</head>

<body>
    <div class="table-two">
        <div class="table-first">
            <table>
                <thead>
                    <tr>
                        <th>統計項</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>所有使用者</td>
                    </tr>
                    <tr>
                        <td>蘋果使用者</td>
                    </tr>
                    <tr>
                        <td>安卓使用者</td>
                    </tr>
                    <tr>
                        <td>親友賬戶</td>
                    </tr>
                    <tr>
                        <td>記錄傳送</td>
                    </tr>
                    <tr>
                        <td>二代繫結</td>
                    </tr>
                    <tr>
                        <td>一代繫結</td>
                    </tr>
                    <tr>
                        <td>二代上傳</td>
                    </tr>
                    <tr>
                        <td>一代上傳</td>
                    </tr>
                    <tr>
                        <td>上傳條數</td>
                    </tr>
                    <tr>
                        <td>活躍使用者</td>
                    </tr>
                </tbody>
            </table>
        </div>
        <div class=" table-second">
            <div class="table-container">
                <table>
                    <thead>
                        <tr>
                            <th>今天數</th>
                            <th>昨天數</th>
                            <th>本週數</th>
                            <th>上週數</th>
                            <th>本月數</th>
                            <th>上月數</th>
                            <th>最近6個月</th>
                            <th>總共</th>
                            <th>上傳記錄最多的使用者</th>
                            <th>此使用者共上傳資料</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td align="center">10</td>
                            <td align="center">2</td>
                            <td align="center">15</td>
                            <td align="center">54</td>
                            <td align="center">141</td>
                            <td align="center">210</td>
                            <td align="center">738</td>
                            <td align="center">12197</td>
                            <td align="center"></td>
                            <td align="center"></td>
                        </tr>
                        <tr>
                            <td align="center">1</td>
                            <td align="center">0</td>
                            <td align="center">2</td>
                            <td align="center">14</td>
                            <td align="center">36</td>
                            <td align="center">65</td>
                            <td align="center">116</td>
                            <td align="center">116</td>
                            <td align="center"></td>
                            <td align="center"></td>
                        </tr>
                        <tr>
                            <td align="center">9</td>
                            <td align="center">2</td>
                            <td align="center">13</td>
                            <td align="center">32</td>
                            <td align="center">86</td>
                            <td align="center">105</td>
                            <td align="center">213</td>
                            <td align="center">213</td>
                            <td align="center"></td>
                            <td align="center"></td>
                        </tr>
                        <tr>
                            <td align="center">0</td>
                            <td align="center">0</td>
                            <td align="center">0</td>
                            <td align="center">32</td>
                            <td align="center">44</td>
                            <td align="center">16</td>
                            <td align="center">97</td>
                            <td align="center">135</td>
                            <td align="center"></td>
                            <td align="center"></td>
                        </tr>
                        <tr>
                            <td align="center">0</td>
                            <td align="center">5</td>
                            <td align="center">5</td>
                            <td align="center">14</td>
                            <td align="center">35</td>
                            <td align="center">131</td>
                            <td align="center">416</td>
                            <td align="center">5857</td>
                            <td align="center"></td>
                            <td align="center"></td>
                        </tr>
                        <tr>
                            <td align="center">2</td>
                            <td align="center">3</td>
                            <td align="center">6</td>
                            <td align="center">16</td>
                            <td align="center">32</td>
                            <td align="center">11</td>
                            <td align="center">47</td>
                            <td align="center">47</td>
                            <td align="center"></td>
                            <td align="center"></td>
                        </tr>
                        <tr>
                            <td align="center">2</td>
                            <td align="center">0</td>
                            <td align="center">2</td>
                            <td align="center">13</td>
                            <td align="center">30</td>
                            <td align="center">15</td>
                            <td align="center">150</td>
                            <td align="center">200</td>
                            <td align="center"></td>
                            <td align="center"></td>
                        </tr>
                        <tr>
                            <td align="center">6</td>
                            <td align="center">10</td>
                            <td align="center">14</td>
                            <td align="center">48</td>
                            <td align="center">82</td>
                            <td align="center">84</td>
                            <td align="center">141</td>
                            <td align="center">141</td>
                            <td align="center"></td>
                            <td align="center">815</td>
                        </tr>
                        <tr>
                            <td align="center">6</td>
                            <td align="center">6</td>
                            <td align="center">10</td>
                            <td align="center">25</td>
                            <td align="center">50</td>
                            <td align="center">42</td>
                            <td align="center">105</td>
                            <td align="center">105</td>
                            <td align="center">xiangyun_80</td>
                            <td align="center">1740</td>
                        </tr>
                        <tr>
                            <td align="center">1613</td>
                            <td align="center">1563</td>
                            <td align="center">4427</td>
                            <td align="center">10735</td>
                            <td align="center">35808</td>
                            <td align="center">72077</td>
                            <td align="center">144327</td>
                            <td align="center">244153</td>
                            <td align="center"></td>
                            <td align="center"></td>
                        </tr>
                        <tr>
                            <td align="center">1</td>
                            <td align="center">1</td>
                            <td align="center">2</td>
                            <td align="center">7</td>
                            <td align="center">20</td>
                            <td align="center">24</td>
                            <td align="center">64</td>
                            <td align="center">64</td>
                            <td align="center"></td>
                            <td align="center"></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</body>
</html>

css

@charset "utf-8";
*{margin:0; padding:0; border:0;}
table{border-collapse:collapse; border-spacing:0; border:0;width:100%;}
table tr td, table tr th{border:1px solid #999; padding:.5em 1em; white-space:nowrap;}
.table-first tr th, .table-first tr td{background:#F4F4F4; font-weight:bold;}
.table-container table tr td, .table-container tr th{border:0; border-bottom:1px solid #999; border-right:1px solid #999; text-align:center;}
.table-container table{border:1px solid #999; border-left:0;}
.table-two{position:relative;}
/*左邊內容是表頭名的寬度,根據實際情況而定,你也可以使用百分比*/
.table-first{position:absolute; left:0; top:0; width:102px;/*width:20%;*/}
/*距離左邊表頭的內容寬度*/
.table-second{padding-left:102px;/*width:20%*/}
/*超出部分出現滾動條*/
.table-container{width:100%; overflow-y:auto; _overflow:auto;margin: 0 0 10px;}
/*IOS滾動條*/
.table-container::-webkit-scrollbar
{
-webkit-appearance: none;
width: 14px;
height: 14px;
}
.table-container::-webkit-scrollbar-thumb
{
border-radius: 8px;
border: 3px solid #fff;
background-color: rgba(0, 0, 0, .3);
}

效果: