2013-02-16 96 views
1

在下面的代码中,我有三个悬停文本和世界“hello”。 “hello”的前两个亮点部分,我希望第三个部分突出显示“hello”。在第三个范围中包装所有前两个跨度不起作用,我理解为什么。我知道我不能重叠HTML标签,并且我不知道嵌套是否是解决方案。如何避免重叠HTML标记以突出显示文字

你会如何设置这样的第三个悬停工作?

http://jsfiddle.net/CAWhP/3/

这里的HTML:

<div id="test1"> highlight hel in hello</div> 

<div id="test2"> highlight lo in hello</div> 

<div id="test3"> highlight all of hello</div> 

<span class="testspan1"> hel</span><span class="testspan2">lo </span> 

这里的CSS:

#test1:hover ~ .testspan1{ 

    background: red; 
} 

#test2:hover ~ .testspan2{ 

    background: red; 
} 
#test3:hover ~ .testspan3{ 

    background: red; 
} 

回答

1

选择相关的元素

#test3:hover ~ span{ 
    background: red; 
} 

Demo

要不然你也可以使用这个

#test3:hover ~ span.testspan1, #test3:hover ~ span.testspan2 { 
    background: red; 
} 

Demo 2

+0

这工作,谢谢。 – 2013-02-16 16:26:17

+0

@HipppHipp你欢迎:) – 2013-02-16 16:28:05

0

这里是一个解决办法:JSFiddle

#test3:hover ~ .testspan1 { 

background: red; 

} 

#test3:hover ~ .testspan2 { 

background: red; 

} 

你也可以用逗号分开这些类,如#test3:hover ~ .testspan1, #test3:hover ~ .testspan2。如果您希望两个跨度具有相同的样式,那么这将起作用。

+0

这工作,谢谢。 – 2013-02-16 16:26:33

1

不知道为什么你要做到这一点,但解决问题,我想你可以这样做:

#test3:hover ~ .testspan1, 
#test3:hover ~ .testspan2 { 
    background: red; 
} 

完整和更短的版本:

由于所有的规则适用相同的属性,你可以缩短你的完整的CSS来此:

#test1:hover ~ .testspan1, 
#test2:hover ~ .testspan2, 
#test3:hover ~ .testspan1, 
#test3:hover ~ .testspan2 
{ 
    background: red; 
} 

Working example

+0

克里斯,我创建了一个网站,我可以突出显示一些文本,右键单击并添加一个div。当我将鼠标悬停在div上时,它会通过插入HTML标记来引用正确的CSS来突出显示文本。问题是,当我突出显示同一文本的一部分时,它会创建重叠标记。 – 2013-02-16 16:24:47

+0

另外,您的解决方案也适用。谢谢。 – 2013-02-16 16:30:45