去年年底出现了一个有趣的趋势,即公司发布了他们的 CSS 方法。 包括所涉及的工具、方法、思路以及背后的数据和数字。 Mark Otto 率先发布了,据我所知。 我主要想在这里发布一份清单,因为这对 CSS-Tricks 来说是完美的素材。 最后我把它放进了一个表格,并添加了一些易于比较的数据,纯粹为了好玩。
公司:
Github
预处理器:
SCSS
前缀:
自定义 @mixins
# 源文件
100+
# 选择器
7,000
样式强制:
SCSS-lint, styleguide
备注:
由于 IE 选择器限制,存在 2 个最终样式表
公司:
Buffer
预处理器:
LESS
前缀:
Autoprefixer
# 源文件
93
# 选择器
5328
样式强制:
LESS lint
备注:
2 个最终样式表
公司:
CodePen
预处理器:
SCSS
前缀:
Autoprefixer
# 源文件
171
# 选择器
1186
样式强制:
.editorconfig
备注:
资产管道
公司:
Ghost
预处理器:
SCSS (libsass)
前缀:
Autoprefixer
# 源文件
36
# 选择器
1609
样式强制:
一般 指南
备注:
开源
公司:
Groupon
预处理器:
Sass (语法不清楚)
前缀:
Compass
# 源文件
?
# 选择器
?
样式强制:
SMACSS
备注:
Toolstrap
公司:
Lonely Planet
预处理器:
Sass
前缀:
Autoprefixer
# 源文件
150+
# 选择器
1527
样式强制:
Rizzo,无 lint
备注:
BEM / OOCSS, Normalize.css, SVG 图标
公司:
Medium
预处理器:
LESS
前缀:
自定义 @mixins
# 源文件
50-100
# 选择器
?
样式强制:
指南
备注:
无嵌套,自定义命名方法
公司:
Trello
预处理器:
LESS
前缀:
自定义 @mixins
# 源文件
44
# 选择器
2,426
样式强制:
预处理器
备注:
1 个最终样式表,命名空间
另一个非常常见的主题:.js-
类前缀,用于不混合 JavaScript 挂钩和样式挂钩。
另外,我尝试使该表格具有响应性…
我希望它
- 在有空间时成为一个外观正常的表格。
- 在小屏幕上折叠成块。
- 在没有 CSS 的情况下也能正常工作(电子邮件、RSS)。
以下为结果

该概念的根源是使用“正常”HTML 元素(section、div、p、span)并强制它们成为一个表格。 我对它们进行了不同的命名,但您也可以直接使用辅助类
.table { display: table }
.tr { display: table-row }
.thead { display: table-header-group }
.tbody { display: table-row-group }
.tfoot { display: table-footer-group }
.col { display: table-column }
.colgroup { display: table-column-group }
.td, .th { display: table-cell }
.caption { display: table-caption }
然后在某个媒体查询中,您强制它们恢复到正常状态
@media (max-width: 700px) {
.table { display: block }
.tr { display: block }
.thead { display: block }
.tbody { display: block }
.tfoot { display: block }
.col { display: none }
.colgroup { display: none }
.td, .th { display: inline-block }
.caption { display: block }
}
但这只会导致一些奇怪的句子,所以我添加了一堆<br>
标签以根据需要进行间距,这些标签使用 CSS 隐藏。 我还使用了一个<span>
为每个单元格添加标题,同样也使用 CSS 隐藏,因此如果没有 CSS,您会看到每个数据位的标题。
这很冗余且混乱。 在需要将其放入 WordPress 时情况更糟,因为自动段落行为会添加额外的段落,您需要小心处理。 我只是在一个 Pen 中做了整个事情,然后压缩了 HTML。
对于我不得不使用响应式表格的每种情况,我通常都会使用一些完全不同的元素。 您的方法真的很棒。 您可能想将此作为一篇关于样式响应式表格的文章。
是的,我做了完全相同的事情。 在页面上放置两个元素并根据需要隐藏/显示它们对我来说并不难。
我无法想象很多情况下会这样做…因为如果你显示一个非常大的表格,它会妨碍页面渲染,那么你可能需要重新考虑如何加载数据。 也许这种方法会导致比我意识到的更多糟糕的情况,但我还没有听到用户对此感到生气。
我刚刚查看了页面的源代码,我意识到这不是用表格元素完成的。
我很好奇您为什么要使用“正常”元素(section、div、p、span)并在某个断点强制它们像表格一样工作? 由于这是表格数据,使用表格元素是否更有意义? 您可以使用相同的媒体查询将 thead、tbody、th、td、tr 元素设置为较小屏幕上的块。
我意识到结果相同,但
<span class="th">
对我来说有点奇怪。 :)我必须附议…我认为在这种情况下使用合适的语义元素会是更好的方法…然后使用 CSS 或 JSS 更改较小设备的内容布局…
我通常也更喜欢
<table>
优先的方法。 但是请看第三个要点。 它必须在完全没有 CSS 的情况下也能正常工作。 表格仍然“有效”,但它 100% 会破坏从这篇博文生成的电子邮件的格式。 而且谁知道人们的 RSS 阅读器会显示什么。 这仅仅是我给自己提出的一个挑战,即从 HTML 开始,使其能够完全抵御这些情况,同时在我自己的网站上为标准桌面用户提供我想要的格式。+1 用于一篇关于样式响应式表格的文章(如果还没有的话)。 这段时间我一直在处理这个问题,试图在响应式布局中传达大量数据,结果与您这里的结果非常相似。 不同的是,我最终使用了实际的
<table>
,毕竟它是作为表格显示的表格数据。Chris,这个“表格”在 Feedly 的提要呈现中有点荒谬。
糟糕。 截图?
Chris,这是 Feedly 表格渲染的截图 [tinypic]。
这正是我想要的! 间隔开,可读,不会破坏布局。
桌面上的 Feedly 也是如此。
相关截图:http://i.imgur.com/4O1tCEQ.png
我非常喜欢阅读这些帖子,所以我将它们收集到一个GitHub 存储库中。 看来我错过了 Ghost 的帖子。 我想我的列表中也有一些您遗漏的帖子。 干杯…
感谢 @chriscoyier 关于为什么您使用本机块/内联块元素的评论。
我正要说明我更喜欢使用
<
table> 在这种情况下。
最后,我认为您关于电子邮件的观点是正确的。 我甚至没有想到 RSS…
这是一种移动优先的方法。
额外的 CSS 仅在大型屏幕上才有用,这很好,因为我们不想用低带宽网络超载网站大小。
我建议您参考 @LeaVerou 在 Twitter 上提到的 CSS 调查:https://twitter.com/LeaVerou/status/555859362670202880
这是一篇关于各种 CSS 方法的混合文章,但内容非常有用。
这可能是个愚蠢的问题,但您所说的“最终样式表”是什么意思?我在 Google 上搜索这个词没有找到任何相关的结果。
这意味着在经过所有预处理后,最终会得到一到两个最终的 CSS 文件。GitHub 将他们的样式表拆分为两个文件,因为 IE 的选择器限制。
就是这样,因为大多数使用 Less 或 Sass 的项目会将它们的样式拆分为不同的相关文件,以增加结构。
感谢 Rodrigo - 这样说就说得通了。我想我过度分析了这个词语。
嘿 Chris!您的列表很不错,表格也很漂亮。我尽量避免使用表格,它们太麻烦了。
顺便说一句,我还写了一篇关于 CSS 结构的文章(适用于 Noodles):)
我不理解在响应式表格中使用
<br>
的用途。你能详细解释一下吗?Br 标签用于在单词之间手动添加换行符。
Buzzfeed 也写了一篇文章:http://www.buzzfeed.com/erakor/i-am-all-about-that-sass#.yqq2Dxwne (
使用 HTML 表格进行的实验真棒!我一直想要一个动态的表格系统,可以在小屏幕上轻松适应和阅读,这就是我一直在寻找的!我的问题是,我的网站目前使用过时的系统来为所有屏幕尺寸样式化内容。我一直使用
@media only screen
来为较小的屏幕样式化内容,但我应该使用它来设置与宽度无关的基本样式,并使用媒体查询来更改布局和尺寸。您的 CSS 让我明白了我的错误,感谢 Chris。您好!为什么有些公司无法统计选择器数量?
友情提示手动回溯:http://meiert.com/en/blog/20150122/deterioration-of-practices/.
不需要 CSS 真是个遗憾,使用
:after
和attr()
可以实现很多不错的功能,可以减少对许多这类功能的需求。对于纯 HTML,我可能会将其改为更具语义性的方式,例如
每个单元格,然后隐藏表格显示中的所有 dt(当然除了第一行)。我认为这有助于消除换行符和额外的类,并且无需 CSS 就可以很好地格式化。
在我的表格中,我遇到了一些排序问题(例如,不希望最左边的列在响应式布局中排在第一位)。而且我仍然不知道此类列表中的项目(行)应该标记为
<article>
还是<section>
或<div>
。顺便说一句,CSS 工作流程的汇总很有趣。