我试图生成一个屏幕,其中利用:before和:after伪元素,但我想知道这样的功能是否实际上是可能的.
我有一个包装器div,它绕着一个输入(允许这个包装上的伪元素).
就像是:
+-----------------------------------+ | +-------------------------------+ | | | | | <-- 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 div本身(注意:html不能改变,因此为什么这个问题)?
我试过使用像:
.wrap:not(input):hover:before{
将输入宽度改为90%后,这并没有什么变化
解决方法
我知道这不是你所要求的,但直到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; }