如何创建带有伪元素的CSS叠加层?
.modal {
position:fixed;
top:100px;
margin-left: auto;
margin-right: auto;
left:0;
right:0;
width:500px;
display:none;
border:2px solid #736D61;
background:#fff;
padding:10px;
}
.modal:after {
position:fixed;
top:0px;
left:0px;
width:100%;
height:100%;
background:rgba(0,0,0,0.5);
}
我已经尝试过了,但是没有用。
可能由于the pseudo-element isn't generated if the content
value is omitted而无法正常工作。默认的content
值为content
,这很可能就是您看不到伪元素的原因。因此,您需要为none
属性指定none
以外的其他值:
content
还值得一提的是,由于伪元素本质上是作为子元素添加的,因此,由于建立了堆栈上下文,因此它将位于.modal:after {
content: '';
position: fixed;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
}
元素上方。要解决此问题,您可以像这样在.modal
元素的父元素中添加:before
伪元素:
.modal
.modal {
position: fixed;
top: 100px;
margin-left: auto;
margin-right: auto;
left: 0;
right: 0;
width: 500px;
border: 2px solid #736D61;
background: #fff;
padding: 10px;
}
.modal-overlay:before {
content: '';
position: fixed;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
}
另一种解决方案是使用边框。不需要伪类:
<div class="modal-overlay">
<div class="modal">MODAL</div>
</div>
.modal {
background-color: #fff;
left: 50%;
border-radius: 6px;
box-shadow: 0 0 0 9999px rgba(0,0,0,0.6);
padding: 20px;
position: fixed;
top: 50%;
transform: translate(-50%, -50%);
z-index: 999;
}
它也适用于轮廓:
Codepen example
快速简便^^