jQuery如何改变css伪元素样式

html-css011

jQuery如何改变css伪元素样式,第1张

首先我们看一下css伪元素是什么:

CSS 伪元素用于向某些选择器设置特殊效果。

伪元素有哪些:

:first-line 伪元素:"first-line" 伪元素用于向文本的首行设置特殊样式。

:first-letter 伪元素:"first-letter" 伪元素用于向文本的首字母设置特殊样式。

:before 伪元素:":before" 伪元素可以在元素的内容前面插入新内容。

:after 伪元素:":after" 伪元素可以在元素的内容之后插入新内容。

伪元素例子:

.flow_ball1:after {

content: ""

position: absolute

top: 50%

margin-top: -1px

left: 100%

margin-left: 0.133333rem

width: 1.786667rem

height: 2px

background-color: #ff6600

border-radius: 0.053333rem

在名为flow_ball1的class标签后面添加一道橘色横线(类似于流程图那种)

那么,问题来了,怎么用jquery改变伪元素的样式呢?

答案在这里:

$('.flow_ball1').append("<style>#fafang::after{display:none}</style>")

在CSS里头,counter是个很有意思的功能,最常见得就是如果我们使用list清单,样式选择decimal十进制,当清单变多的时候数字也会跟着增加,底层貌似就是使用counter来做的,也因为counter所产生的数值并不存在于网页的元素内,所以如果我们要在清单元素之外使用,就必须透过::before或::after的content来实现。

counter最的基本用法一定要有一个父元素和子元素(类似list的原理,使用ul包着li),所以长相会类似下面这段html:

在CSS里头,先针对div父元素使用counter-reset:num;进行计数器归零的设置,里面num是计数器累加数值的变数,接着可以在span::before里面看到counter-increment:num;这一段,这段的作用是把num累加上去,预设数值为加1,接着就透过content显示出来。

透过指定一开始counter-reset的起始数值,还有counter-increment累加的间隔数值,就可以做出从某个数值开始或只显示偶数、奇数的效果。

如果要更换数字的样式,也可以透过计数器的第二个设定值list-style-type来更改,下面的例子就是将样式更改为georgian。

除了指定单一个变数外,counter也可以同时指定多个变数,例如下面这段HTML,有三个类别在里面,我分别用span、i和b来分类。

CSS一开始counter-reset可以指定多个变数,透过一个空白字元分隔,如果空白字元后面接着数字则是起始值,没有数字预设为0,当这样设定之后,就可以看到不同类别的数字代号就不同。

如果遇到了巢状结构,需要一层层的展开(例如:1 >1.1 >1.1.1),采用上述的作法可能就会复杂许多,好在counter还提供了另外一个counters的功能,目的就是来解决巢状结构的麻烦事,在开始前可以先看看透过ul和li组合的清单长相:

传统的清单如果将list-style设为decimal,同样可以具备数字接续的功能,但相对来说要做一些特殊变化就办不到了。

透过content和counters的搭配,我们就可以告别预设值的困扰,甚至可以在不使用清单ul和li的状况下,实现和清单一模一样的效果,举例来说,我们纯粹透过div模拟一个清单的长相(状态仍然必须是有父元素和子元素的概念),里面的样式b就等于是ul,样式a就等于是li:

由于b的外层没有东西,所以一开始要把body和b都进行counter reset的动作,接着透过counters的使用,让计数器的数值可以一个接着一个放进去,如此一来就可以做到原本清单不容易实现的效果了。

了解原理之后,透过 ::before 和 ::after 的交互应用,就可以做出颇具特色的列表效果。

CSS伪元素(pseudo

elements)不是DOM元素,因此你无法直接选择到它们。

假设有如下HTML代码:

<div

class="techbrood"

id="td_pseudo">techbrood

introduction</div>

和CSS代码:

.techbrood:before

{

width:

0

}

现在你想在某个元素的click事件中动态的把techbrood:before的width属性设置为100%,

有两个方法,一个是添加新的样式:

$('head').append("<style>.techbrood::before{

width:100%

}</style>")

(注意该方法将影响所有的class为techbrood的元素)

另外一个方法是为该元素添加新类,并通过设置新类的属性来达到改变伪元素属性的效果:

.techbrood.change:before{

width:

100%

}

jQuery代码:

$('#td_pseudo').addClass("change")