【发布时间】:2014-04-22 15:41:17
【问题描述】:
我正在使用 css :before 和 :hover 的组合在按钮中添加图像。
我遇到的问题是,当我将鼠标悬停在:before 元素上时,它会正确触发图像位置更改,但不会触发创建:before 元素的li:hover。
我猜这是因为:before 元素位于li 之上的方式导致:hover 无法被触发。
这里有一张图片可以更好地解释正在发生的事情:
这是我的 CSS:
.columnStat ol li {
list-style: none;
margin-right: 3px;
display: inline-block;
}
ol, ul {
list-style: none;
}
#page .columnStat ol {
margin: 0px 8px;
padding-top: 8px;
}
body {
line-height: 1;
}
html, body {
height: 100%;
}
body {
margin: 10px 10px;
color: rgb(35, 35, 35);
font-family: Verdana, Helvetica, Sans-Serif;
font-size: 0.75em;
}
a {
}
a:link {
color: rgb(0, 102, 204);
text-decoration: underline;
}
a:visited {
color: rgb(0, 102, 204);
text-decoration: none;
}
.columnStat ol > li > a, .columnStat ol > li > span {
padding: 6px 7px 6px 20px;
border-radius: 4px;
border: 1px solid rgb(190, 190, 190);
border-image: none;
color: rgb(89, 89, 89);
text-decoration: none;
}
.columnStat ol li a:hover{
background-color:#7c7c7c !important;
border:1px solid #717171;
color:#fff;
cursor:pointer;
background-image:none;
}
.vbt_true:before, .vbt_false:before {
display: inline-block;
content: "";
width: 15px;
height: 28px;
background: transparent url(http://i.stack.imgur.com/0Chc7.png) no-repeat;
float:left;
margin-right:-15px;
margin-top:-4px;
position:relative;
}
.vbt_false:before {
background-position: 3px -1px;
}
.vbt_true:before {
background-position: -14px -1px;
}
.vbt_false:hover:before, .vbt_false.act:before {
background-position: 3px -31px;
}
.vbt_true:hover:before, .vbt_true.act:before {
background-position: -14px -31px;
}
和 HTML:
<div id="containerAdmin">
<div id="page">
<div class="columnStat">
<ol>
<li class="vbt_true"><a href="#">Button Text</a>
</li>
<li class="vbt_false"><a href="#">Button Text</a>
</li>
</ol>
</div>
</div>
</div>
这是一个工作 fiddle http://jsfiddle.net/wf_4/B42SH/
【问题讨论】:
-
它适用于我 - 背景颜色变为灰色。当你尝试你的小提琴时,你看到了什么不同的东西吗?
-
真的吗?我已经在 IE 11、Chrome 和 FF 中对此进行了测试,它们的行为都相同。当您将鼠标悬停在按钮的左侧时,矩形会消失,但按钮不会变灰,只有当我将鼠标悬停在右侧(文本上方)时才会发生这种情况
-
哦,对不起,我以为你指的是整个按钮。我的错。
-
li:hover:before和a:hover是2个不同的元素,行为没有错,如果你只悬停<li>,如果你没有在CSS中将它设置为<a>,为什么要做出反应:@ 987654339@jsfiddle.net/B42SH/3 -
是的@GCyrillus 很好发现。我已经将选择器从
.columnStat ol li a:hover调整到.columnStat ol li:hover a,这也解决了悬停问题,但没有pointer-events: none;,它会在伪内容所在的按钮上创建一个死点。
标签: html css pseudo-element css-content