5

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

我遇到的问题是,当我将鼠标悬停在:before元素上时,它会正确触发图像位置更改,但不会触发li:hover创建:before元素的位置。我猜这是由于: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>

这是一个工作小提琴 http://jsfiddle.net/wf_4/B42SH/

样品图像

4

1 回答 1

9

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

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

Demo


来自Mozilla 开发者网络

除了指示该元素不是鼠标事件的目标之外,该值还none指示鼠标事件“通过”该元素并以该元素“下方”的任何内容为目标。


你可能会发现对 IE 的支持并不那么令人印象深刻(像往常一样) ......

指针事件属性支持表

致谢:Mozilla 开发者网络


但是我们总是有可用的polyfills

于 2014-03-17T12:39:09.903 回答