js如何动态选择和操作 CSS 伪元素,例如 ::before 和 ::after

更新日期: 2021-10-14阅读: 1.6k标签: 伪元素

什么是伪元素

伪元素用于向某些选择器设置特殊效果。
已存在元素是指dom中存在的,伪元素则是虚拟的一种,样式也是给这个虚拟的元素使用的。
比如伪元素 :before和:after,用于在css渲染中向元素的头部或尾部插入内容,它们不受文档约束,也不影响文档本身,只影响最终样式。这些添加的内容不会出现在DOM中,仅仅是在CSS渲染层中加入。它不存在于文档中,所以JS无法直接操作它。而jquery的选择器都是基于DOM元素的,因此也并不能直接操作伪元素。


哪些是伪元素

  • :first-letter:向文本的第一个字母添加特殊样式。 
  • :first-line: 向文本的首行添加特殊样式。 
  • :before:在元素之前添加内容。 
  • :after:在元素之后添加内容。 
  • ::placeholder:匹配占位符的文本,只有元素设置了placeholder属性时,该伪元素才能生效。(只支持双冒号的形式)。
  • ::selection:CSS伪元素应用于文档中被用户高亮的部分(比如使用鼠标或其他选择设备选中的部分)。(只支持双冒号的形式)。 
  • ::backdrop(处于试验阶段):用于改变全屏模式下的背景颜色,全屏模式的默认颜色为黑色。(只支持双冒号的形式)。


更改伪元素的样式

1.更换class来实现伪元素属性值的更改:

// CSS代码
.red::before { content: "red"; color: red; }
.green::before { content: "green"; color: green; }

// html代码
<div class="red">测试测试</div>

// jQuery代码
$(".red").removeClass('red').addClass('green');

2.使用CSSStyleSheet的insertRule来为伪元素修改样式:

// HTML代码
<div class="red">测试测试</div>

//js代码,支持IE
document.styleSheets[0].addRule('.red::before','content: "red";color: red;');
//支持非IE的现代浏览器
document.styleSheets[0].insertRule('.red::before { content: "red";color: red; }', 0);

addRule说明:

document.styleSheets[0].addRule('.className'或‘#ID’ +‘::after’,css样式字符串拼接).

3.在标签中插入

// HTML代码
<div class="red">测试测试</div>

//js代码
var style = document.createElement("style");
document.head.appendChild(style);
sheet = style.sheet;
//兼容IE浏览器
sheet.addRule('.red::before','content: "red";color: red;'); 
//支持非IE的现代浏览器
sheet.insertRule('.red::before { content: "red";color: red; }', 0);

// 亦可以使用 JQuery:
$('<style>.red::before{content: "red";color:red;}</style>').appendTo('head');


修改伪元素的content的属性值

使用CSSStyleSheet的insertRule来为伪元素修改样式

var latestContent = "新修改的内容";
// 兼容IE浏览器
document.styleSheets[0].addRule('.jadeId::before','content: "' + latestContent + '"');
// 支持非IE的现代浏览器
document.styleSheets[0].insertRule('.jadeId::before { content: "' + latestContent + '" }', 0);

注意

  • 伪元素的 content 属性很强大,可以写入各种字符串和部分多媒体文件。但是伪元素的内容只存在于CSS渲染树中,并不存在于真实的DOM中。所以为了seo优化,最好不要在伪元素中包含与文档相关的内容。

  • 修改伪元素的样式,建议使用通过更换class来修改样式的方法。因为其他两种通过插入行内CSSStyleSheet的方式是在JavaScript中插入字符代码,不利于样式与控制分离;而且字符串拼接易出错。

  • 修改伪元素的content属性的值,建议使用利用DOM的 data-* 属性来更改。


链接: https://fly63.com/article/detial/10733

伪元素能做好多事

我们经常遇到图标和文字挨着,不管图标怎么调都很难与文字和谐共处一行,很难实现垂直对齐。这个古老的话题有挺多解决方式的,很多人借助复杂的position: absolute硬调,挺麻烦的,还要写很多代码,不过使用伪元素的话,几行就可以搞定啦!

css伪元素::after和::before,及图标字体的使用

css中的::after和::before已经被大量地使用在我们日常开发中了,使用他们可以使我们的文档结构更加简洁。但是很多人对::after和::before仍不是特别了解,究竟他们是做什么的?如何使用他们?什么时候应该使用他们?

你可能不知道的CSS 计数器

CSS 里面的伪元素其实是非常好用的,但是经常容易被大家忽略,伪元素里面常用到的 content 属性,可能现在很多人仅仅以为 content 属性的值只支持字符串,除了字符串外常用到的还有 uri、counter ,今天所要介绍的就是 conter(计数器)。

css ::marker伪元素,修改li的项目符号颜色,字号字体

现在,在使用 <ul> 或 <ol> 时自定义数字或项目符号的颜色,大小或类型很简单。利用css的:marker伪元素,我们可以很轻易的更改内容以及项目符号和数字的某些样式。::marker伪元素它作用在任何设置了display:list-item的元素或伪元素上

9 个你不知道的 CSS 伪元素

CSS 伪元素是一项强大的功能,它允许您为所选元素的特定部分设置样式,而无需额外的 JavaScript 代码。虽然许多开发人员都熟悉常用的伪元素,例如::before和 ::after,但还有一些其他元素经常被忽视或未得到充分利用

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!