我用CSS3设计了一个气球形状。
JS Fiddle示例
它有一个由三角形构成的部分。
:after {
content: "";
}
我需要用Jquery将三角形左右移动并修改left CSS参数。 我知道无法选择DOM之外的伪元素,但是否有另一种方法使用JS更改:after样式?
是的,我们可以在内部放置另一个div。
<div class="pop"><div class="arr"></div></div>
但是它很丑
我用CSS3设计了一个气球形状。
JS Fiddle示例
它有一个由三角形构成的部分。
:after {
content: "";
}
我需要用Jquery将三角形左右移动并修改left CSS参数。 我知道无法选择DOM之外的伪元素,但是否有另一种方法使用JS更改:after样式?
是的,我们可以在内部放置另一个div。
<div class="pop"><div class="arr"></div></div>
但是它很丑
有一种更简单的方法:只需将伪元素的content
属性值设置为attr(some-attribute-name)
,它将使用父元素上HTML属性的值作为伪元素的内容。然后,您可以在父元素上使用setAttribute()
方法动态更改该值。以下是模拟示例,演示此方法的用法。我还写了一个博客文章,其中包含详细信息和实时示例代码。
CSS
#SomeElement:after {
content: attr(some-attribute-name);
}
HTML
<div id="SomeElement" some-attribute-name="Pseudo content here!"></div>
JavaScript (更改伪内容)
var someElement = document.getElementById('SomeElement');
someElement.setAttribute('some-attribute-name', 'New pseudo content here!');
您可以在头部动态插入CSS样式,然后进行修改:
$("<style type='text/css' id='dynamic' />").appendTo("head");
$('.pop').click(function(e){
$("#dynamic").text(".pop:after{left:" + e.offsetX+ "px;}");
});
这是一个演示
根据相关问题所述,您无法选择伪元素。因此,我建议定义附加的CSS类,并使用jQuery向气球添加类。例如,使用以下类:
.pop.right:after {
left: 80%;
}
然后像这样应用:
$('div.pop').addClass('right');
工作的jsFiddle:http://jsfiddle.net/nrabinowitz/EUHAv/2/