[BS4] Bootstrap4 Customize Responsive Table(客制化表格寬度)
tags: table
, table-responsive
, customization
Table 是報表、數據等資料很常使用的程式方式。在 Bootstrap4 中 Table 的結構其實還蠻單純的,但是有些時候直接套用的表格卻不是這麼的「好看」,它會隨著內容的寬度而對每個欄寬造成不同的影響,進而使得版面變得不太好看,因此,讓我們來試著深入一些些瞭解 Bootstrap Table ,看可以做哪些操作,客制化成我們想要的好看表格。
這篇文章主要說明如何把 Bootstrap 的表格調整成自己想要的樣式,關於 Bootstrap 表格的基本架構可以參考中文官方文件。
以下內容建議搭配 範例程式碼 @ CodePen 閱讀。
基本架構
Bootstrap 4 表格的基本架構如下,其他 <th>
標籤可以搭配 scope
屬性使用,屬性值可以是 col
, row
, colgroup
, rowgroup
,主要是用來說明這個 th 是屬於某欄或某列的標頭。
另外,Bootstrap 4 還提供其他可套用的 class:
<table>
:.table-dark
,.table-sm
,.table-striped
,.table-bordered
,.table-hover
<thead>
:.thead-light
,.thead-dark
<tr>
,<td>
:.table-active
,.table-primary
,.table-secondary
,.table-success
,.table-danger
,.table-warning
,.table-info
,.table-light
,.table-dark
HTML <th> scope Attribute @ w3schools
<!-- HTML -->
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">First Name</th>
<th scope="col">Last Name</th>
<th scope="col">Username</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
響應式表格
.table-responsive 的使用
要達到響應式表格,最直覺想到的是使用在 Bootstrap4 中提供 .table-responsive
這個 class 可以套用在 <table>
外層的 <div>
上:
<!-- HTML -->
<div class="table-responsive">
<table class="table table-bordered table-striped">
<caption>
List of users
</caption>
<thead>
<tr>
<th scope="col">#</th>
<!-- ... -->
<th scope="col">Remark</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<!-- ... -->
<td>
Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing
industries
</td>
</tr>
<tr>
<th scope="row">2</th>
<!-- ... -->
<td>
Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing
industries
</td>
</tr>
</tbody>
</table>
</div>
一般來說只要 Table 內容相較於螢幕尺寸「太多」時,就會自動長出橫軸的 scroll-bar 讓使用者可以拖拉:
另外也提供不同尺寸的 .table-responsive
可以使用,如 .table-responsive-sm
, .table-responsive-md
, .table-responsive-lg
, .table-responsive-xl
,它們會在該尺寸以下時可以左右滾動;該尺寸以上時則無法(使用的是 max-width)。
以 .table-responsive-md
為例,當螢幕尺寸 <768px
時,只要表格內容多過螢幕尺寸,就會出現水平捲軸可以滾動;當螢幕尺寸 >= 768px
時,這個水平的滾動捲軸就會消失。
.table-responsive 的作用
從 Bootstrap 的原始碼中,可以看到 .table-responsive
的主要作用是把表格變成 display: block;
,當寬度超過時,就以 overflow-x: auto;
來出現水平捲軸:
/* .table-responsive 的作用 */
.table-responsive {
display: block;
width: 100%;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
}
.table-responsive 不足之處
然而,這個基本的 responsive-table 在實際使用上有一些不方便之處,如下圖所示:
- 有些表格的標頭會自己換行
- 每個欄的寬度不同,看起來不整齊,而且有些欄當中的內容較多時,會一直換行
解決文字換行的問題
第一個問題比較容易解決,可以用 Bootstrap 中提供的 .text-nowrap
來避免表格欄位標頭換行即可。
<th scope="col" class="text-nowrap">First Name</th>
<th scope="col" class="text-nowrap">Last Name</th>