HTML+CSS宝典 HTML进阶 表格
一、基本解构
table 表示表格,盒子的类型是 display: table
caption 表格标题,文字样式默认居中,盒子的类型是 display: table-caption,还有 table-row、table-col 一大堆盒子类型
thead 表示表格头
tbody 表示表格体
tfoot 表示表格尾
tr 表示一行,叫做 table row
一行里面是列,可用 td 也可以用 th
th 表示一个单元格的标题,叫做 table head
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>表格</title> <style> table{ width: 100%; } table caption{ font-size: 2em; font-weight: bold; } </style> </head> <body> <table> <caption>表格标题</caption> <thead> <tr> <th>列1</th> <th>列2</th> <th>列3</th> <th>列4</th> <th>列5</th> </tr> </thead> <tbody> <!-- tr*5>td*5{数据$} --> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> </tbody> <tfoot></tfoot> </table> </body> </html>
二、表格边框
现在表格没有边框,怎么给表格加边框?
选择 th 和 td 给表格加边框
<style> table{ width: 100%; } table caption{ font-size: 2em; font-weight: bold; } /* 给表格加边框 */ th, td{ border: 1px solid #999; } </style>
现在有边框列,但是每一个单元格之间是有空隙,
这个空隙是可以在table元素里面控制的,这个属性是 border-collapse ,表示的是边框的折叠方式
border-collapse 有两个取值
border-collapse: separste 默认值 separste,表示边框是分离的
border-collapse: collapse collapse表示折叠
<style> table{ width: 100%; border-collapse:collapse; /* 边框折叠,注意border-collapse属性要写到table元素里面 */ } table caption{ font-size: 2em; font-weight: bold; } th, td{ border: 1px solid #999; } </style>
th 里面的数据是默认居中的
tb 里面的数据是没有居中的
我们自己设置 css 居中就可以了 text-align: center;
<style> table{ width: 100%; border-collapse:collapse; } table caption{ font-size: 2em; font-weight: bold; } th, td{ border: 1px solid #999; text-align: center; /* 设置td内容居中 */ } </style>
三、单元格的合并
1、跨列使用 colspan 属性
表尾(tfoot)也加一行 tr,
最后 5 列 td 合并成一个单元格 td
这时候给 td 加一个 colspan 属性
1. col 的意思是 Column(列)
2. span 跨越的意思
3. colspan 表示跨越多少列
colspan="5" 跨越5列
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>跨列使用colspan属性</title> <style> table{ width: 100%; border-collapse:collapse; } table caption{ font-size: 2em; font-weight: bold; } th, td{ border: 1px solid #999; text-align: center; } </style> </head> <body> <table> <caption>表格标题</caption> <thead> <tr> <th>列1</th> <th>列2</th> <th>列3</th> <th>列4</th> <th>列5</th> </tr> </thead> <tbody> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> </tbody> <tfoot> <!-- 表尾 --> <tr> <!-- <td></td> <td></td> <td></td> <td></td> --> <td colspan="5">和计</td> </tr> </tfoot> </table> </body> </html>
如果前面还有一列,就要跨越4列 colspan="4"
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>跨越4列</title> <style> table{ width: 100%; border-collapse:collapse; } table caption{ font-size: 2em; font-weight: bold; } th, td{ border: 1px solid #999; text-align: center; } </style> </head> <body> <table> <caption>表格标题</caption> <thead> <tr> <th>列1</th> <th>列2</th> <th>列3</th> <th>列4</th> <th>列5</th> </tr> </thead> <tbody> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> </tbody> <tfoot> <tr> <td>(>^ω^<)喵</td> <td colspan="4">和计</td> </tr> </tfoot> </table> </body> </html>
2、跨行使用 rowspan 属性,row 行的意思
第一个行的第一个单元格要跨越两行
1. td 设置 rowspan="2"
2. 下一个列的第一个单元格就不写列
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>跨行使用rowspan属性</title> <style> table{ width: 100%; border-collapse:collapse; } table caption{ font-size: 2em; font-weight: bold; } th, td{ border: 1px solid #999; text-align: center; } </style> </head> <body> <table> <caption>表格标题</caption> <thead> <tr> <th>列1</th> <th>列2</th> <th>列3</th> <th>列4</th> <th>列5</th> </tr> </thead> <tbody> <tr> <!-- 跨越两行 --> <td rowspan="2">数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <!-- 这一行的第一个单元格就不写列 <td>数据1</td> --> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> <tr> <td>数据1</td> <td>数据2</td> <td>数据3</td> <td>数据4</td> <td>数据5</td> </tr> </tbody> <tfoot> <tr> <td colspan="5">和计</td> </tr> </tfoot> </table> </body> </html>
四、设置一下表格的样式
设置单单元格 th, td 的高度
设置 tr 隔行变色
<style> table{ width: 100%; border-collapse:collapse; } table caption{ font-size: 2em; font-weight: bold; margin:1em 0; /* 设置标题的margin */ } th, td{ border: 1px solid #999; text-align: center; padding: 10px 0; /* 设置单单元格的高度 */ } /* 给表头设置背景颜色,找到thead里面的tr */ thead tr{ background-color: #008c8c; color: #fff; } /* 表体实现以隔行变色,odd表示奇数,even表示偶数 */ tbody tr:nth-child(even){ background-color: #fefee1; } /* 荧光棒效果 鼠标移入一行的时候,这一行整体变色, 给tbody下面的tr设置:hover */ tbody tr:hover{ background-color: #ff8c8c; color: #fff; } </style>
选中表格所有,第一列的数据,怎么写选择器?
1. 选中 tbody 下面 tr 的 td tbody tr td:first-child{…}
2. 或者 tbody td:first-child{…}
我们选中 td,同时保证 td 是第一个子元素
<style> table{ width: 100%; border-collapse:collapse; } table caption{ font-size: 2em; font-weight: bold; margin:1em 0; } th, td{ border: 1px solid #999; text-align: center; padding: 10px 0; } thead tr{ background-color: #008c8c; color: #fff; } tbody tr:nth-child(even){ background-color: #fefee1; } tbody tr:hover{ background-color: #ff8c8c; color: #fff; } /* 选中表格所有,第一列的数据,怎么写代码? */ tbody td:first-child{ color: chocolate; } /* 最后一行,合计两个字靠右排列 */ tfoot td{ text-align: right; padding-right:20px; } </style>