css 选择器 如何选择前一节点?

问题1:组合类选择器都是选择后面的节点,如何选择前面的?

<p>
    <a href="https://segmentfault.com" class="p1">This is a paragraph.1</a>

    <a href="https://segmentfault.com" class="p2">This is a paragraph.2</a>
</p>
.p1:hover+.p2 {
                outline: 10px double purple;
            }
            
.p2:hover~.p1 {
                outline: 10px double purple;
            }

其实想做就是:鼠标悬停p1,给p2一个框; 鼠标悬停p2,给p1一个框。 但,后半句无效。
组合选择器都试了,它们全是向后选择节点的,没法向前。。。?

问题2:如何选择不同父的两个/多个元素?
还是上例,我开始的HTML是这样写的

<div>    
    <p>
        <a href="https://segmentfault.com" class="p1">This is a paragraph.1</a>
    </p>

    <p>
        <a href="https://segmentfault.com" class="p2">This is a paragraph.2</a>
    </p>
</div>

后来发现,组合选择都是兄弟 后代,像上面分属于两个<p>的,貌似没啥关系,怎样实现我问题1的目的?

阅读 5.5k
3 个回答

可以使用jQuery的选择器,用js代码去实现;
给P下的a标签增加mouseover事件,在里面切换class
如 增加一个active类,默认赋给某一个a标签

.active{border:1px solid #ccc}
$('p a').mouseover(function(e){
    $('p a').toggleClass('active'); 
})

p:nth-child(1) p:nth-child(2) p:first-child p:last-child

css 并没有提供前置选择器, 后面的去设置前面的元素将可能会引发重排

所以使用 js 吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进