使用原生js来控制、修改CSS伪元素的方法总汇, 例如:before和:after

时间: 2018-01-31阅读: 7270标签: 元素

在网页中,如果需要使用辅助性/装饰性的内容的时候,我们不应该直接写在html中,这样会影响真正的内容,这就需要使用伪元素了,这是由于css的纯粹语义化是没有意义的。在使用伪元素的时候,会发现js并不真能直接控制它,这篇文章主要就介绍下如果间接的控制、修改css中伪元素的方法。


例如,我的样式表有以下规则,需要把伪元素的content内容进行修改

<style>
    p:after{content:'after伪元素'}
</style>
<p id="dome">正文内容</p>


方法一:样式覆盖

<script>
document.onclick=function(){
	var sty=document.createElement('style');
	sty.innerText='p:after{content:\'修改一下\'}';
	document.body.appendChild(sty);
};
</script>

我们直接创建一个style的标签。它的优缺点:

优点:任何字符串都可以动态插入到样式中。
缺点:原始风格不改变,只是重写; 反复使用document.createElement()可以使DOM量增加


方法二:class名重写

添加一个重写的样式:

p.special:after {content: "修改一下";}

然后在js中这样操作它:

<script>
document.onclick=function(){
	var p=document.getElementById('dome');
	p.setAttribute("class","special");
};
</script>

我们使用setAttribute()能轻松地添加或删除这个类。这样实现的优缺点:

优点:易于实现; 能通过js迅速改变多种风格; 能使用样式在js中分离出去。
缺点: CSS必须预先写好,所以伪元素中内容不是完全动态的


方法三:使用css中attr()

我们可以在css中使用sttr()来读取一个特定的DOM属性,如果你浏览器支持伪元素就会支持css中使用attr()。

<style>
p:after {
	content: attr(data-after);
}
</style>

<p id="dome">正文内容</p>
	
<script>
var p=document.getElementById('dome');
p.setAttribute("data-after","我是后缀");//初始值
document.onclick=function(){
	p.setAttribute("data-after","修改一下");
};
</script>

在我们想换的内容不确定的时候,使用这个方法是非常值的推荐的。它的优缺点如下:

优点:不会创建无尽的额外风格
缺点: attr()在CSS中只能应用于内容字符串,而不能使用URL或RGB颜色


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/409

CSS高度坍塌和外边距溢出问题及解决方法

高度坍塌:父元素 div 未设置高度,子元素全部设置浮动(float: left | right;),浮动元素 脱离文档流 且 不占页面空间,由于父元素为设置高度,高度靠内部子元素撑开,而今子元素全部脱离文档流,所以此时父元素的高度为 0

CSS隐藏元素的五种方法

用css隐藏页面元素有许多种方法。1、opacity:0;2、visibility:hidden;3、diaplay:none;4、position:absolute;5、clip-path。大家可以根据具体情况选择适合的方法来隐藏元素

HTML中通过CSS方式隐藏元素方法汇总

这两种方式的区别是: display 设置为 none之后, 该元素不占用文档流,visibility 设置为 hidden之后, 该元素仍然占用文档流, 只不过是看不见了而已

如何用 CSS 强调标记文本元素?

当我们在 Web 上做文本编辑器时,最常见的一个场景便是和文字样式打交道了。比如像语文课本那样需要在每篇文章要学习的生字上标上一个小黑点,这个时候就该用到 CSS 中 text-emphasis-style 这个属性。

子元素margin-top导致父元素移动的问题

今天在修改页面样式的时候,遇到子元素设置margin-top 但是并没有使得子元素与父元素之间产生间隔,而是作用在了其父元素上,导致父元素产生了一个margin-top 的效果。

如何取消inline-block元素的空隙?

最近做移动端页面时,经常会用到inline-block元素来布局,但无可避免都会遇到一个问题,就是inline-block元素之间的间隙。这些间隙会导致一些布局上的问题,需要把间隙去掉

css position absolute相对于父元素的设置方式

大家知道css的position absolute默认是根据document来设置的,比如position:absolute后设置left:0;top:0这时候元素会显示到页面的左上角。有时候我们需要在父元素的容器内设置相对的绝对位置

html元素隐藏的实现方案

相信小伙伴们都被问过这样一个问题:让一个元素隐藏起来,有多少种方法呢?常规来讲,我们有三种方法display: none、opacity: 0和visibility: hidden ,基于display: none的副作用,已经是个被说烂的问题,主要是有以下缺点:

javascript如何判断元素是否存在?

JavaScript中可以通过theForm、theForm.periodPerMonth、getElementById等方法判断元素是否存在。也可以使用Jquery的length属性来判断。

精确获取页面元素的位置

现在网上最流行方法是John Resig在《Pro JavaScript techniques》提出的offset大法,累加元素offsetParent的offsetLeft和offsetTop一直到DOM的顶层。

点击更多...

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