我有一个想要阴影的元素,可以使用css属性之前和之后创建页面卷曲效果。我已经在其他地方做了相对定位的项目。这很好用,就像这样:
.feed li{
display:block;
height:50px;
width:80%;
margin-left:10%;
position:relative;
clear:both;
margin-top:20px;
overflow:visible;
background:#FFF;
-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
-webkit-border-top-right-radius: 6px;
-moz-border-radius-topright: 6px;
border-top-right-radius: 6px;
}
.feed li:before, .feed li:after{
position: absolute;
width: 40%;
height: 10px;
content: ' ';
left: 0px;
bottom: 12px;
-webkit-transform: skew(-5deg) rotate(-5deg);
-moz-transform: skew(-5deg) rotate(-5deg);
-ms-transform: skew(-5deg) rotate(-5deg);
-o-transform: skew(-5deg) rotate(-5deg);
transform: skew(-5deg) rotate(-5deg);
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.7);
-moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.7);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.7);
z-index: -1;
}
.feed li:after{
left:auto;
right: 0px;
top:12px;
bottom:auto;
-webkit-border-top-right-radius: 6px;
-moz-border-radius-topright: 6px;
border-top-right-radius: 6px;
-webkit-transform: skew(-5deg) rotate(-5deg);
-moz-transform: skew(-5deg) rotate(-5deg);
-ms-transform: skew(-5deg) rotate(-5deg);
-o-transform: skew(-5deg) rotate(-5deg);
transform: skew(-5deg) rotate(-5deg);
-webkit-box-shadow: 0 -6px 12px rgba(0, 0, 0, 0.4);
-moz-box-shadow: 0 -6px 12px rgba(0, 0, 0, 0.4);
box-shadow: 0 -6px 12px rgba(0, 0, 0, 0.4);
}
然而,当我在一个对象上使用类似的方法时,z-index似乎被覆盖并且我的阴影出现在元素的顶部而不是在它后面。这就是我对此的看法:
.nav{
z-index:1;
position:fixed;
background:#FFF;
top:0px;
bottom:0px;
left:0px;
width:200px;
-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
}
.nav:before,.nav:after{
content:'';
position:fixed;
background: transparent;
z-index: -1;
width:195px;
height:50%;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.6);
-moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.6);
box-shadow: 0 10px 12px rgba(0, 0, 0, 0.6);
}
.nav:before{
-webkit-transform: rotate(-2deg);
-moz-transform: rotate(-2deg);
-ms-transform: rotate(-2deg);
-o-transform: rotate(-2deg);
transform: rotate(-2deg);
bottom:0px;
left:0px;
}
.nav:after{
-webkit-transform: rotate(2deg);
-moz-transform: rotate(2deg);
-ms-transform: rotate(2deg);
-o-transform: rotate(2deg);
transform: rotate(2deg);
bottom:auto;
top:0px;
left:0px;
}
我不完全确定这里的问题是什么,我已经在其他项目上完成了这个方法而没有任何问题。唯一可以解决的问题是固定元素对其他元素的影响不同。
答案 0 :(得分:0)
tl; dr:Fiddle
参考W3C:
:before和:after伪元素与其他框交互,好像它们是在关联元素中插入的真实元素一样。
这意味着他们相对于父母躺在另一个堆栈上。但是可以将它们放在父母后面。通过像你一样添加负z-index来完成。
但似乎将这些伪元素置于父母背景之后(如果有的话)存在问题。作为解决方案,建议将z-index:1;
和position:relative;
添加到父级。这就是为什么第一个示例正常工作而position:fixed;
导致问题的原因。
在我的解决方案中,我更改了标记:
<div class="nav">
<div class="content">lorem ipsum</div>
<div class="shadows"></div>
</div>
并对元素应用适当的规则。我不知道你最终想象导航的样子,但我认为我的解决方案看起来很棒。请参阅Fiddle。