При зависании одного псевдоэлемента, создайте другой псевдоэлемент?
Я пытался создать экран, в котором используются псевдо-элементы :before
и :after
, но мне интересно, действительно ли такая функциональность возможна.
У меня есть обертка div, которая обернута вокруг ввода (с учетом pseudo element
на этой обертке).
что-то вроде:
+-----------------------------------+
| +-------------------------------+ |
| | | | <-- wrapper div
| +-------------------------------+ <-- input element
+-----------------------------------+
Однако, я искал, чтобы псевдо-элемент располагался после div.
+-----------------------------------++-------+
| +-------------------------------+ | |¯¯¯| |
| | | | / |
| +-------------------------------+ | ! |<--pseudo element
+-----------------------------------++-------+
Я хотел иметь возможность навести этот псевдоэлемент и отобразить другой псевдоэлемент.
.wrap {
position: relative;
height: 30px;
width: 200px;
display: inline-block;
}
.wrap input {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
.wrap:after {
content: "?";
position: absolute;
top: 0;
left: 100%;
height: 30px;
width: 30px;
font-size: 30px;
text-align: center;
}
.wrap:before {
content: "";
position: absolute;
top: 100%;
left: 0;
height: 60px;
width: 100%;
background: tomato;
opacity:0.2;
}
<div class="wrap">
<input placeholder="input element" type="text" />
</div>
Ответы
Ответ 1
Похоже, что псевдоэлементы не являются "реальными" элементами, это значит, что (в настоящее время) нельзя использовать таким образом. Вместо этого использование "реального" элемента позволило бы это, поэтому я решил использовать элемент span до тех пор, пока эта функция не будет реализована или не будет реализована.
Текущая реализация отображает:
input {
position: relative;
display: inline-block;
height: 30px;
vertical-align: top;
}
span {
position: relative;
height: 30px;
width: 30px;
display: inline-block;
text-align: center;
border-radius: 50%;
font-size: 25px;
line-height: 30px;
background: tomato;
}
span:after {
content: "A Question Mark";
position: relative;
display: inline-block;
top: 0;
left: 0;
height: 60px;
width: 100px;
background: tomato;
opacity: 0;
transition: all 0.8s;
font-size: 16px;
}
span:hover:after {
opacity: 1;
}
<input placeholder="input element" type="text" />
<span>?</span>
Ответ 2
Я знаю, что это не совсем то, о чем вы просили, но пока css не сможет выбрать родителей (это произойдет), вы можете просто добавить еще один элемент html:
<div class="wrap">
<div class="inner_wrap">
<input placeholder="input element" type="text" />
</div>
</div>
CSS
.wrap {
position: relative;
height: 30px;
width: 200px;
display: inline-block;
}
.wrap input {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
.wrap:after {
content: "?";
position: absolute;
top: 0;
left: 100%;
height: 30px;
width: 30px;
font-size: 30px;
text-align: center;
}
.inner_wrap:before {
content: "";
position: absolute;
top: 100%;
left: 0;
height: 60px;
width: 100%;
background: tomato;
opacity:0.2;
display:none;
}
.wrap:hover .inner_wrap:before{
display:block;
}
.wrap .inner_wrap:hover:before{
display:none;
}
http://fiddle.jshell.net/0vwn1w9t/