63

私はこの設定をしています:

<div id="button">Button</div>

そしてこれはCSSの場合:

#button {
    color: #fff;
    display: block;
    height: 25px;
    margin: 0 10px;
    padding: 10px;
    text-indent: 20px;
    width: 12%;
}

#button:before {
    background-color: blue;
    content: "";
    display: block;
    height: 25px;
    width: 25px;
}

次のようなホバー効果を疑似要素に与える方法はありますか?#button:before:hover {...}また、次のようにホバーされている別の要素に応答して疑似要素をホバーさせることも可能#button:hover #button:before {...}ですか?CSSだけがいいのですが、jQueryも問題ありません。

4

4 に答える 4

95

親のホバーに基づいて疑似要素を変更できます。

JSFiddleデモ

#button:before {
    background-color: blue;
    content: "";
    display: block;
    height: 25px;
    width: 25px;
}

#button:hover:before {
    background-color: red;
}

#button {    display: block;
    height: 25px;
    margin: 0 10px;
    padding: 10px;
    text-indent: 20px;
    width: 12%;}

#button:before { background-color: blue;
    content: "";
    display: block;
    height: 25px;
    width: 25px;}

#button:hover:before { background-color: red;}
<div id="button">Button</div>

于 2012-01-15T23:52:29.567 に答える
27

明確にするために、疑似要素を与えることはできません。2018年現在、CSS:hoverのようなものはありません。::after:hover

于 2018-09-05T20:34:22.120 に答える
11

#button:hover:beforeボタンにカーソルを合わせると、疑似要素が変更されます。ただし、疑似要素のみに重要なことを実行したい場合は、実際の要素をHTMLに配置することをお勧めします。疑似要素はかなり制限されています。

CSSでは、後続の要素に基づいて要素のスタイルを設定することはできませんが、通常、親ノードに:hoverを配置することで、同じ基本的な効果で何かをリグすることができます。

<div id="overbutton">
    <div id="buttonbefore"></div>
    <div id="button"></div>
</div>

#overbutton {
    margin-top: 25px;
    position: relative;
}

#buttonbefore {
    position: absolute;
    background-color: blue;
    width: 25px;
    height: 25px;
    top: -25px;
}

#overbutton:hover #buttonbefore {
    // set styles that should apply to buttonbefore on button hover
}

#overbutton:hover #buttonbefore:hover {
    // unset styles that should apply on button hover
    // set styles that should apply to buttonbefore on buttonbefore hover
}
于 2012-01-15T23:57:01.563 に答える
0

設計目的だけの場合は、長方形ボックスのいずれかの側に疑似要素を作成し、HTMLをできるだけ単純に保つ方がよいと思います。

HTML:

 <body>
    <div class="tabStyle">Rectangle</div>
    </body>

CSS:

 .tabStyle {
        border-style:solid;
        border-color: #D8D8D8;
        background : #D8D8D8;
        width:200px;
        height:93px;
        color: #000;
        position: relative;
        top: 10px;
        left: 49px;
        text-align:center;
    }
    .tabStyle:hover {
        background : #000;
        border-color: #000;
    }
    .tabStyle:hover::before {
        border-color: transparent #000 #000 transparent;
        border-style: solid;
        border-width: 0px 0px 100px 50px;
    }
    .tabStyle:hover::after {
        border-color: transparent transparent #000 #000;
        border-style: solid;
        border-width: 0px 50px 100px 0px;
    }
    .tabStyle::after {
        border-color: transparent transparent #D8D8D8 #D8D8D8;
        border-style: solid;
        border-width: 0px 50px 100px 0px;
        position: absolute;
        top: -4px;
        left:101%;
        content:"";
    }
    .tabStyle::before {
        border-color: transparent #D8D8D8 #D8D8D8 transparent;
        border-style: solid;
        border-width: 0px 0px 100px 50px;
        position: absolute;
        top: -4px;
        right: 101%;
        content:"";
    }

CSSを変更しましたが、結果は次のようになります。

http://jsfiddle.net/a3ehz5vu/

于 2014-12-29T18:32:21.793 に答える