【问题标题】:Pseudo-Element state - How to append a style to the state of after/before? [duplicate]伪元素状态 - 如何将样式附加到之后/之前的状态? [复制]
【发布时间】:2015-12-18 03:34:23
【问题描述】:

在开始预览代码之前,我想让您更接近我当前所处的环境。我正在尝试生成一个包含不同 tab 部分的菜单,例如“开始、组、帮助等。”。让我们只选择居中的 tab-buttonGroups.. 悬停时看起来像这样:

只要我输入一个伪元素,即我用来构建那些 45deg 边的伪元素,父 div 的悬停样式就会关闭。但是伪影仍然可见:

注意:我无法操作 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 ...

没有任何效果,所以我目前无法强制伪元素在悬停时执行某些操作..


提前谢谢...


编辑 - 解决方案

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

谢谢@Merijn van Wouden ;)

【问题讨论】:

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


    【解决方案1】:

    仅将鼠标悬停在 .nav-item 上,而不是在伪元素上 .nav-item 上的悬停也控制是否显示伪元素。

    看:https://jsfiddle.net/xqe3vqmt/1/

    编辑: 更新版本:https://jsfiddle.net/xqe3vqmt/2/(参见下面的 cmets)

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

    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;
    }
    

    【讨论】:

    • 好吧,这也是一个不错的解决方案 (+1),但如果你仔细观察,:hover 会被提前触发,并且下一个元素即使在范围内也没有光标。.
    • 这种方式可以在伪元素周围没有透明框的情况下工作:jsfiddle.net/xqe3vqmt/2 它需要对 html 进行轻微重组(将跨度放在链接内)
    • 好的,解决了:)谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多