:如果在伪生成内容之前盘旋,则悬停不起作用:

时间:2014-03-17 12:29:00

标签: html css css3 pseudo-element css-content

我正在使用css :before:hover的组合在按钮中添加图片。

我遇到的问题是,当我将鼠标悬停在:before元素上时,它会正确触发图像位置更改,但不会触发创建li:hover元素的:before。 我猜这是因为:before元素位于li之上的方式,导致:hover无法触发。

这是一张图片,可以更好地解释发生的事情:

enter image description here

这是我的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>

这是一个有效的小提琴 http://jsfiddle.net/wf_4/B42SH/

SamleImage

1 个答案:

答案 0 :(得分:8)

您需要使用pointer-events: none;,这样即使您悬停 :before生成的伪内容,它的行为就像您正在悬停正常按钮一样。

.vbt_true:hover:before, .vbt_true.act:before {
    background-position: -14px -31px;
    pointer-events: none;
}

Demo


来自Mozilla Developer Network

  

除了表明该元素不是鼠标的目标   事件,值none指示鼠标事件进入&#34;通过&#34;该   元素和目标是&#34;在&#34;下面&#34;而是那个元素。


您可能会发现对IE (通常情况下) ...

的支持不那么令人印象深刻

pointer-events property support table

致谢:Mozilla开发者网络


但我们总是polyfills可用