使用伪元素

时间:2016-01-03 20:37:48

标签: html css html5 css3

如何使用伪元素创建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);
}

我试过这个,但它没有用。

2 个答案:

答案 0 :(得分:4)

它可能不起作用,因为the pseudo-element isn't generated if the content value is omitted。默认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>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

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

.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

它也适用于大纲:

outline: 9999px solid rgba(0,0,0,0.6);

快速简便的^^