带有伪元素的CSS叠加

问题描述 投票:4回答:2

如何创建带有伪元素的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);
}

我已经尝试过了,但是没有用。

html css html5 css3
2个回答
4
投票

可能由于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);
}

0
投票

另一种解决方案是使用边框。不需要伪类:

<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

快速简便^^

© www.soinside.com 2019 - 2024. All rights reserved.