使用jQuery动态定位CSS语音气泡的三角形(:在类之前和之后)

时间:2013-02-21 17:47:02

标签: jquery css pseudo-element

我用三角形"尖端"创建了一个纯CSS的语音泡泡。完成后使用"玩一个零大小的div的4个边框"特技。到目前为止一切都很好。

但我还需要动态调整三角形的位置(相对于包含单词的主要的retangular div)。

图示:

http://www.designwalker.com/img/speech_bubble/speech_bubble10.jpg(忽略色差,第1和第2个气泡中​​三角形的位置不同)。

问题在于三角形(及其边界)通常使用:在主气泡的类之前和之后完成。而且似乎在jQuery(或任何javascript API)中没有(简单)方法来操纵:class和before之后的CSS属性。

有解决方案吗?

我很确定可以做到这一点,因为当用户将鼠标悬停在右侧的自动收报机行上时,Facebook似乎可以毫无困难地将三角形动态定位到任何想要的位置(取决于屏幕折叠和其他因素)。

我在这里搜索并找到了向div添加动态类的解决方案,但它似乎是不切实际的,因为那时会有许多唯一的类,每个类都有不同的偏移值。 (从0像素到许多像素)

谢谢!

安德鲁

P.S:

顺便说一下,我进一步看了Facebook,他们可能正在玩一些背景图片精灵技巧。但是我花了很多时间"完善"我的泡泡使用"玩一个零大小的div的4个边框"伎俩和我真的犹豫重新调查Facebook如何做到这一点,更不用说我必须尽快交付网站..... :-(

1 个答案:

答案 0 :(得分:3)

伪元素不能被Javascript操纵,因为它们没有正确地暴露给DOM(我们以前称之为Shadow DOM,直到该术语引用了使用Javascript操纵隐式DOM元素的方式)。

您可以做的是向包含元素添加类,这些类将通过其他规则影响其位置。 something very similar有一个很好的例子(它使用<b>元素而非:before:after来实现IE6支持 - 但原则是相同的,因为{{1}在StubornellaOOCSS库中永远不会操纵元素并从父母那里推断出它的样式。 code非常有用,因为它在父元素上显示了一个类,用于指示儿童装饰元素应该如何定位。

更新:艰苦的解释

假设提示的显示方式是好的,编写一个单独的CSS规则来定义它们的每个不同位置。这里我假设<b>元素正在创建提示并且已经绝对位于底部,我使用了left位置。你可以使用你想要的任何选择器或定位技巧而不是这些。

:after

然后你需要做的就是改变位置是改变'bubble'元素的类 - 从而避免试图影响.bubble_left:after { left: 0; } .bubble_mid-left:after { left: 25%; } .bubble_mid-right:after { left: 75%; } .bubble_right:after { left: 100%; } 元素的CSS属性的问题。