文章介紹瞭如何將滾動條設置在tbody
標籤上,而且表格總體和未設置滾動條一致;此外補充了一些table
的冷門姿式。css
問題demohtml
解決問題demoide
要想給tbody一個超出的滾動條,其實只須要給tbody設置一個固定height
,以及overflow:auto
也就是超出添加滾動條。可是table固有的display
屬性使得爲thead和tbody設置height
沒有用。佈局
這裏首先作的就是改變display
屬性:ui
table,thead,tbody{
display:block
}
複製代碼
以後能夠設置height
,可是在設置height
後,這時候表格的樣式扭曲了,表現爲問題demo表二,爲了保持樣式正常,須要:this
thead, tbody tr {
display:table;
width:100%;
table-layout:fixed;
}
複製代碼
display:table
使得tr
標籤表現爲一個table
,table-layout:fixed
和設置寬度的width:100%
是一套組合拳,使得這個"table"的第一行寬度爲100%
,而且每一列寬度是一致的,後面全部行按照第一行對齊,若是內容超出就出現滾動條。spa
若是想使得thead
和tbody
寬度保持一致,須要額外去除thead
多餘的滾動條的寬度,好比:.net
thead {
width: calc( 100% - 1em )
}
複製代碼
這以後每一列的列寬是一致的。存在的問題是若是提早使用標籤colgroup
設置不一樣列寬,這裏是丟失的。代理
不是很好的解決方法是從新再去爲th
、td
設置寬度,好比:code
th:nth-child(1),
td:nth-child(1) {
width: 5%;
}
th:nth-child(2),
td:nth-child(2) {
width: 6.7%;
}
複製代碼
table
的冷門姿式何時去用table
呢?
歪果話是這麼說的:tables are for tabular data. 啥意思呢?好比乘法口訣表...
不要用table
去佈局!由於html標籤是語義化的,多餘語義化的標籤對screen readers不友好。
thead
、tbody
、tfoot
只有一個表頭推薦使用這個三個元素去包裹行(tr
元素),語義化指定。
這裏tfoot
元素是特殊的,推薦在html中tfoot
是放在thead
以後,tbody
以前。(可是渲染結果仍是在最後的)理由:
this is an accessibility concern, as the footer may contain information necessary to understand the table, it should be before the data in the source order.
td
、th
cells
其中th
不限制只在thead
中使用,它只是簡單表示標題信息
雙軸狀況就跳過不使用thead
了,雙軸
rowspan
是多行合併,colspan
是多列合併
比較常見的是組織table headers:demo
使用colors、lines去區分表格的各個部分。
默認狀況下,table cells之間間隔2px(經過用戶代理樣式表):
table {
border-collapse: separate;
border-spacing: 2px;
}
複製代碼
能夠去設置這個值的大小:
table {
border-spacing: 0.5rem;
}
複製代碼
更常見的是移除這個值:
table {
border-collapse: collapse;
}
複製代碼
table
的寬度table元素有點兒像display:block
,由於一個table元素會在新一行去顯示。可是它的寬度...須要多寬就是多寬,也不能去設置。
cell不換行,text默認換行:demo