将一个伪元素悬停时,是否会出现另一个伪元素?
On hovering one pseudo element, make the other pseudo element appear?
我试图生成一个使用 :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>
根据上面的代码片段设计,当我只悬停在 :after
元素而不是 wrap
[=47 时,有没有办法让 :before
元素改变其不透明度=] 本身(注意:html 无法更改,因此为什么这个问题)?
我尝试使用类似的东西:
.wrap:not(input):hover:before{
将输入的宽度更改为 90%
之后,但这并没有什么不同
我知道这不完全是你所要求的,但直到 css 可以 select parents(即将到来)你可以再添加一个 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;
}
似乎因为伪元素不是'real'元素,这意味着(当前)不能以这种方式使用。相反,使用 'real' 元素可以做到这一点,因此我选择使用 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>
令我心爱的伪元素设计大失所望。
我试图生成一个使用 :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>
根据上面的代码片段设计,当我只悬停在 :after
元素而不是 wrap
[=47 时,有没有办法让 :before
元素改变其不透明度=] 本身(注意:html 无法更改,因此为什么这个问题)?
我尝试使用类似的东西:
.wrap:not(input):hover:before{
将输入的宽度更改为 90%
之后,但这并没有什么不同
我知道这不完全是你所要求的,但直到 css 可以 select parents(即将到来)你可以再添加一个 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;
}
似乎因为伪元素不是'real'元素,这意味着(当前)不能以这种方式使用。相反,使用 'real' 元素可以做到这一点,因此我选择使用 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>
令我心爱的伪元素设计大失所望。