Как сделать эффект зависания для псевдоэлементов?
У меня есть эта настройка:
<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 тоже в порядке.
Ответы
Ответ 1
Вы можете изменить псевдоэлемент на основе наведения родителя:
JSFiddle DEMO
#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>
Ответ 2
#button:hover:before
изменит псевдоэлемент в ответ на зависающую кнопку. Однако, если вы хотите сделать что-то нетривиальное только для псевдоэлемента, вам лучше помещать фактический элемент в ваш HTML. Псевдоэлементы довольно ограничены.
В то время как CSS не позволит вам стилизовать элементы на основе элементов, которые приходят после них, обычно можно выстроить что-то с одним и тем же базовым эффектом, наведя: наведите указатель на родительский node, т.е.
<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
}
Ответ 3
Если это справедливо для целей дизайна, я думаю, что лучше создать псевдоэлементы по обе стороны прямоугольника и максимально упростить 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/