在内联CSS中使用CSS:before和:after伪元素吗?


141

我正在使用内联CSS(即style属性中的CSS )制作HTML电子邮件签名,并且对于是否可以使用:before:after伪元素感到好奇。

如果是这样,我将如何用内联CSS实现类似的东西?

td { text-align: justify; }
td:after { content: ""; display: inline-block; width: 100%; }

8
您不能使用内联样式来定位伪类或伪元素。
大卫说恢复莫妮卡


2
@冠军:不一样的问题,因为伪元素和伪类不是一回事。我在这里写了我自己的答案来阐述。
BoltClock

Answers:


123

您不能为伪元素指定内联样式。

这是因为伪元素像伪类(请参见我对另一个问题的回答)一样,是在CSS中使用选择器作为不能以HTML表示的文档树的抽象来定义的。style另一方面,内联属性是在HTML中为特定元素指定的。

由于内联样式只能在HTML中出现,因此它们仅适用于在其上定义的HTML元素,而不适用于其生成的任何伪元素。

顺便说一句,伪元素和伪类在这方面之间的主要区别在于,在默认情况下继承的属性被继承通过:before:after从发电元件,而伪类样式只是完全不适用。例如,在您的情况下,如果您text-align: justifytd元素放置内联样式属性,则它将被继承td:after。需要注意的是,您不能td:after使用内联样式属性进行声明;您必须在样式表中执行此操作。


37

如上所述:不可能调用css伪类/ -eline内联。我现在所做的是:给您的元素一个唯一的标识符f.ex。id或唯一类。并写一个拟合<style>元素

<style>#id29:before { content: "*";}</style>
<article id="id29">
  <!-- something -->
</article>

笨拙,但内联CSS不是什么?


6
那不是内联CSS。内联CSS需要将style =“”属性传递给各个HTML元素。发送格式化到CSS的CSS到Gmail时通常需要这样做,该CSS会剥离<style>标签中的所有内容。参见此处(zurb.com/ink/inliner.php),了解自动化器
Kez

我认为这是最接近内联伪元素的位置。更重要的是,使用新的scoped样式和:root伪类(这是太酷了)<article><style scoped>:root:before { content: "*";}</style><!-- something --></article>
本J

3
更正:使用:scope伪类:<article><style scoped>:scope:before { content: "*";}</style><!-- something --></article>
Ben J

1
这些东西是非常新的,可能尚未实现,并且可能会更改。在当前的HTML规范(scoped样式)CSS规范(:scope)中。我应该更清楚了。
本J

使用<style> ... </ style>标记称为内部或嵌入式CSS,而不是嵌入式CSS。
詹姆斯·安德森

14

您可以内联使用数据

 <style>   
 td { text-align: justify; }
 td:after { content: attr(data-content); display: inline-block; width: 100%; }
</style>

<table><tr><td data-content="post"></td></tr></table>

2
这将data-content属性打印content为伪元素。它与使用内联CSS创建伪元素无关。
Nils Kaspersson 2014年

4
我来这里是为了寻找如何在内联CSS中应用伪选择器,这个答案向我展示了另一种实现相同目标的方法。内容需要基于大量动态创建的可能选项,因此为每种可能的结果编写单独的CSS选择器堆是不切实际的。
2016年

4
对于寻求将动态内容添加到后续内容的人来说,这实际上是一个很好的答案。可能与该问题无关,但通过Google搜索此解决方案时会显示此问题。
Aleks

请参阅文档
user4642212

8

不,您不能像David Thomas所说的那样,将inline-css中的伪类伪元素作为目标 。欲了解更多详情,请参阅答案由BoltClock伪类

否。style属性仅定义给定HTML元素的样式属性。伪类是选择器族的成员,它们不在属性.....中。

我们也可以为伪元素编写use same

否。style属性仅定义给定HTML元素的样式属性。伪类和伪元素是选择器族的成员,它们不会出现在属性中,因此您不能内联设置它们的样式。


看到我的回答和对这个问题的评论。
BoltClock

是的,不一样。但是它们不能内联使用的原因是对的吗?
冠军

答案是相似的,但问题却大不相同。
BoltClock

6

您不能在内联css中创建伪元素。

但是,如果可以在样式表中创建伪元素,则可以通过以下方式来对其进行内联样式设置:将内联样式设置为其父元素,然后使用Inherit关键字对伪元素进行样式设置,如下所示:

<parent style="background-image:url(path/to/file); background-size:0px;"></p>

<style> 
   parent:before{
      content:'';
      background-image:inherit;
      (other)
   }
</style>

有时这可能很方便。


5

是的,有可能,只需为要在元素之后或之前添加的元素添加内联样式即可。

 <style>
     .horizontalProgress:after { width: 45%; }
 </style><!-- Change Value from Here -->

 <div class="horizontalProgress"></div>

22
这是一个内联样式表。不是内联CSS。
艾格(Esger)'17

4
除了事实,这不能解决实际问题,这个代码是错误的,::after::before伪元素需要content: value否则默认为content:none,其结果基本上没有什么。
zer00ne

使用<style> ... </ style>标记称为内部或嵌入式CSS,而不是嵌入式CSS。
詹姆斯·安德森(James Anderson)


0

如果您可以控制HTML,则可以添加一个实际元素,而不是伪元素。:before和:after伪元素在open标记之后或close标记之前呈现。此CSS的内联等效项

td { text-align: justify; }
td:after { content: ""; display: inline-block; width: 100%; }

将是这样的:

<table>
<tr>
<td style="text-align: justify;">
TD Content
<span class="inline_td_after" style="display: inline-block; width: 100%;"></span>
</td>
</tr>
</table>

记住; 您之前和之后的“实际”元素以及任何带有内联css的元素都会极大地增加页面的大小,而忽略外部css和伪元素使页面加载优化。


0

您可以使用

parent.style.setProperty("--padding-top", (height*100/width).toFixed(2)+"%");

在CSS

el:after{
  ....
  padding-top:var(--padding-top, 0px);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.