JavaScript修改CSS伪元素:after和:before的样式

CSS伪元素:before和:after可以实现很多有趣的功能,我们项目中使用的ionicframework框架的ionic.css文件中大量使用到了这2个伪元素。伪元素可以用来定义样式,但是和正常的dom元素不同,我们没有办法选中这些伪元素,也就不能像普通元素那样来修改它。

<head>
	<style>
		.content{
			margin-top:100px;
		}
		.content:before{
			content:'target-before';
			color:#33B5E5;
			position:relative;
			top:-10px;
		}

		.content:after{
			content:'target-after';
			color:#33B5E5;
			position:relative;
			top:10px;
		}
	</style>
</head>

<body>

	<button  style="width:50px;height:25px;background-color:#f00;color:#fff;" onclick="changeColor('f00');">red</button>
	<button  style="width:50px;height:25px;background-color:#0f0;color:#fff;" onclick="changeColor('0f0');">green</button>
	<button  style="width:50px;height:25px;background-color:#00f;color:#fff;" onclick="changeColor('00f');">blue</button>

	<div class="content">
		I am a programmer.
	</div>
</body>

这段HTML中我们用到了:before和:after在content前面和后面添加了target-before和target-after。如果我们想实现这个功能:点击按钮的时候,将target-before和target-after变成相应的颜色。这个时候我们就需要修改伪元素中定义的样式了。

我们没有办法直接选中伪元素来修改它的样式,只能是通过新增伪元素来覆盖之前伪元素的样式。

function changeColor(colorRGB)
{
	$("<style type='text/css' id='dynamic-before' />").appendTo("head");
	$("<style type='text/css' id='dynamic-after' />").appendTo("head");

	$("#dynamic-before").text(".content:before{color:#" + colorRGB+ ";}");
	$("#dynamic-after").text(".content:after{color:#" + colorRGB+ ";}");
}

这段代每次点击按钮的时候,我们都会追加:after和:before样式(改变文字颜色),这样可以实现改变伪元素样式的目的。

上面这种做法直接将css写在了js文件中,一般不是我们推荐的做法。我们可以预先将需要的样式定义在css文件中,然后在js中通过修改class来实现匹配新的样式。

<head>
	<style>
		.content{
			margin-top:100px;
		}
		.content:before{
			content:'target-before';
			color:#33B5E5;
			position:relative;
			top:-10px;
		}

		.content:after{
			content:'target-after';
			color:#33B5E5;
			position:relative;
			top:10px;
		}

		/****新增伪元素样式,用来覆盖原有的样式**********/
		.content.red:before{
			color:#f00;
		}
		.content.red:after{
			color:#f00;
		}
		.content.green:before{
			color:#0f0;
		}
		.content.green:after{
			color:#0f0;
		}
		.content.blue:before{
			color:#00f;
		}
		.content.blue:after{
			color:#00f;
		}

	</style>

	<script>

	$(function(){

		$("button").click(function(){
			var cls = $(this).text();
			$('.content').removeClass().addClass('content ' + cls);
		});

	})

</script>
</head>

<body>

	<button  style="width:50px;height:25px;background-color:#f00;color:#fff;">red</button>
	<button  style="width:50px;height:25px;background-color:#0f0;color:#fff;">green</button>
	<button  style="width:50px;height:25px;background-color:#00f;color:#fff;">blue</button>

	<div class="content">
		I am a programmer.
	</div>
</body>

还有一点值得注意:如果我们只是需要修改伪元素的content属性,那么可以有更简单、优雅的实现方式。可以使用attr函数,伪元素的content属性支持这个方法。

<style>
.ribbon:before {
     display: block;
     content: attr(ribbon);
     background: #eee;
}

.ribbon:after {
     display: block;
     content: " ";
     border-left: 5px dotted transparent;
     border-top: 5px solid #ccc;
     height: 0;
     width: 0;
}

/*** Non-Functional Apperance Styles ***/
div.ribbon { margin: 20px; float: left; font-size: 11px; font-family: Arial; }
div.ribbon:before { padding: 2px 3px; }

</style>

<script>
	window.onload = function(){
		document.getElementById('attrText').addEventListener('keyup', function(){
			document.getElementById('ribbon').setAttribute('ribbon', this.value);
		});
	}

</script>

<body>
<div>ribbonElement.setAttribute('ribbon', <input id="attrText" type="text"/>)</div>

<div id="ribbon" class="ribbon" ribbon="I am a CSS Ribbon"></div>

</body>

参考文章:

http://www.28im.com/css/a937345.html

http://www.backalleycoder.com/2012/08/09/mvcr-minimum-viable-css-ribbon/

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-22 21:26:26

JavaScript修改CSS伪元素:after和:before的样式的相关文章

用CSS伪元素制作箭头

现在让我们开始制作箭头吧! 在开始前,你要知道如何用CSS去画一个三角形,如果还不清楚可以看看这里纯CSS画各种图形 我们用到两个CSS伪元素,before和after,它们属于行内元素,但可以用display来改变,before和after是在CSS2的新特性(现在已经老了),浏览器对其兼容性还未了解. 实现代码如下: 1 <!--CSS样式,在项目中可以把相同的属性与属性值对写在一起,这里是方便学习--> 2 <style> 3 .divtest{ 4 position: ab

js如何控制css伪元素内容(before,after)

原文:js如何控制css伪元素内容(before,after) js如何控制css伪元素(before,after) @(CSS 笔记)[伪元素|css3]曾经遇到的问题,在对抗UC浏览器屏蔽需要把内容输出到css 伪元素中输出.有个疑问如何用js控制它.于是在segmentfault提问,如下是对问题的整理: 如何用js控制css伪类after 简单粗暴的方式: 简单粗暴的方式,直接在html中添加样式覆盖掉之前样式规则 <style> p:after{content:'我是后缀'} <

javascript 修改css样式

abc.css CSS code .class1     {    width:10px;    background-color: red;    } HTML code <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><link rel="stylesheet" type="text/css" href

CSS伪元素before和after

今天发现很多国外的网站和框架设计都用到了before和after,之前使用的比较少,今天试了下觉得还是很有意思的~ 说明 1. :before 和 :after将在内容元素的前后插入额外的元素::before将会在内容之前"添加"一个元素而:after将会在内容后"添加"一个元素.在它们之中添加内容我们可以使用content属性. 2. :before 和 :after发布于CSS2.1, 在css3中修订后伪元素使用::,伪类使用:, 因而形式为:: before

jQuery如何改变css伪元素样式

首先我们看一下css伪元素是什么: CSS 伪元素用于向某些选择器设置特殊效果. 伪元素有哪些: :first-line 伪元素:"first-line" 伪元素用于向文本的首行设置特殊样式. :first-letter 伪元素:"first-letter" 伪元素用于向文本的首字母设置特殊样式. :before 伪元素:":before" 伪元素可以在元素的内容前面插入新内容. :after 伪元素:":after" 伪元素

CSS——伪元素

CSS伪元素 伪元素的语法: selector:pseudo-element {property:value;} 作    用 添加特殊样式 :first-line 伪元素 "first-line" 伪元素用于向某个选择器中的文字的首行添加特殊样式: p{font-size: 12pt}p:first-line{color: #0000FF;font-variant:small-caps;}<p>Some text that ends up on two or more l

css 伪元素 :hover :active :before :after :visited :link :focus ...

CSS 伪元素 所有CSS伪类/元素 选择器 示例 示例说明 :link a:link 选择所有未访问链接 :visited a:visited 选择所有访问过的链接 :active a:active 选择正在活动链接(点击后的效果) :hover a:hover 把鼠标放在链接上的状态 :focus input:focus 选择元素输入后具有焦点 :first-letter p:first-letter 选择每个<p> 元素的第一个字母 :first-line p:first-line 选择

CSS伪类与CSS伪元素的区别及由来

关于两者的区别,其实是很古老的问题.但是时至今日,由于各种网络误传以及一些不负责任的书籍误笔,仍然有相当多的人将伪类与伪元素混为一谈,甚至不乏很多CSS老手.早些年刚入行的时候,我自己也被深深误导,因为论坛里的帖子大多不关心这种概念的细微差别,即使有人出来说一句:"这两个是不同的",也只是被更多的帖子淹没掉而已.所以觉得有必要写下这些我所知的部分,这里着重写的是为什么这两者不同,以及一些平时容易错过的细节. 无论是伪类还是伪元素,都属于CSS选择器的范畴.所以它们的定义可以在CSS标准

用JavaScript修改CSS属性的代码

用JavaScript修改CSS属性的代码 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-06我要评论 这篇文章主要介绍用原生的javascript修改CSS属性的方法,需要的朋友可以参考下 用JavaScript修改CSS属性 只有写原生的javascript了. 1.用JS修改标签的 class 属性值: class 属性是在标签上引用样式表的方法之一,它的值是一个样式表的选择符,如果改变了 class 属性的值,标签所引用的样式表也就更换了,所以这属于第一种修改方法. 更