使用伪元素进行box-shadow,z-index行为

时间:2014-10-02 08:02:05

标签: css css3

我使用:before:after个伪元素在我的文本卡上创建自定义形状的阴影。我使用这样的css(jsFiddle):

.card {
    -webkit-box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    box-sizing: border-box; 
    float: left; 
    width: 310px; 
    height: 310px; 
    text-align: center;     
    color: black; 
    padding-top: 35px;
    border: 1px solid black;
}

.card h1 {
    font-size: 15px; 
    font-weight: bold; 
    line-height: 17px; 
    font-style: italic; 
    margin: 0;
}

.card .text { 
    -webkit-box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    box-sizing: border-box; 
    -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); 
    -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); 
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); 
    margin: 8px auto; 
    padding: 15px 10px; 
    font-size: 13px; 
    text-align: left; 
    line-height: 14px; 
    height: 170px; 
    width: 280px; 
    background: white; 
    border-radius: 5px; 
    position: relative; 
    color: #222222; 
}
.card .text:before, 
.card .text:after { 
    -webkit-box-shadow: 0 0 20px rgba(0, 0, 0, 0.8);
    -moz-box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); 
    box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); 
    content: ""; 
    display: block; 
    position: absolute; 
    z-index: -1; 
    top: 50%; 
    bottom: 0; 
    left: 40px; 
    right: 40px; 
    border-radius: 100px/10px; 
}
.card .text:after {
    -webkit-transform: skew(8deg) rotate(3deg);
    -moz-transform: skew(8deg) rotate(3deg); 
    transform: skew(8deg) rotate(3deg); 
    right: 10px; left: auto; 
}

到目前为止一切顺利。当我向.card元素添加背景时,问题就开始了,例如background: #0aabffjsFiddle #2)。注意,.text周围的伪元素阴影消失了。

我尝试通过将z-index添加到我的.text元素来解决这个问题,但是,不管是在我的.text元素后面,我的:before, :after都显示在它之前,尽管拥有z-index: -1;属性(jsFiddle #3)。

这对我来说没什么意义,我仍然不知道如何解决这类问题。也许,有某种解决方法,或者另一种方式来获得我需要的那种阴影(原始想法是css-tricks.com的礼貌);

1 个答案:

答案 0 :(得分:2)

您可以在z-index课程中添加-1低于card的费用。

.card {
    z-index:-2;
    position:relative;
}

这是因为z-index的{​​{1}}低于pseudo-elements的默认z-index值。默认情况下是card,您可能会看到阴影。当您添加background transparent时,它会位于background-color

之上

请参阅http://jsfiddle.net/71thws1a/3/

问题在于@Doodlebunch

所述的css堆叠