表格应该有默认样式吗?

Avatar of Chris Coyier
Chris Coyier on

DigitalOcean 为您的旅程各个阶段提供云产品。立即开始使用 200 美元的免费积分!

Luke Underwood 提出一个有趣的问题

<table> 默认样式的最佳实践是什么?

我想有三种可能性

  • 有默认样式
  • 没有
  • 介于两者之间

Luke 进一步解释

我们办公室对这个想法意见不一。在我们基本的模板中,目前默认情况下没有样式应用于表格。您需要一个类才能使其看起来美观(带边框、背景颜色等)。我们主要在主内容区域中使用的表格上使用此类。

我们前端开发人员认为这是最好的,因为这意味着我们可以轻松地为自定义表格设置样式,而不必覆盖任何默认样式。这包括必须覆盖在较小屏幕上减少填充的媒体查询,这会很烦人。我们还认为在这些内容表格上有一个选择器很重要,以防我们需要实现响应式表格插件之类的 JavaScript 解决方案。

后端程序员一直很沮丧,因为他们不能“只是把一个表格放到页面上”而没有看起来很好,并坚持认为默认表格样式是最好的选择。显然,为每个表格添加一个简单的类很困难,他们认为我们应该处理编写额外的 CSS 来解决它。

总结

有默认样式的好处

  • 您可以将一个“表格”放入 HTML 中,它看起来很好。

需要类的好处

  • 您可以拥有多种表格样式,而不必与默认样式作斗争。
  • 您可能需要选择器才能找到这些特定表格。

我还要补充一些其他考虑因素。

背景是什么?

一个是考虑上下文。这些表格是作为内容存储和显示的吗?比如在文章、文档等中。我喜欢在内容中尽可能地保持无类。我发现类的使用寿命不如内容长。也许有一天,您的 .striped-table { } 不再存在了,表格无意中恢复到无样式状态。默认样式可以避免这种情况。

也许您的内容存储在 Markdown 中,我强烈推荐使用 Markdown 来存储持久性内容。Markdown 甚至没有提供一种很好的方法来为表格应用类,所以这是一个需要考虑的问题。

范围是否可行?

另一个需要考虑的是范围。也许在全局范围内,您可以避免默认样式,但是那些明显位于内容输出区域内的样式确实有默认样式。

/* Scoped styles to articles */
article,
.this-is-content-or-whatever {
  table {

  }
  th, td {

  }
}

就像 可选的排版

是否可以采用轻量级的默认样式?

除了典型的用户代理样式表之外,这些样式在很大程度上可以使表格看起来更美观。

table {
  border-collapse: collapse;
}
tr {
  border-bottom: 1px solid #ccc;
}
th, td {
  text-align: left;
  padding: 4px;
}

在使用自定义表格类的情况下,无需过多地与这些样式作斗争。

其他网站的做法如何?

Luke 做了一些调查!感谢 Luke。

网站 有默认表格样式吗?
Mozilla 没有
MDN 没有
CSS Tricks
维基百科 没有
谷歌 没有
eBay 没有
Smashing Magazine 没有
Awwwards 没有
推特 没有
jQuery
Modernizr 没有
GitHub 没有
W3C 没有
CodePen 没有
InvisionApp 没有
苹果 没有
雅虎 没有
亚马逊 没有
PayPal 没有
Netflix 没有
Dropbox 没有
StackOverflow 没有
CNN 没有
微软 没有
Gumtree 没有
领英 没有
News.com.au 没有
澳大利亚气象局 没有
澳大利亚广播公司 没有
RealEstate.com.au 没有
Tumblr 没有
IMDb 没有
Seek 没有
联邦银行 没有
澳新银行
The Verge 没有
BBC 没有
南澳政府 没有
MailChimp 没有
Adobe
Telstra 没有
Target
JB Hi-fi 没有

似乎不使用默认表格样式很流行。

重置怎么办?

最流行的重置 确实有

table, caption, tbody, tfoot, thead, tr, th, td {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}

我觉得这有点过于强势了。

Normalize 没有对它们进行任何处理,这很有说明意义。这意味着默认表格在跨浏览器渲染时并没有非常大的差异(没有?),所以不用担心。

大型框架怎么办?

  • Bootstrap 几乎没有触及 表格的默认样式,但提供 .table.table-striped 和其他一些您可以选择使用的样式。
  • Foundation 确实 从一开始就为默认表格设置样式。

50/50 分裂。

想法

就我个人而言,我倾向于拥有表格的默认样式,至少在作用域限定到内容区域的方式下。我不使用表格来做任何除了表格数据之外的事情,而且我不倾向于需要大量关于表格数据呈现方式的变体。即使我需要,创建一些变体类也不算特别困难的任务。