伪元素状态 - 如何将样式追加到之后/之前的状态?

时间:2015-09-21 12:23:20

标签: css css3 css-selectors pseudo-element pseudo-class

在开始预览代码之前,我希望让您更接近我目前所处的环境。我正在尝试使用不同的标签生成一个菜单,例如“开始,小组,帮助等“。我们只选择居中的标签按钮群组 ..在悬停时看起来像这样:

menu-button:hover

当我输入其中一个伪元素时,我正在使用它来构建那些 45deg 侧面,父div的悬停样式将关闭。但是伪仍然可见:

menu-button:hover fail

注意:我无法操纵html标记。我可以对网站进行更改的唯一方法是编辑css ..让我们来看看代码:

#header .nav-item {
    width: 33.33%;
}    

#header .nav-item:hover::before,
#header .nav-item:hover::after {
    display: inline-block;
    position: absolute;
    height: 50px;
    width: 50px;
}

#header .nav-item:hover::before {
    margin-left: -25px;
    background-image: -webkit-gradient(
        linear, right top, left bottom,
        color-stop(0.5, #111),
        color-stop(0.5, #fff));
    /* vendor specific gradients ... */
}

#header .nav-item:hover::after {
    margin-left: -25px;
    background-image: -webkit-gradient(
        linear, right top, left bottom,
        color-stop(0.5, #fff),
        color-stop(0.5, #111));
    /* vendor specific gradients ... */
}

让我们转到......

我的问题

我能够选择伪元素状态:hover还是有其他任何可用的方法来实现清洁过渡,同时移动项目?到目前为止,我尝试选择.nav-item::after:hover.nav-item::before:hover.nav-item:hover::after:hover.nav-item:hover::before:hover ......

没有任何效果,所以我现在无法强迫伪元素在它们被徘徊时做某事。

提前致谢...

编辑 - 解决方案

要强制伪元素在悬停时不会保持可见,只需使用a将另一个元素(例如...,'span',z-index)放在其上方。

谢谢 @Merijn van Wouden ;)

1 个答案:

答案 0 :(得分:1)

只将悬停放在.nav项上,而不是伪元素上 悬停在.nav-item上还可以控制是否显示伪元素。

请注意:https://jsfiddle.net/xqe3vqmt/1/

编辑:更新版本:https://jsfiddle.net/xqe3vqmt/2/(请参阅下面的评论)

还要注意我如何使用不必要的渐变

HTML:

<div id="header"> 
    <a class="nav-item">START</a>
    <a class="nav-item">GRUPPEN</a>
    <a class="nav-item">HILFE</a>
</div>

CSS:

#header {
    margin-top:2em;
}
.nav-item {
    width: 120px;
    display:inline-block;
    position:relative;
    font-family:arial, helvetica;
    text-align:center;
    height:3em;
    line-height:3em;
    margin:0 1.5em;
    cursor:pointer;
}
.nav-item:before, .nav-item:after {
    content:"";
    width:0;
    height:0;
    border:1.5em solid transparent;
    position:absolute;
    top:0;
}
.nav-item:before {
    right:100%;
}
.nav-item:after {
    left:100%;
}
.nav-item:hover {
    background:black;
    color:white;
}
.nav-item:hover:before {
    border-right-color:black;
    border-top-color:black;
}
.nav-item:hover:after {
    border-left-color:black;
    border-bottom-color:black;
}