我们可以在另一个 css 类中包含常见的 css 类吗?

Posted

技术标签:

【中文标题】我们可以在另一个 css 类中包含常见的 css 类吗?【英文标题】:Can we include common css class in another css class? 【发布时间】:2010-12-07 06:19:18 【问题描述】:

我是 CSS 新手。我只是想知道,是否可以将一个公共类包含到另一个类中?

例如,

.center align: center;
.content  include .center here;

我遇到了 css 框架 - Blueprint。我们需要将位置信息放入html,例如

<div class="span-4"><div class="span-24 last">

因此,我们将定位属性放在 html 中,而不是 css。如果我们改变布局,我们需要改变html,而不是css。

这就是我问这个问题的原因。如果我可以将 .span-4 包含到我自己的 css 中,我就不必在我的 html 标记中指定它。

【问题讨论】:

答案有问题吗? 在背景颜色方面,我发现这将非常有帮助,但我们不得不以艰难的方式做事。 T.T 【参考方案1】:

奇怪的是,即使 CSS 谈到了继承,类也不能以这种方式“继承”。您真正能做的最好的事情是:

.center, .content  align: center; 
.content  /* ... */ 

另外我强烈建议你不要做这样的“裸”类选择器。尽可能在类之外使用 ID 或标签:

div.center, div.content  align: center; 
div.content  /* ... */ 

我这样说是因为如果您将选择器做得尽可能广泛,那么一旦您获得大型样式表,它最终会变得难以管理(根据我的经验)。您最终会遇到意外的选择器相互交互,从而创建一个新类(例如 .center2),因为更改原始选择器会影响各种您不想要的东西。

【讨论】:

我强烈反对避免使用裸类选择器。在我所有这些年的 CSS 中,我从未遇到过将两个概念上不同的类命名为相同的问题。如果你这样做了,那么 a) 你可以很容易地更改一个名称,并且 b) 指定元素名称并不能解决问题,只会降低它的可预测性,并且通过扩展,更难诊断和解决,因为 大多数有时,元素不会匹配,因此错误只会在某些时候出现。真正的问题是使用像“center”这样的类名。 我必须部分同意cletus 和Thom。首先,像“center”这样的类描述了它的外观,而不是它是什么,应该避免。像“内容”这样的语义类名称是一个更好的选择。现在,关于使用广泛(或“裸”)选择器,我必须同意 cletus ——这确实是灾难的根源。 Firebug 使识别错误变得更容易,但是如果您有十个 &lt;div&gt; ,每个都有不同的语义,那么每个都应该有自己的类。如果它们共享显示属性,则使用多重选择器(例如 div.content, div.author_name 【参考方案2】:

在标准 CSS 中,这是不可能的,虽然这很好。

对于类似的东西,你需要使用 SASS 或类似的东西,它们“编译”为 CSS。

【讨论】:

+1 这些系统只是让编写 CSS 变得更容易一些——它们最终都变成了普通的 CSS。【参考方案3】:

这就是层叠样式表中的层叠发挥作用的地方。

将您的 html 元素或小部件/模块(嵌套的 html 元素组)视为一个对象。您知道您将拥有共享相同属性的对象,因此您需要创建一个它们可以利用的可重用类。

.baseModule align: center;

假设您的模块是一条消息(错误,闪存...)。因此,您“扩展”或“包含”您的 .baseModule 类,因为所有消息都将居中对齐(参见最终的 html 示例)。

.message border: 1px solid #555;

此外,您希望错误消息具有红色背景。此外,如果您希望它是不同的颜色或其他东西,您可以在此处从 .baseModule.message 覆盖边框属性。

.error background-color: red;

所以现在您有了一些可以轻松重用的 css 定义。

<!-- Regular message module -->
<p class="baseModule message">
    I am a regular message.
</p>

<!-- Error message module -->
<p class="baseModule message error">
    I am an error message. My background color is red.
</p>

要将此与您的问题联系起来,您基本上会利用多个类名来实现最大的可重用性。诚然 ie6 不支持链式选择器 (class1.class2.class3),但它仍然是一个巧妙的技巧!

【讨论】:

以上是关于我们可以在另一个 css 类中包含常见的 css 类吗?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在另一个中包含一个 CSS 文件?

如何在另一个 JavaScript 文件中包含一个 JavaScript 文件?

译文:在JavaScript应用程序中包含CSS的多种方法

在另一个项目中包含继承类时抽象类的链接器错误

仅在一个 Vue 组件中包含外部 CSS 库

在另一个 groovy 中包含一个 groovy 脚本