HTML表格基礎詳解

       在如今 div 大行其道的時代,table 這個標籤彷佛不多被人說起,處處都是 div+css 佈局的書以及博客文章,但其實 table 以及連帶的其餘表格標籤依然在網頁中佔很重要的地位,特別是後臺展現數據的時候表格運用是否熟練就顯得很重要,一個清爽簡約的表格可以把繁雜的數據表現得頗有條理,雖然 div 佈局也能夠作到,可是總沒有表格來得方便。平時也常常接觸到表格,如今總結一下表格的一些屬性和樣式,以及學習構思一些表格的樣式,以便之後不時之需。css

1、標籤
html

<table> 定義 HTML 表格
<thead> 標籤訂義表格的表頭
<tbody> 標籤表格主體(正文)
<tfoot> 標籤訂義表格的頁腳(腳註或表注)
<tr> 元素定義表格行
<th> 元素定義表頭
<td> 元素定義表格單元
<caption> 元素定義表格標題,必須緊隨 table 標籤以後。只能對每一個表格定義一個標題,默認居中與表格之上
<col> 標籤爲表格中一個或多個列定義屬性值。
<colgroup> 標籤用於對錶格中的列進行組合,以便對其進行格式化。
 
2、表格標籤及標籤屬性
(1)<table>
<table>    標籤屬性說實話我的以爲挺好用的,好比 align,width等,可是本着表現層與結構層的分離,如今w3c上已經不同意使用了。
align:至關於浮動,用 css 的 float 代替
bgcolor:用 css 的background-color 代替
border:table 的 border 屬性是繼承到內部的 td 標籤的,至關於同時對 (selector):table 和 (selector) table td 設置 css 的 border 屬性,可是當你設置大於1的 border 數值時,又只有 table 的 border 寬度會改變。默認的瀏覽器屬性包括:border-collapse: separate;border-spacing: 2px; 故默認添加後是雙邊border
cellpadding:規定單元邊沿與其內容之間的空白,實際上是設置表哥內部 td 標籤的 padding 屬性,用 (selector) table td 設置 css 的 padding 屬性代替。
cellspacing:規定單元格之間的空間,用 (selector):table 設置 css 的 padding 屬性代替。
frame:規定外側邊框的哪一個部分是可見的,即設置表格 border,基本不會用這個屬性。
rules:規定內側邊框的哪一個部分是可見的,同 frame,幾乎不會用到。
summary:規定表格內容的摘要,屏幕閱讀器能夠利用該屬性,不會有其餘視覺效果。
width:用 css 的 width 代替。
css 屬性
table-layout:automatic(default) | fixed | inherit(列寬度由單元格內容設定 | 列寬由表格寬度和列寬度設定 | 繼承父屬性)
須要注意的是,表格以及列設置的 width 屬性在 table-layout 爲 automatic 時都是表現爲 min-width,當 table-layout 的值爲 fixed 時則表現爲固定的 width 值。
當須要表格內容的寬度在控制範圍內,不會超出本身設置的範圍,則能夠用 fixed 屬性值來設置這個屬性,下面舉個例子。
 
--------------------------------------------------------------舉個栗子--------------------------------------------------------------
HTML:
 1 <table>
 2     <thead>
 3         <tr>
 4             <th>title</th>
 5             <th>title</th>
 6             <th>title</th>
 7         </tr>
 8     </thead>
 9     <tbody>
10         <tr>
11             <td>the</td>
12             <td>testinglongstring</td>
13             <td>Row</td>
14         </tr>
15         <tr>
16             <td>Second</td>
17             <td>-</td>
18             <td>Row</td>
19         </tr>
20         <tr>
21             <td>the</td>
22             <td>third</td>
23             <td>Row</td>
24         </tr>
25     </tbody>
26 </table>
View Code

CSS:html5

1 table{
2     width: 300px;
3     border:1px solid #000;
4 }
5 table td,table th{
6     border:1px solid #000;
7 }
View Code
沒有顯式加 table-layout 這個屬性時是默認爲 automatic 值,此時因爲 testinglongstring 內容比較長,表格自動調整列的寬度,效果以下:
table 標籤加了 table-layout:fixed 屬性後,瀏覽器直接渲染表結構(至關於顯示沒有內容的表),太長的內容會覆蓋到其餘表格,效果以下:
--------------------------------------------------------------吃完栗子--------------------------------------------------------------
 
而每每咱們但願既保持咱們要的列寬度,同時確保內容不會這樣覆蓋到其餘表格單元單元(針對英文)。這裏就要涉及到另外兩個 css 屬性了:
一、word-wrap:normal(default)| break-word(只在容許的斷字點換行 | 在長單詞或 URL 地址內部進行換行)
這裏主要用到 break-word 屬性值。
二、work-break:normal(defaut)| break-all | keep-all(默認的換行規則 | 容許在單詞內換行 | 只能在半角空格或連字符處換行)
這裏主要用到 break-all 屬性值。
用到的兩個 css 屬性的屬性值做用相似,但有些區別,break-word 只有在單個單詞都超過外圍寬度的時候纔會斷單詞;break-all 則是把每一個行填滿,而後行尾無論是單詞仍是空格都斷爲下一行,我的優選 word-wrap 屬性,能夠減小斷單詞的概率,畢竟不得已才斷單詞,斷了後會影響單詞內容表達。具體辨析能夠看 《 你真的瞭解word-wrap和word-break的區別嗎?》講得比較詳細。
 
--------------------------------------------------------------舉個栗子--------------------------------------------------------------
沿用上例的 HTML 結構,舉 word-wrap 屬性的例子:
CSS:
 1 table {
 2     width: 300px;
 3     border: 1px solid #000;
 4     table-layout: fixed;
 5     word-wrap:break-word;
 6 }
 7 table td,
 8 table th {
 9     border: 1px solid #000;
10 }
11 .odd{
12     width: 120px;
13 }
View Code
表現以下:
--------------------------------------------------------------吃完栗子--------------------------------------------------------------
 
(2)<thead>、<tbody>、<tfoot>
align:屬性規定內容的水平對齊方式,用 css 屬性 text-align 代替。
valign:( top|middle|bottom|baseline ),規定 tbody 元素中內容的垂直對齊方式,默認是 middle。至關於 css 的 vertical-align 屬性,這裏 bottom 和 baseline 在 w3shcool 上還有一些 辨析,不過只是對於不一樣字號的英文內容來講有點用處。
還有 char,charoff 屬性幾乎是用不到的,因此不列舉了。
注意
一、<thead>、<tfoot> 標籤內部必須擁有 <tr> 標籤;
二、<thead> 標籤無論放在 <table> 內的哪一個位置,都會被定位到表格的頭部,同理 <tfoot> 會被定位到底部。另外,和咱們的常識不一樣,<tfoot> 標籤是要放在 <tbody> 標籤以前的,結合官方文檔和我本身的理解,主要是由於 <thead> 和 <tfoot> 內的內容通常比較重要,這樣能保證在表現具備大量行內容的表格時可以提早渲染 <tfoot>,讓用戶先看到。
三、<thead>、<tbody>、<tfoot> 的結束標籤爲了精簡,都可以省略。
四、設置 <thead> 和 <tfoot> 的一個好處是,當打印很長的須要分頁的表格時,每一頁上都會有 <thead>、<tfoot> 的內容。
 
(3)tr
align,valign:同(2)
 
(4)td,th
abbr:規定單元格中內容的縮寫版本。不會在普通的 web 瀏覽器中形成任何視覺效果方面的變化。屏幕閱讀器能夠利用該屬性。
headers:規定表頭與單元格相關聯。不會在普通瀏覽器中產生任何視覺變化。屏幕閱讀器能夠利用該屬性。
scope:定義將表頭單元與數據單元相關聯的方法。不會在普通瀏覽器中產生任何視覺變化。屏幕閱讀器能夠利用該屬性。
align,valign:同(2)。須要留意的是 th 默認是居中屬性的,並且 th 內的字體是加粗的。
nowrap:規定表格單元格中的內容不換行。用 white-space: nowrap 代替
colspan:規定單元格可橫跨的列數。比較經常使用,至關於 word 中的合併橫向的單元格。
rowspan:規定單元格可橫跨的行數。比較經常使用,至關於 word 中的合併垂直方向的單元格。
 
(5)caption
align:(top | bottom | left | right ),規定 caption 元素的對齊方式,默認居中。
align 的瀏覽器支持並很差,只有 top 和 bottom 屬性值支持是統一的,left 和 right 在不一樣瀏覽器中的表現也不同,因此這兩個屬性值固然不用,而 css 屬性 caption-side 恰好就只有 top 和 bottom,故徹底能夠用 css 屬性 caption-side 代替 align。至於要實現 left 和 right 的效果,給 caption 加 margin 屬性或者 padding 屬性或者用其餘標籤實現都不難 。
c ss 屬性 
caption-side:top | bottom | inherit(表格標題定位在表格之上 | 表格標題定位在表格之下 | 繼承父屬性)
 
(6)col,colgroup
<colgroup> 標籤中的一些屬性在一些瀏覽器中的支持並很差,只有在一些老的瀏覽器中(IE7-等)才能表現那些屬性,具體緣由能夠 點此參考
可以用的屬性主要是如下三個:
span:規定列組應該橫跨的列數。默認一列,即對錶格的一列設置樣式。
width:col 元素的寬度。
background:設置背景色,要經過 css 樣式來設置。
<col> 標籤須要包裹在 <colgroup> 內,就算沒有寫通常瀏覽器也會自動幫你加上。屬性和 <colgroup> 相似,增長了能夠設置 css 的 border 屬性。我的認爲不在 <colgroup> 標籤上設置屬性,而是用 <colgroup> 包裹 <col> 的寫法比較規範。
說到列,要從新提一下前面的 table-layout 屬性,下面舉例子說明 col 對這個屬性的影響。
 
--------------------------------------------------------------舉個栗子--------------------------------------------------------------
HTML:
 1 <table>
 2     <colgroup>
 3         <col class="odd"></col>
 4         <col class="even"></col>
 5         <col class="odd"></col>
 6     </colgroup>
 7     <thead>
 8         <tr>
 9             <th>title</th>
10             <th>title</th>
11             <th>title</th>
12         </tr>
13     </thead>
14     <tbody>
15         <tr>
16             <td>the</td>
17             <td>testinglongstring</td>
18             <td>Row</td>
19         </tr>
20         <tr>
21             <td>Second</td>
22             <td>-</td>
23             <td>Row</td>
24         </tr>
25         <tr>
26             <td>the</td>
27             <td>third</td>
28             <td>Row</td>
29         </tr>
30     </tbody>
31 </table>
View Code
CSS:
 1 table {
 2     width: 300px;
 3     border: 1px solid #000;
 4 }
 5 table td,
 6 table th {
 7     border: 1px solid #000;
 8 }
 9 .odd{
10     width: 120px;
11 }
View Code
設置 120px 的列寬度後,中間列(.even)的寬度不夠,可是瀏覽器會幫你計算併爲中間內容空出足夠寬度:
設置了 table-layout 屬性的 fixed 值後就徹底按照本身的意思來渲染了:
--------------------------------------------------------------吃完栗子--------------------------------------------------------------
 
(7)border-collapse | border-spacing | empty-cells
這幾個 css 屬性,基本只會用在表格上。
border-collapse:separate(defaul)| collapse |  inherit (邊框會被分開 | 邊框會合併爲一個單一的邊框 | 繼承父屬性)
border-spacing:length length(定義一個 length 參數,那麼定義的是水平和垂直間距。定義兩個 length 參數,那麼第一個設置水平間距,而第二個設置垂直間距)
empty-cells:show(defaul)| hide | inherit (在空單元格周圍繪製邊框 | 不繪製 | 繼承父屬性)
注意
border-spacing 和 empty-cells 屬性只有在 border-collapse 爲 separate 是纔有效的。
 
--------------------------------------------------------------舉個栗子--------------------------------------------------------------
HTML:
 1 <table>
 2     <tr>
 3         <td>Row</td>
 4         <td>One</td>
 5     </tr>
 6     <tr>
 7         <td>Row</td>
 8         <td></td>
 9     </tr>
10 </table>
View Code
CSS:
1 table {
2     border-collapse: separate;
3     border-spacing: 5px 20px;
4     empty-cells: hide;
5     border:1px solid #000;
6 }
7 td{
8     border:1px solid #000;
9 }
View Code
表現以下:
--------------------------------------------------------------吃完栗子--------------------------------------------------------------
 
3、表格 css 樣式
(1)單線邊框
HTML:
 1 <table>
 2     <tr>
 3         <td>Row</td>
 4         <td>One</td>
 5     </tr>
 6     <tr>
 7         <td>Row</td>
 8         <td>Two</td>
 9     </tr>
10 </table>
View Code
(方法一) CSS:
 1 table {
 2     width: 200px;
 3     border-left: 1px solid #000;
 4     border-top: 1px solid #000;
 5     border-collapse: collapse;
 6 }
 7 td {
 8     border-right: 1px solid #000;
 9     border-bottom: 1px solid #000;
10 }
View Code
(方法二)CSS:
1 table {
2     width: 200px;
3     border-collapse: collapse;
4 }
5 td {
6     border: 1px solid #000;
7 }
View Code
效果以下:
 
(2)列和行的高亮
在複雜的多行多列的表格中,鼠標停留的行或列高亮可以帶來更優的體驗,下面講講這方面的應用。
一、行的高亮
行的高亮實現比較簡單,可使用 css 的 :hover 僞類實現,即 tr:hover 便可實現,後面的表格例子會出現。
二、列的高亮
列的高亮用 css 彷佛沒有什麼實現的方法,故仍是用 JavaScript 實現。
<1>原生 JavaScript
原生 JavaScript 實現比較麻煩,  A Complete Guide to the Table Element 文章介紹了一種原生 js 代碼的寫法。不過代碼的兼容性不是很好,IE10 如下的版本就沒法支持了(替換 addClass() 和 removeClass() 方法後在 IE9 下也能夠用)。下面是我本身寫的原生 JavaScript 實現方法,不過也只能支持 IE9+,IE8 及如下的 IE 瀏覽器要加兼容性代碼:
JavaScript:
 1 //#table能夠是table的id,也能夠是tbody的id
 2 var element = document.getElementById("table");
 3 var row_col = element.rows;
 4 window.onload = function() {
 5     for (var i = 0; i < row_col.length; i++) {
 6         var cell_col = row_col[i].cells;
 7         for (var j = 0; j < cell_col.length; j++) {
 8             cell_col[j].addEventListener('mouseover', function() {
 9                 cellIndex(this, true);
10             }, false);
11             cell_col[j].addEventListener('mouseout', function() {
12                 cellIndex(this, false);
13             }, false);
14         }
15     }
16 }
17 function cellIndex(element, bool) {
18     for (var i = 0; i < row_col.length; i++) {
19         var cell_col = row_col[i].cells;
20         for (var j = 0; j < cell_col.length; j++) {
21             if (element == cell_col[j]) {
22                 highLight(j, bool);
23             }
24         }
25     }
26 }
27 function highLight(index, bool) {
28     for (var i = 0; i < row_col.length; i++) {
29         var cell_col = row_col[i].cells;
30         if (bool) {
31             //列高亮,#eee爲高亮顏色
32             cell_col[index].style.backgroundColor = "#eee";
33         } else {
34             //移除列高亮,#fff爲原來顏色
35             cell_col[index].style.backgroundColor = "#fff";
36         }
37     }
38 }
View Code
<2>引用Jquery
使用 Jquery 框架實現方便不少,並且可以兼容 IE5.5+。很久沒寫 Jquery,選擇器不是很熟,因此參考了一下  html5及css3對table表格高亮當前行列的多瀏覽器兼容寫法 中的代碼,其中 high_light css 類中定義高亮的顏色:
 1 $(document).ready(
 2     function() {
 3         $('table td').hover(
 4             function() {
 5                 //獲取鼠標所在的 td 在所在行中的 index 
 6                 var td_index = $(this).parent().children('td').index($(this)[0]);
 7                 $("table tr:not(:has(th))").each( 
 8                     function(i){ 
 9                         $(this).children("td").eq(td_index).addClass('high_light'); 
10                     } 
11                 ); 
12             },
13             function() {
14                 var td_index = $(this).parent().children('td').index($(this)[0]); 
15                 $("table tr:not(:has(th))").each( 
16                     function(i){
17                         $(this).children("td").eq(td_index).removeClass('high_light');
18                     } 
19                 ); 
20             }
21         );
22     }
23 );
View Code
 
4、清爽簡約的表格
下面給出一些簡約的實用的表格樣式,留做備用。
 
(1)不帶豎線的表格
HTML:
 1 <table>
 2     <thead>
 3         <tr>
 4             <th>title</th>
 5             <th>title</th>
 6             <th>title</th>
 7         </tr>
 8     </thead>
 9     <tbody>
10         <tr>
11             <td>the</td>
12             <td>First</td>
13             <td>Row</td>
14         </tr>
15         <tr>
16             <td>Second</td>
17             <td>-</td>
18             <td>Row</td>
19         </tr>
20         <tr>
21             <td>the</td>
22             <td>third</td>
23             <td>Row</td>
24         </tr>
25     </tbody>
26 </table>
View Code
CSS:
 1 table {
 2     width: 300px;
 3     line-height: 2em;
 4     font-family: Arial;
 5     border-collapse: collapse;
 6 }
 7 thead tr {
 8     color: #ae1212;
 9     border-bottom: 2px solid #980000;
10 }
11 tbody tr {
12     color: #bd3030;
13     font-size: 0.8em;
14     border-bottom: 1px solid #ffaeae;
15 }
16 th {
17     font-weight: normal;
18     text-align: left;
19 }
20 th,td {
21     padding: 0 10px;
22 }
View Code
效果以下:
 
 
(2)不帶橫線的表格
 HTML:
< 沿用例 1)的 HTML >
CSS:
 1 table {
 2     width: 300px;
 3     line-height: 2em;
 4     font-family: Arial;
 5     text-align: center;
 6     border-collapse: collapse;
 7     border-top: 2px solid #980000;
 8     border-bottom: 2px solid #980000;
 9 }
10 thead tr {
11     color: #ae1212;
12 }
13 tbody tr {
14     color: #bd3030;
15     font-size: 0.8em;
16 }
17 th {
18     font-weight: normal;
19 }
20 th,td {
21     border-left: 1px solid #ffaeae;
22     border-right: 1px solid #ffaeae;
23 }
View Code
效果以下:
 
(3)帶背景表格
一、HTML:
< 沿用例 1)的 HTML >
CSS:
 1 table {
 2     width: 300px;
 3     line-height: 2em;
 4     font-family: Arial;
 5     border-collapse: collapse;
 6 }
 7 thead tr {
 8     color: #902d2d;
 9     background-color: #e09999;
10     border-bottom: 1px solid #fff;
11 }
12 tbody tr {
13     color: #ac5959;
14     font-size: 0.8em;
15     border-bottom: 1px solid #fff;
16     background-color: #ffe7e7;
17 }
18 tbody tr:hover {
19     background-color: #ffd4d4;
20 }
21 th {
22     font-weight: normal;
23     text-align: left;
24 }
25 th,td {
26     padding: 0 10px;
27 }
View Code
效果以下:
 
二、HTML:
< 沿用例 1)的 HTML >
CSS:
 1 table {
 2     width: 300px;
 3     line-height: 2em;
 4     font-family: Arial;
 5     border-collapse: collapse;
 6 }
 7 th,td {
 8     padding: 0 10px;
 9 }
10 th {
11     color: #a03f3f;
12     font-weight: normal;
13     text-align: left;
14     background-color: #f2caca;
15     border: 1px solid #fff;
16 }
17 td{
18     color: #c48080;
19     font-size: 0.8em;
20     background-color: #fff3f3;
21     border-top: 1px solid #ffdede;
22     border-left: 1px solid #ffdede;
23 }
24 tbody tr:hover th{
25     background-color: #ffdede;
26     border-right:1px solid #ffdede;
27     color:#9a4242;
28 }
29 tbody tr:hover td{
30     background-color: #ffdede;
31     border-left:1px solid #ffdede;
32     border-top: 1px solid #ffdede;
33     color:#9a4242;
34 }
View Code
效果以下:
 
 
三、HTML:
 1 <table>
 2     <colgroup>
 3         <col class="odd"></col>
 4         <col class="even"></col>
 5         <col class="odd"></col>
 6         <col class="even"></col>
 7     </colgroup>
 8     <thead>
 9         <tr>
10             <th>title</th>
11             <th class="even_th">title</th>
12             <th>title</th>
13             <th class="even_th">title</th>
14         </tr>
15     </thead>
16     <tbody>
17         <tr>
18             <td>the</td>
19             <td>the</td>
20             <td>the</td>
21             <td>the</td>
22         </tr>
23         <tr>
24             <td>first</td>
25             <td>-</td>
26             <td>third</td>
27             <td>fourth</td>
28         </tr>
29         <tr>
30             <td>Row</td>
31             <td>Row</td>
32             <td>Row</td>
33             <td>Row</td>
34         </tr>
35     </tbody>
36 </table>
View Code
CSS:
 1 table {
 2     width: 300px;
 3     line-height: 2em;
 4     font-family: Arial;
 5     border-collapse: collapse;
 6     text-align: center;
 7 }
 8 th,td {
 9     padding: 0 10px;
10 }
11 th {
12     color: #a03f3f;
13     font-weight: normal;
14 }
15 td{
16     color: #c48080;
17     font-size: 0.8em;
18 }
19 thead th{
20     background-color: #fbdcdc;
21 }
22 .odd{
23     background-color: #fff3f3;
24 }
25 .even{
26     border-left:1px solid #fff;
27     border-right:1px solid #fff;
28     background-color: #ffe9e9;
29 }
30 .even_th{
31     background-color: #eec4c4; 
32 }
View Code
效果以下:
捕獲.PNG
 
四、適用於表現簡單後臺數據的表格
HTML:
 1 <table>
 2     <tr>
 3         <td>the</td>
 4         <td>the</td>
 5         <td>the</td>
 6         <td>the</td>
 7     </tr>
 8     <tr>
 9         <td>first</td>
10         <td>-</td>
11         <td>third</td>
12         <td>fourth</td>
13     </tr>
14     <tr>
15         <td>Row</td>
16         <td>Row</td>
17         <td>Row</td>
18         <td>Row</td>
19     </tr>
20 </table>
View Code
CSS:
 1 table {
 2     width: 300px;
 3     line-height: 2em;
 4     font-family: Arial;
 5     border-width: 1px;
 6     border-style: solid;
 7     border-color: #eec4c4 #eec4c4 #fff #fff;
 8     text-shadow: 0 1px 0 #FFF;
 9     border-collapse: separate;
10     border-spacing: 0;
11     background-color: #ffe9e9;
12 }
13 th {
14     color: #a03f3f;
15     font-weight: normal;
16     text-align: left;
17 }
18 td {
19     color: #c48080;
20     font-size: 0.8em;
21 }
22 th,td {
23     padding: 0 10px;
24     border-width: 1px;
25     border-style: solid;
26     border-color: #fff #fff #eec4c4 #eec4c4;
27 }
View Code
效果以下:
 
這裏也只是列舉比較基本的表格實例,加圓角、背景圖等等在不一樣狀況下能夠得到更好的視覺效果,之後若是有看到更好的例子會繼續補充。表格在如今的使用中已不像之前那麼廣了,基本只有在表現數據的時候纔會用到,因此我並無太深刻地去了解表格的表現原理, 這裏涉及 的知識都比較基礎,並且只是冰山一角, 想要進一步瞭解的能夠去看看 HTML 4.01 和 CSS 2.01關於 table 的文檔(文末有附連接)。寫這篇博文的時候也發現了其餘一些有趣的關於表格的應用與拓展,好比響應式的表格、表格搜索、表格排序等等,再加進來博文就太長了(爲本身太懶找個藉口......),等有空的時候再來了解總結一下吧。
 
 


本文來源:JuFoFucss3

本文地址:http://www.cnblogs.com/JuFoFu/p/5140302.htmlweb

 
 
水平有限,錯誤歡迎指正。原創博文,轉載請註明出處。
 
參考文檔:
 
參考文章:
R. Christie .  Top 10 CSS Table Designs
W3Cfuns .  參透Html表格
Chris Coyier .  A Complete Guide to the Table Element(譯文:白牙 .  表格元素的 徹底指南
相關文章
相關標籤/搜索