悬停边界位置

时间:2014-07-17 10:15:03

标签: html css

在以下代码中,我设置了ul的底部边框。将鼠标悬停在ul上的项目上时,我想在ul边框上准确显示底部边框或悬停项。我无法设置两个边框(ulul项目)的位置,以便它们在悬停时相互依赖。

我尝试过使用绝对位置和线高,但无法取得多大成功。

这就是我想要的:

enter image description here

以下是代码:

HTML:

<div class="box">
    <ul>
        <li><a href="#">test 1</a></li>
        <li><a href="#">test 2</a></li>
    </ul>
</div>

CSS:

ul{
    list-style: none;
    padding: 0 0 10px;
    margin: 0;
    border-bottom: 5px solid green;
    overflow: hidden;
}

ul li{
    float: left;
    margin-left: 20px;
}

a{
    text-decoration: none;
    display: block;     
}

a:hover{
    border-bottom: 5px solid red;    
}

演示: http://jsfiddle.net/nNvfy/

6 个答案:

答案 0 :(得分:11)

您希望定位ulli - 将子项li的底部偏移到边框的宽度,同时将其设置为transparent然后使用li:hover事件/选择器将broder颜色设置为红色。

Demo Fiddle

使用以下CSS:

ul {
    list-style: none;
    margin: 0;
    border-bottom: 5px solid green;
    position:relative;
    padding:0;
}
ul li {
    padding:10px 10px;
    margin-left: 20px;
    display:inline-block;
    position:relative;
    bottom:-5px; /* <-- offset bottom of li by border width so it overlaps ul green border */
    border-bottom: 5px solid transparent; /* add border, make transparent so it doesnt 'jump' on hover */
}
a {
    text-decoration: none;
    display: block;
}
li:hover {
    border-color:red; /* <-- use the li hover event (not a hover) to color the border */
}

答案 1 :(得分:4)

你去,工作版: http://jsfiddle.net/hKVp6/

ul{
    width: 100%;
    float: left;
    list-style: none;   
    margin: 0;
    border-bottom: 5px solid green;
}

li{
    float: left;
    margin-left: 20px;
    padding: 0 0 10px;
}

li:hover {
    border-bottom: 5px solid red; 
    margin-bottom: -5px; /* same as bottom border */    
}

li a{
    text-decoration: none;
    display: block;     
}

答案 2 :(得分:3)

派对有点晚了,但这里有一个没有负值且使用positions的解决方案。基本上我只使用background colors

.box{
    background:green;
    padding-bottom:5px;
}

ul{
    list-style:none;
    margin:0;
    padding:0 0 0 10px;
    background:white;
}

ul li{
    display:inline-block;
    vertical-align:top;
    margin-left: 20px;
}

ul li a{
    background:white;
}

li a:hover{
    border-bottom:5px solid red;
}

JSFiddle

答案 3 :(得分:1)

你可以这样试试:  的 DEMO

<强> CSS:

ul {
    list-style: none;
    padding: 0 0 0px;
    margin: 0px;
    border-bottom: 5px solid green;   
    position:absolute;
    width:100%;
}
ul li {
    float: left;
    margin-left: 20px;
    border-bottom: 5px solid transparent;
    margin-bottom:-5px;
    z-index:999;
}
a {
    text-decoration: none;
    display: block;
}
ul li:hover {
    z-index:9999;
    border-bottom: 5px solid red;
}

答案 4 :(得分:1)

添加5px transparent border并在red上设置hover。试试这段代码

<div class="box">
    <ul class="clearfix">
        <li><a href="#">test 1</a></li>
        <li><a href="#">test 2</a></li>
    </ul>
</div>

.clearfix:before,
.clearfix:after{
    display: table;
    content: "";
    line-height: 0;
}
.clearfix:after{
    clear: both;
}

ul{
    list-style: none;
    padding: 0;
    margin: 0;
    border-bottom: 5px solid green; 
}

ul li{
    float: left;
    margin-left: 20px;
    padding: 0 0 10px;
    border-bottom: 5px solid transparent;
    margin-bottom: -5px;
}

a{
    text-decoration: none;
    display: block;    
}

li:hover{    
   border-color: red;
}

选中 DEMO

答案 5 :(得分:0)

我为您的解决方案提供了解决方法。不要将边框设置为ul,而是插入带有边框的div - 元素。所以你不依赖于列表。

DEMO Fiddle

HTML:

<div class="box">
    <ul>
        <li><a href="#">test 1</a></li>
        <li><a href="#">test 2</a></li>
    </ul>
    <div id="border"></div>
</div>

CSS:

.box {
    width: 500px
}
#border {
    width: 100%
    position: absoulte;
    margin-top: -15px;
    border-bottom: 5px solid green;
}
ul{
    list-style: none;
    padding: 0 0 10px;
    margin: 0;
    overflow: hidden;
}

ul li{
    float: left;
    margin-left: 20px;
    border-bottom: 5px solid green;
}
ul li:hover {
     border-bottom: 5px solid red;
}

a{
    text-decoration: none;
    display: block;     
}