CSS 表格
使用 CSS 可以极大地改善 HTML 表格的外观:
公司 | 联系人 | 地址 | 城市 |
---|---|---|---|
阿里巴巴 | 马云 | 滨江区网商路699号 | 杭州市 |
苹果 | 库克 | 1 Infinite Loop Cupertino, CA 95014 | 丘珀蒂诺 |
百度 | 李彦宏 | 北四环西路58号丽香国际大厦 | 北京市 |
华为 | 任正非 | 龙岗区莆田华为基地 | 深圳市 |
腾讯 | 马化腾 | 南山区高新区腾讯大厦 | 深圳市 |
小米 | 雷军 | 北京市海淀区安宁庄路小米科技园 | 北京市 |
字节跳动 | 张一鸣 | 北三环西路43号中航广场1号楼 | 北京市 |
代码如下:
<!DOCTYPE html>
<html>
<head>
<style>
#customers {
font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
}
#customers td, #customers th {
border: 1px solid #ddd;
padding: 8px;
}
#customers tr:nth-child(even){background-color: #f2f2f2;}
#customers tr:hover {background-color: #ddd;}
#customers th {
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
background-color: #4CAF50;
color: white;
}
</style>
</head>
<body>
<table id="customers">
<tr>
<th>公司</th>
<th>联系人</th>
<th>地址</th>
<th>城市</th>
</tr>
<tr>
<td>阿里巴巴</td>
<td>马云</td>
<td>滨江区网商路699号</td>
<td>杭州市</td>
</tr>
<tr>
<td>苹果</td>
<td>库克</td>
<td>1 Infinite Loop Cupertino, CA 95014</td>
<td>丘珀蒂诺</td>
</tr>
<tr>
<td>百度</td>
<td>李彦宏</td>
<td>北四环西路58号丽香国际大厦</td>
<td>北京市</td>
</tr>
<tr>
<td>华为</td>
<td>任正非</td>
<td>龙岗区莆田华为基地</td>
<td>深圳市</td>
</tr>
<tr>
<td>腾讯</td>
<td>马化腾</td>
<td>南山区高新区腾讯大厦</td>
<td>深圳市</td>
</tr>
<tr>
<td>小米</td>
<td>雷军</td>
<td>北京市海淀区安宁庄路小米科技园</td>
<td>北京市</td>
</tr>
<tr>
<td>字节跳动</td>
<td>张一鸣</td>
<td>北三环西路43号中航广场1号楼</td>
<td>北京市</td>
</tr>
</table>
</body>
</html>
表格边框
如需在 CSS 中设置表格边框,请使用 border 属性。
下例为 <table>、<th> 和 <td> 元素规定了黑色边框:
姓氏 | 名称 |
---|---|
埃隆 | 马斯克 |
马克 | 扎克伯格 |
<!DOCTYPE html>
<html>
<body>
<h1>XMLHttpRequest 对象</h1>
<p id="demo">让 AJAX 改变这段文本。</p>
<button type="button" onclick="loadDoc()">更改内容</button>
<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML = this.responseText;
}
};
xhttp.open("GET", "/example/js/ajax_info.txt", true);
xhttp.send();
}
</script>
</body>
</html>
注意:上例中的表格拥有双边框。这是因为 table 和 <th> 和 <td> 元素都有单独的边框。
全宽表格
在某些情况下,上表似乎很小。如果您需要一个可以覆盖整个屏幕(全宽)的表格,请为 <table> 元素添加 width: 100%:
<!DOCTYPE html>
<html>
<head>
<style>
table, th, td {
border: 1px solid black;
}
table {
width: 100%;
}
</style>
</head>
<body>
<h1>全宽表格</h1>
<table>
<tr>
<th>姓氏</th>
<th>名称</th>
</tr>
<tr>
<td>埃隆</td>
<td>马斯克</td>
</tr>
<tr>
<td>马克</td>
<td>扎克伯格</td>
</tr>
</table>
</body>
</html>
双边框
请注意上面的表格有双边框。这是因为表格和 th、td 元素都有单独的边框。
如需删除双边框,请看下面的例子。
合并表格边框
border-collapse 属性设置是否将表格边框折叠为单一边框:
姓氏 | 名称 |
---|---|
埃隆 | 马斯克 |
马克 | 扎克伯格 |
实例
<!DOCTYPE html>
<html>
<head>
<style>
table, td, th {
border: 1px solid black;
}
table {
width: 100%;
border-collapse: collapse;
}
</style>
</head>
<body>
<h1>让边框重合</h1>
<table>
<tr>
<th>姓氏</th>
<th>名称</th>
</tr>
<tr>
<td>埃隆</td>
<td>马斯克</td>
</tr>
<tr>
<td>马克</td>
<td>扎克伯格</td>
</tr>
</table>
</body>
</html>
如果只希望表格周围有边框,则仅需为 <table> 指定 border 属性:
<!DOCTYPE html>
<html>
<head>
<style>
table {
width: 100%;
border-collapse: collapse;
border: 1px solid black;
}
</style>
</head>
<body>
<h1>单边框表格</h1>
<table>
<tr>
<th>姓氏</th>
<th>名称</th>
</tr>
<tr>
<td>埃隆</td>
<td>马斯克</td>
</tr>
<tr>
<td>马克</td>
<td>扎克伯格</td>
</tr>
</table>
</body>
</html>
表格宽度和高度
表格的宽度和高度由 width 和 height 属性定义。
下例将表的宽度设置为 100%,将 <th> 元素的高度设置为 50px:
姓氏 | 名称 | 结余 |
---|---|---|
埃隆 | 马斯克 | $100 |
马克 | 扎克伯格 | $150 |
比尔 | 盖茨 | $300 |
实例
<!DOCTYPE html>
<html>
<head>
<style>
table, td, th {
border: 1px solid black;
}
table {
border-collapse: collapse;
width: 100%;
}
th {
height: 70px;
}
</style>
</head>
<body>
<h1>width 和 height 属性</h1>
<p>设置表格的宽度,以及表格标题行的高度:</p>
<table>
<tr>
<th>姓氏</th>
<th>名称</th>
<th>结余</th>
</tr>
<tr>
<td>埃隆</td>
<td>马斯克</td>
<td>$100</td>
</tr>
<tr>
<td>马克</td>
<td>扎克伯格</td>
<td>$150</td>
</tr>
<tr>
<td>比尔</td>
<td>盖茨</td>
<td>$300</td>
</tr>
</table>
</body>
</html>
要创建仅占页面一半的表,请使用 width: 50%:
<!DOCTYPE html>
<html>
<head>
<style>
table, td, th {
border: 1px solid black;
}
table {
border-collapse: collapse;
width: 50%;
}
th {
height: 70px;
}
</style>
</head>
<body>
<h1>width 和 height 属性</h1>
<p>设置表格的宽度,以及表格标题行的高度:</p>
<table>
<tr>
<th>姓氏</th>
<th>名称</th>
<th>结余</th>
</tr>
<tr>
<td>埃隆</td>
<td>马斯克</td>
<td>$100</td>
</tr>
<tr>
<td>马克</td>
<td>扎克伯格</td>
<td>$150</td>
</tr>
<tr>
<td>比尔</td>
<td>盖茨</td>
<td>$300</td>
</tr>
</table>
</body>
</html>
水平对齐
text-align 属性设置 <th> 或 <td> 中内容的水平对齐方式(左、右或居中)。
默认情况下,<th> 元素的内容居中对齐,而 <td> 元素的内容左对齐。
要使 <td> 元素的内容也居中对齐,请使用 text-align: center:
姓氏 | 名称 | 结余 |
---|---|---|
埃隆 | 马斯克 | $100 |
马克 | 扎克伯格 | $150 |
比尔 | 盖茨 | $300 |
实例
<!DOCTYPE html>
<html>
<head>
<style>
table, td, th {
border: 1px solid black;
}
table {
border-collapse: collapse;
width: 100%;
}
td {
text-align: center;
}
</style>
</head>
<body>
<h1>text-align 属性</h1>
<p>这个属性设置 th 或 td 中内容的水平对齐方式(左、右、或居中)。</p>
<table>
<tr>
<th>姓氏</th>
<th>名称</th>
<th>结余</th>
</tr>
<tr>
<td>埃隆</td>
<td>马斯克</td>
<td>$100</td>
</tr>
<tr>
<td>马克</td>
<td>扎克伯格</td>
<td>$150</td>
</tr>
<tr>
<td>比尔</td>
<td>盖茨</td>
<td>$300</td>
</tr>
</table>
</body>
</html>
下例使 <th> 元素中的文本左对齐:
姓氏 | 名称 | 结余 |
---|---|---|
埃隆 | 马斯克 | $100 |
马克 | 扎克伯格 | $150 |
比尔 | 盖茨 | $300 |
实例
<!DOCTYPE html>
<html>
<head>
<style>
table, td, th {
border: 1px solid black;
}
table {
border-collapse: collapse;
width: 100%;
}
th {
text-align: left;
}
</style>
</head>
<body>
<h1>text-align 属性</h1>
<p>这个属性设置 th 或 td 中内容的水平对齐方式(比如左、右或居中对齐)。</p>
<table>
<tr>
<th>姓氏</th>
<th>名称</th>
<th>结余</th>
</tr>
<tr>
<td>埃隆</td>
<td>马斯克</td>
<td>$100</td>
</tr>
<tr>
<td>马克</td>
<td>扎克伯格</td>
<td>$150</td>
</tr>
<tr>
<td>比尔</td>
<td>盖茨</td>
<td>$300</td>
</tr>
</table>
</body>
</html>
垂直对齐
vertical-align 属性设置 <th> 或 <td> 中内容的垂直对齐方式(上、下或居中)。默认情况下,表中内容的垂直对齐是居中(<th> 和 <td> 元素都是)。下例将 <td> 元素的垂直文本对齐方式设置为下对齐:
姓氏 | 名称 | 结余 |
---|---|---|
埃隆 | 马斯克 | $100 |
马克 | 扎克伯格 | $150 |
比尔 | 盖茨 | $300 |
实例
<!DOCTYPE html>
<html>
<head>
<style>
table, td, th {
border: 1px solid black;
}
table {
border-collapse: collapse;
width: 100%;
}
td {
height: 50px;
vertical-align: bottom;
}
</style>
</head>
<body>
<h1>vertical-align 属性</h1>
<p>这个属性设置 th 或 td 中内容的垂直对齐方式(比如上、下或居中对齐)。</p>
<table>
<tr>
<th>姓氏</th>
<th>名称</th>
<th>结余</th>
</tr>
<tr>
<td>埃隆</td>
<td>马斯克</td>
<td>$100</td>
</tr>
<tr>
<td>马克</td>
<td>扎克伯格</td>
<td>$150</td>
</tr>
<tr>
<td>比尔</td>
<td>盖茨</td>
<td>$300</td>
</tr>
</table>
</body>
</html>
表格内边距
如需控制边框和表格内容之间的间距,请在 <td> 和 <th> 元素上使用 padding 属性:
姓氏 | 名称 | 结余 |
---|---|---|
埃隆 | 马斯克 | $100 |
马克 | 扎克伯格 | $150 |
比尔 | 盖茨 | $300 |
实例
<!DOCTYPE html>
<html>
<head>
<style>
table, td, th {
border: 1px solid #ddd;
text-align: left;
}
table {
border-collapse: collapse;
width: 100%;
}
th, td {
padding: 15px;
}
</style>
</head>
<body>
<h1>padding 属性</h1>
<p>这个属性在表格的内容与边框之间添加空间。</p>
<table>
<tr>
<th>姓氏</th>
<th>名称</th>
<th>结余</th>
</tr>
<tr>
<td>埃隆</td>
<td>马斯克</td>
<td>$100</td>
</tr>
<tr>
<td>马克</td>
<td>扎克伯格</td>
<td>$150</td>
</tr>
<tr>
<td>比尔</td>
<td>盖茨</td>
<td>$300</td>
</tr>
</table>
</body>
</html>
水平分隔线
姓氏 | 名称 | 结余 |
---|---|---|
埃隆 | 马斯克 | $100 |
马克 | 扎克伯格 | $150 |
比尔 | 盖茨 | $300 |
向 <th> 和 <td> 添加 border-bottom 属性,以实现水平分隔线:
实例
<!DOCTYPE html>
<html>
<head>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
padding: 8px;
text-align: left;
border-bottom: 1px solid #ddd;
}
</style>
</head>
<body>
<h1>表格分隔线</h1>
<p>为 th 和 td 添加 border-bottom,已实现水平分隔线:</p>
<table>
<tr>
<th>姓氏</th>
<th>名称</th>
<th>结余</th>
</tr>
<tr>
<td>埃隆</td>
<td>马斯克</td>
<td>$100</td>
</tr>
<tr>
<td>马克</td>
<td>扎克伯格</td>
<td>$150</td>
</tr>
<tr>
<td>比尔</td>
<td>盖茨</td>
<td>$300</td>
</tr>
</table>
</body>
</html>
可悬停表格
在 <tr> 元素上使用 :hover 选择器,以突出显示鼠标悬停时的表格行:
姓氏 | 名称 | 结余 |
---|---|---|
埃隆 | 马斯克 | $100 |
马克 | 扎克伯格 | $150 |
比尔 | 盖茨 | $300 |
实例
<!DOCTYPE html>
<html>
<head>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
padding: 8px;
text-align: left;
border-bottom: 1px solid #ddd;
}
tr:hover {background-color:#f5f5f5;}
</style>
</head>
<body>
<h1>可悬停表格</h1>
<p>将鼠标移到表格行上可以查看效果。</p>
<table>
<tr>
<th>姓氏</th>
<th>名称</th>
<th>结余</th>
</tr>
<tr>
<td>埃隆</td>
<td>马斯克</td>
<td>$100</td>
</tr>
<tr>
<td>马克</td>
<td>扎克伯格</td>
<td>$150</td>
</tr>
<tr>
<td>比尔</td>
<td>盖茨</td>
<td>$300</td>
</tr>
</table>
</body>
</html>
条状表格
姓氏 | 名称 | 结余 |
---|---|---|
埃隆 | 马斯克 | $100 |
马克 | 扎克伯格 | $150 |
比尔 | 盖茨 | $300 |
为了实现斑马纹表格效果,请使用 nth-child() 选择器,并为所有偶数(或奇数)表行添加 background-color:
<!DOCTYPE html>
<html>
<head>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
text-align: left;
padding: 8px;
}
tr:nth-child(even) {background-color: #f2f2f2;}
</style>
</head>
<body>
<h1>条纹表格</h1>
<p>为了实现斑马纹表格效果,请使用 nth-child() 选择器,并为所有偶数(或奇数)表行添加背景色:</p>
<table>
<tr>
<th>姓氏</th>
<th>名称</th>
<th>结余</th>
</tr>
<tr>
<td>埃隆</td>
<td>马斯克</td>
<td>$100</td>
</tr>
<tr>
<td>马克</td>
<td>扎克伯格</td>
<td>$150</td>
</tr>
<tr>
<td>比尔</td>
<td>盖茨</td>
<td>$300</td>
</tr>
</table>
</body>
</html>
表格颜色
下例指定了 <th> 元素的背景颜色和文本颜色:
姓氏 | 名称 | 结余 |
---|---|---|
埃隆 | 马斯克 | $100 |
马克 | 扎克伯格 | $150 |
比尔 | 盖茨 | $300 |
实例
<!DOCTYPE html>
<html>
<head>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
text-align: left;
padding: 8px;
}
tr:nth-child(even){background-color: #f2f2f2}
th {
background-color: #4CAF50;
color: white;
}
</style>
</head>
<body>
<h1>有颜色的表格标题</h1>
<table>
<tr>
<th>姓氏</th>
<th>名称</th>
<th>结余</th>
</tr>
<tr>
<td>埃隆</td>
<td>马斯克</td>
<td>$100</td>
</tr>
<tr>
<td>马克</td>
<td>扎克伯格</td>
<td>$150</td>
</tr>
<tr>
<td>比尔</td>
<td>盖茨</td>
<td>$300</td>
</tr>
</table>
</body>
</html>
响应式表格
如果屏幕太小而无法显示全部内容,则响应式表格会显示水平滚动条。
在 <table> 元素周围添加带有 overflow-x:auto 的容器元素(例如 <div>),以实现响应式效果:
<!DOCTYPE html>
<html>
<head>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
text-align: left;
padding: 8px;
}
tr:nth-child(even) {background-color: #f2f2f2;}
</style>
</head>
<body>
<h1>响应式表格</h1>
<p>如果屏幕太小无法显示全部内容,响应表将显示水平滚动条。请调整浏览器窗口的大小以查看效果:</p>
<p>如需创建响应式表格,请用 <strong>overflow-x:auto</strong> 的容器元素(比如 div)包围表格元素:</p>
<div style="overflow-x:auto;">
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Points</th>
<th>Points</th>
<th>Points</th>
<th>Points</th>
<th>Points</th>
<th>Points</th>
<th>Points</th>
<th>Points</th>
<th>Points</th>
<th>Points</th>
</tr>
<tr>
<td>Bill</td>
<td>Gates</td>
<td>50</td>
<td>50</td>
<td>50</td>
<td>50</td>
<td>50</td>
<td>50</td>
<td>50</td>
<td>50</td>
<td>50</td>
<td>50</td>
</tr>
<tr>
<td>Steve</td>
<td>Jobs</td>
<td>94</td>
<td>94</td>
<td>94</td>
<td>94</td>
<td>94</td>
<td>94</td>
<td>94</td>
<td>94</td>
<td>94</td>
<td>94</td>
</tr>
<tr>
<td>Elon</td>
<td>Musk</td>
<td>67</td>
<td>67</td>
<td>67</td>
<td>67</td>
<td>67</td>
<td>67</td>
<td>67</td>
<td>67</td>
<td>67</td>
<td>67</td>
</tr>
</table>
</div>
</body>
</html>
注释:在 OS X Lion(在 Mac 上)中,滚动条默认情况下是隐藏的,并且仅在使用时显示(即使设置了 "overflow:scroll")。
CSS 表格属性
属性 | 描述 |
---|---|
border | 简写属性。在一条声明中设置所有边框属性。 |
border-collapse | 规定是否应折叠表格边框。 |
border-spacing | 规定相邻单元格之间的边框的距离。 |
caption-side | 规定表格标题的位置。 |
empty-cells | 规定是否在表格中的空白单元格上显示边框和背景。 |
table-layout | 设置用于表格的布局算法。 |