例子:
当鼠标悬停在 LI 上时,LI 的顶部/底部边框变为透明(由 background-color 代替)。
但是,前一个 LI 的底部边框和下一个 LI 的顶部边框也必须是透明的。这可以用 CSS 完成吗?
例子:
当鼠标悬停在 LI 上时,LI 的顶部/底部边框变为透明(由 background-color 代替)。
但是,前一个 LI 的底部边框和下一个 LI 的顶部边框也必须是透明的。这可以用 CSS 完成吗?
您不能选择上一个兄弟,但您可以尝试一些技巧来获得所需的效果。
像这样:
在除第一个列表项之外的每个列表项上仅使用border-top
& aninset
box-shadow
以模仿蚀刻的顶部边框。
li{
border-top: 1px solid #999;
box-shadow: inset 0 1px 0 #fff;
padding: 10px;
}
li:first-child{
border-top: 0;
box-shadow: none;
}
hover
然后为当前项目和紧随其后的项目删除它。
li:hover, li:hover + li {
border-color: transparent;
box-shadow: none;
}
这适用于所有支持的浏览器box-shadow
(即,除了 IE8 和更旧且功能较弱的移动浏览器之外的所有浏览器)。
在 IE8 中可以通过使用给定的绝对定位伪元素来实现相同的效果top: 0; left: 0; height: 1px; width: 100%; background: #fff;
(甚至在 IE7 中,通过将子项添加到列表项而不是伪元素)。但是,我认为这是矫枉过正,特别是因为原始方法优雅地降级了。
我能做的最好的是下一个,但不是上一个:
上面使用了 CSS+
选择器,它选择下一个兄弟。
要设置以前的样式,li,
您可能需要 JavaScript。
对于 jQuery 解决方案,这可能有效:http: //jsfiddle.net/JUmHG/5/
当 CSS4 出现时(不要屏住呼吸),您将能够做到这一点(主题选择器):
$li + li:hover,
li:hover,
li:hover + li {
...
}
查询:
$('li').hover(function(){
$(this).prev().addClass('hide');
},function(){
$( 'li').removeClass('hide');
});
CSS:
.hide{
border-color: transparent;
}
为了达到上述目的:
<li>
只为除第一个元素之外的所有元素提供border-top 。
li{ border-top: 1px solid #fff; padding: 10px;}
要从第一个<li>
元素中删除边框,请使用:
li:first-child {border-top: none;}
添加悬停状态css,如下所示:
li:hover{ border-color: transparent; background: #ccc; border-radius: 7px; }
在当前元素悬停时移除下一个兄弟<li>
元素的边框<li>
:
li:hover + li { border-top: none; }