有没有办法让 HTML 代码独立于 CSS 类名的变化?

Posted

技术标签:

【中文标题】有没有办法让 HTML 代码独立于 CSS 类名的变化?【英文标题】:Is there a way make HTML code independent from changes in CSS class names? 【发布时间】:2016-05-16 13:13:01 【问题描述】:

我使用Twitter Bootstrap 3 有一段时间了,但现在 Twitter Bootstrap 4 来了。还有新的Twitter Booststrapcomes with some changes,例如将.table-condensed 重命名为.table-sm。为了将来可能从当前版本迁移到未来版本,有没有办法使 html 代码独立于 CSS 类名的更改? 例如,如果我有.table-condensed 类,有没有办法创建我自己的类table-small 并从现有Twitter Bootstrap 的类table-condensed 创建它?类似(伪代码):

.table-small 
    join(".table-condensed")

直到现在我只使用纯CSS(我偶尔是前端开发人员而不是全栈开发人员:)),如果有人会回答我,如果这件事在某种程度上是可能的,也许有预处理器或其他东西像这样,我将非常感激 - 提前谢谢你!

【问题讨论】:

@cvrebert:我注意到您将 [bootstrap-4] 标签添加到带有 [twitter-bootstrap-4] 的问题中。您是否有理由不删除后一个标签?我们不需要为同一件事使用多个标签。这个在meta上讨论过了吗? “”不,因为 CSS 在设计上与文档语言耦合。如果不了解文档结构,选择器将无法工作。如果你不告诉它,你就不能指望 CSS 准确地知道要设置哪个元素的样式。 【参考方案1】:

如果您使用的是 SASS,那么您可以使用 @extend 函数。

但是,建议避免这样做,因为它会将选定的类复制到新的类中,因此,本质上,CSS 的大小会加倍

解决方案是不升级到 BS-4,除非您有要求。或者在您更新所有 HTML 时更新

编辑

阅读SASS docs,似乎功能已更改为使用逗号语法。所以这将是您未来的最佳选择。

通过将类的数量增加一倍,它仍然会生成多余的 CSS,但没有复制所有 CSS 那样糟糕

【讨论】:

Less css 不会将选中的类复制到新的类中^^ @edit,那么使用 scss(sass) 确实是个好主意,因为 bootstrap 4 也使用 scss。【参考方案2】:

您可以使用较少的 css 并执行以下操作:

.table-small 
    &:extend(.table-condensed);

这不会像 sass 那样复制类,而只是添加选择器:

生成的css:

.table-condensed,
.table-small 
    background: red;

预处理器在线:http://lesscss.org/less-preview/

【讨论】:

以上是关于有没有办法让 HTML 代码独立于 CSS 类名的变化?的主要内容,如果未能解决你的问题,请参考以下文章

CSS类被应用于没有该类名的元素,有啥想法吗?

有没有办法让 CSS :not() 选择器在 IE 和 Chrome 中工作?

如何让 CSS 文件正确应用于我的 PHP/HTML 代码?

有没有办法强制 div 内的浮动 div 元素仅使用 css 和 html 垂直占据可用空间?

有没有办法让 CSS calc() 永远不会是负值?

CSS选择器与优先级详解(一)