143

:before同一个元素是否可以有多个伪?

.circle:before {
    content: "\25CF";
    font-size: 19px;
}
.now:before{
    content: "Now";
    font-size: 19px;
    color: black;
}

我正在尝试使用 jQuery 将上述样式应用于同一元素,但仅应用最新的样式,而不是两者。

4

4 回答 4

115

在 CSS2.1 中,一个元素在任何时候最多只能有任何一种伪元素。(这意味着一个元素可以同时有一个:before和一个:after伪元素——它不能有超过一个。)

因此,当您有多个:before规则匹配同一个元素时,它们将全部级联并应用于单个:before伪元素,就像普通元素一样。在您的示例中,最终结果如下所示:

.circle.now:before {
    content: "Now";
    font-size: 19px;
    color: black;
}

如您所见,只有content具有最高优先级的声明(如前所述,最后出现的声明)才会生效——其余的声明将被丢弃,与任何其他 CSS 属性一样。

CSS2.1 的 Selectors 部分描述了这种行为:

除了下面和其他地方描述的例外,伪元素的行为就像 CSS 中的真实元素一样。

这意味着带有伪元素的选择器就像普通元素的选择器一样工作。这也意味着级联应该以相同的方式工作。奇怪的是,CSS2.1 似乎是唯一的参考。css3-selectorscss3-cascade都没有提到这一点,是否会在未来的规范中澄清还有待观察。

如果一个元素可以匹配多个具有相同伪元素的选择器,并且您希望所有这些都以某种方式应用,则需要使用组合选择器创建额外的 CSS 规则,以便您可以准确指定浏览器在这些选择器中应该做什么案例。我无法在content此处提供包含属性的完整示例,因为不清楚例如符号或文本是否应该放在首位。但是这个组合规则所需的选择器是.circle.now:before或者.now.circle:before- 无论您选择哪个选择器都是个人偏好,因为两个选择器是等效的content,您需要自己定义的只是属性的值。

如果您仍需要具体示例,请参阅我对这个类似问题的回答。

遗留的 css3-content 规范包含一个关于使用与 CSS2.1 级联兼容的表示法插入多个::before::after伪元素的部分,但请注意,该特定文档已过时 - 自 2003 年以来没有更新,也没有人更新过在过去十年中实现了该功能。好消息是,被遗弃的文档正在以css-content-3css-pseudo-4的名义进行重写。坏消息是,在这两个规范中都找不到多个伪元素功能,这大概是由于缺乏实现者的兴趣。

于 2012-08-17T02:57:43.643 回答
42

如果你的主元素有一些子元素或文本,你可以利用它。

定位您的主要元素相对(或绝对/固定)并使用 :before 和 :after 定位绝对(在我的情况下它必须是绝对的,不知道你的)。

现在,如果您想要一个更多的伪元素,请将绝对 :before 附加到主要元素的其中一个子元素(如果您只有文本,请将其放在一个跨度中,现在您有一个元素),这不是相对/绝对/固定.

这个元素将开始表现得好像他的主人是你的主要元素。

HTML

<div class="circle">
    <span>Some text</span>
</div>

CSS

.circle {
    position: relative; /* or absolute/fixed */
}

.circle:before {
    position: absolute;
    content: "";
    /* more styles: width, height, etc */
}

.circle:after {
    position: absolute;
    content: "";
    /* more styles: width, height, etc */
}

.circle span {
    /* not relative/absolute/fixed */
}

.circle span:before {
    position: absolute;
    content: "";
    /* more styles: width, height, etc */
}
于 2014-07-16T22:23:28.937 回答
5

我已经使用以下方法解决了这个问题:

.element:before {
    font-family: "Font Awesome 5 Free" , "CircularStd";
    content: "\f017" " Date";
}

使用字体系列“font awesome 5 free”作为图标,之后,我们必须再次指定我们正在使用的字体,因为如果我们不这样做,导航器将使用默认字体(times new roman 或类似这)。

于 2020-02-05T12:27:32.363 回答
0

您还可以在内容字段中使用图像/图标加文本

例如

p.album-title::after {
  content: url('https://...camera-icon-blue.png') ' View >';
  display: block;
  ...;
}
于 2021-06-21T04:13:30.757 回答