Div没有正确显示悬停功能

时间:2013-08-27 22:41:43

标签: css html

我在一个包含div的内部有两个div。

两者中的第一个将使用单词作为菜单项,第二个将保留背景颜色。

我为背景创建了一个悬停样式,当菜单项被鼠标悬停时,它将改变该div的不透明度。

我的问题是只有当鼠标位于div的边缘时才会启用悬停。只要我的鼠标稍微移动到div的内部,它就会恢复原来的不透明度。

我的风格:

.menuItemBG {
    width:100%;
    text-align: center;
    background-color:#4281b6;
    height:100%;

    /* These three lines are for transparency in all browsers. */
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=10)";
    filter: alpha(opacity=10);
    opacity:.1;
    position: absolute;
}
.menuItemBG:hover {
    width:100%;
    text-align: center;
    background-color:#4281b6;
    height:100%;

    /* These three lines are for transparency in all browsers. */
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
    filter: alpha(opacity=20);
    opacity:.2;
    position: absolute;
}
.menuItemTitle{
    position:relative;
    color:#000;
    line-height: 27px;
    font-size: 14px;
    margin-left: 20px;
}

HTLML:

<div style="position:relative; width:208px; height:30px;">
    <div class="menuItemBG"></div>
    <div class="menuItemTitle">Test Item</div>
 </div>

似乎无法查明我的错误。

1 个答案:

答案 0 :(得分:2)

当您将鼠标悬停在menuItemTitle上时,您不再悬停在menuItemBG上,因为他们是DOM中的兄弟姐妹。您可以将:hover切换到包含它们的div,然后将样式应用于menuItemBG。如果你给包含div的类menuItem,你可以这样做:

.menuItem:hover .menuItemBG {
    /* These three lines are for transparency in all browsers. */
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
    filter: alpha(opacity=20);
    opacity:.2;
}

请注意,我没有重复定期应用于.menuItemBG的CSS。这不是必需的。然后将类menuItem添加到包含div:

<div class="menuItem">
    <div class="menuItemBG"></div>
    <div class="menuItemTitle">Test Item</div>
</div>

您现在可以非常轻松地将.menuItem的内联CSS移动到样式表中。它可以正常工作,但将其移动到样式表更简洁,更易于维护。

.menuItem {
    position: relative;
    width: 208px;
    height: 30px;
}

演示:http://jsfiddle.net/fYQfX/1