--- title: 样式化表格 slug: Learn/CSS/Building_blocks/Styling_tables translation_of: Learn/CSS/Building_blocks/Styling_tables ---
设计一个 HTML表格不是世界上最迷人的工作,但有时我们必须这样做。本文提供了一个使HTML表格看起来不错的指南,其中一些功能在前面的文章中已作详细介绍。
预备知识: | HTML 基础(学习 Introduction to HTML), HTML表格(见HTML表格模块(TBD)),了解CSS工作原理(study Introduction to CSS.) |
---|---|
目标: | 学习如何有效地对HTML表格进行样式化。 |
让我们从一个典型的HTML表格开始。恩,我说典型——大多数HTML表格都是关于鞋子,天气,或者员工的。我们决定通过制作英国著名的朋克乐队来让事情变得更有趣。标记看起来是这样的
<table> <caption>A summary of the UK's most famous punk bands</caption> <thead> <tr> <th scope="col">Band</th> <th scope="col">Year formed</th> <th scope="col">No. of Albums</th> <th scope="col">Most famous song</th> </tr> </thead> <tbody> <tr> <th scope="row">Buzzcocks</th> <td>1976</td> <td>9</td> <td>Ever fallen in love (with someone you shouldn't've)</td> </tr> <tr> <th scope="row">The Clash</th> <td>1976</td> <td>6</td> <td>London Calling</td> </tr> ... some rows removed for brevity <tr> <th scope="row">The Stranglers</th> <td>1974</td> <td>17</td> <td>No More Heroes</td> </tr> </tbody> <tfoot> <tr> <th scope="row" colspan="2">Total albums</th> <td colspan="2">77</td> </tr> </tfoot> </table>
由于{{htmlattrxref("scope","th")}}、{{htmlelement("caption")}}、{{htmlelement("thead")}}、{{htmlelement("tbody")}}等特性,表格被很好地标记了,易于使用,并且易于访问,不幸的是,它在屏幕上呈现时看起来不太好(见它的预览版 punk-bands-unstyled.html):
它看起来很拥挤,很难阅读,也很无聊。我们需要使用一些CSS来解决这个问题。
在这个自主学习部分中,我们将一起来样式化我们的表格。
style.css
的新文件并将其保存在与其他文件相同的目录中。<link href="style.css" rel="stylesheet" type="text/css">
我们需要做的第一件事是整理出空间/布局——默认的表格样式是如此的拥挤!要做到这一点,请将以下CSS添加到您的 style.css
文件:
/* spacing */ table { table-layout: fixed; width: 100%; border-collapse: collapse; border: 3px solid purple; } thead th:nth-child(1) { width: 30%; } thead th:nth-child(2) { width: 20%; } thead th:nth-child(3) { width: 15%; } thead th:nth-child(4) { width: 35%; } th, td { padding: 20px; }
需要注意的最重要的部分如下:
fixed
的值通常是一个好主意,因为它使表的行为在默认情况下更可预测。通常情况下,表列的尺寸会根据所包含的内容大小而变化,这会产生一些奇怪的结果。通过 table-layout: fixed
,您可以根据列标题的宽度来规定列的宽度,然后适当地处理它们的内容。这就是为什么我们使用了thead th:nth-child(n)
选择了四个不同的标题({{cssxref(":nth-child")}})选择器(“选择第n个子元素,它是一个顺序排列的{{htmlelement("th")}}元素,且其父元素是{{htmlelement("thead")}}元素”)并给定了它们的百分比宽度。整个列宽度与列标题的宽度是一样的,这是一种很好的设定表列尺寸的方式。Chris Coyier在Fixed Table Layouts中更详细地讨论了这一技术。collapse
值对于任何表样式的工作来说都是一个标准的最佳实践。默认情况下,当您在表元素上设置边框时,它们之间将会有间隔,如下图所示:border-collapse: collapse;
,让边框合为一条,现在看起来好多了:此刻,我们的表看起来好多了:
现在我们把类型整理一下。
首先,我们在Google Fonts上找到了一种适合于朋克乐队的字体的字体。如果你愿意,你可以去那里找一个不同的。现在,您只需替换我们提供的{{htmlelement("link")}}元素和定制的{{cssxref("font-family")}}声明,并使用Google字体提供给您的内容。
首先,将下面的{{htmlelement("link")}}元素添加到您的HTML头部,就在您现有的 <link>
元素之上:
<link href='https://fonts.googleapis.com/css?family=Rock+Salt' rel='stylesheet' type='text/css'>
现在将下面的CSS添加到您的style.css
文件,在之前内容后面添加:
/* typography */ html { font-family: 'helvetica neue', helvetica, arial, sans-serif; } thead th, tfoot th { font-family: 'Rock Salt', cursive; } th { letter-spacing: 2px; } td { letter-spacing: 1px; } tbody td { text-align: center; } tfoot th { text-align: right; }
这里没有什么特别的东西。我们通常会对字体样式进行调整,使其更易于阅读:
left
值,并且标题被赋予了一个center
值,但是通常情况下,让两者对齐看起来更好。标题字体的默认粗体值足以区分它们的外观。结果看起来更整洁一些:
现在轮到图形和颜色了!因为表格上充满“朋克“和“个性”,我们需要给它再搭配一些鲜艳的造型。别担心,你不必让你的表格”燥起来“,你可以选择一些更巧妙、更有品位的东西。
首先将下面的CSS添加到style.css
文件中,在底部添加:
thead, tfoot { background: url(leopardskin.jpg); color: white; text-shadow: 1px 1px 1px black; } thead th, tfoot th, tfoot td { background: linear-gradient(to bottom, rgba(0,0,0,0.1), rgba(0,0,0,0.5)); border: 3px solid purple; }
同样,对于表格这里没有什么特别的,但有几件事值得注意。
我们已经将一个{{cssxref("background-image")}}添加到{{htmlelement("thead")}}和{{htmlelement("tfoot")}},并将页眉和页脚的所有文本颜色{{cssxref("color")}}更改为白色(并给它一个{{cssxref("text-shadow")}}),这样它的可读性就更好了。你应该确保你的文字与你的背景形成鲜明的对比,使得它是可读的。
我们还为{{htmlelement("th")}}和 {{htmlelement("td")}}添加了一个线性渐变,在页眉和页脚中添加了一个漂亮的纹理,同时也为这些元素提供了一个明亮的紫色边框。有多个嵌套的元素是很有用的,这样您就可以将样式层叠在一起。是的,我们可以通过设置多组背景图像属性值来在{{htmlelement("thead")}}和 {{htmlelement("tfoot")}}元素上同时使用背景图像和线性渐变,但是我们决定分开使用,因为考虑到不支持多个背景图像或线性渐变的老浏览器。
我们想用一个单独的部分来展示如何实现斑马条纹(zebra stripes)——通过改变不同数据行的颜色,使表中交替行不同的数据行可以更容易地进行解析和读取。将下面的CSS添加到您的 style.css
文件底部:
tbody tr:nth-child(odd) { background-color: #ff33cc; } tbody tr:nth-child(even) { background-color: #e495e4; } tbody tr { background-image: url(noise.png); } table { background-color: #ff33cc; }
2n-1
会选择所有奇数的子元素(1、3、5等),而公式2n
会选择所有偶数的子元素(2、4、6等等)。我们在代码中使用了odd
和even
的关键字,这与前面提到的公式作用完全相同。在这里,我们给奇数行和偶数行不同的(醒目的)颜色。.png
,有一点视觉上的扭曲)来提供一些纹理。:nth-child
选择器仍然有它们的正文行的背景。这种颜色爆炸的结果如下:
现在,这可能有点过头不符合你的品味,但我们在这里想要指出的一点是,表格并非只能是枯燥无味的,学术性的。
对我们的表格还有最后一点处理——样式化标题。要做到这一点,请将以下内容添加到您的style.css
文件底部:
caption { font-family: 'Rock Salt', cursive; padding: 20px; font-style: italic; caption-side: bottom; color: #666; text-align: right; letter-spacing: 1px; }
这里没有什么值得注意的地方,除了{{cssxref("caption-side")}}属性,它被赋予了一个bottom
的值。这就导致标题被放置在表格的底部,与其他声明一起提供了最后的外观(见预览版punk-bands-complete.html):
现在,我们希望您可以使用我们的示例表格HTML(或者使用您自己的一些!),并将其样式设计成比我们的表更好的设计和不那么花哨的东西。
在继续之前,我们认为我们将为您提供一个快速列表,列出了上面提到的最有用的点:
: fixed
创建更可控的表布局,可以通过在标题{{cssxref("width")}}中设置{{cssxref("width")}}来轻松设置列的宽度。: collapse
使表元素边框合并,生成一个更整洁、更易于控制的外观。我们在这篇文章里面讲了很多,但是你能记住最重要的信息吗?你能找到些更进一步的测试,在你继续之前,想要验证你已经吸收了这些信息的话,请见Test your skills: tables。
现在,我们身后的表格样式令人炫目,令人兴奋,我们需要一些其他的东西来占据我们的时间。不要担心——下一章会介绍如何调试CSS,如何解决诸如布局不能像所应该的那样进行呈现的问题,或者元素无法像你预料的那样生效的问题。那里包含了使用浏览器开发者工具寻找你的问题的解决方案的信息。
{{PreviousMenuNext("Learn/CSS/Building_blocks/Images_media_form_elements", "Learn/CSS/Building_blocks/Debugging_CSS", "Learn/CSS/Building_blocks")}}