我很确定无法做到这一点。但是那里有很多聪明人,所以这里就是......
我正在使用两个重叠的元素创建UI形状。基本上是一个圆形突起的大正方形。
我希望这两个元素显示为一个对象(通过赋予它们相同的背景颜色并重叠它们很容易)但我也希望这个元素看起来像它有一个阴影。
问题是阴影是半透明的,两个元素重叠的地方,由于两个阴影元素组合,你会得到一个更暗的斑点。
示例:
http://jsbin.com/maboputexa/1/
因为这是两个HTML元素,所以我很确定没有办法解决这个问题,这就是它的原因。现在,我将尝试不使用半透明物体,并使用平坦的纯色作为阴影。但是如果有人知道在CSS3中使用所有新选项的任何技巧,请告诉我!
(请注意,我不是指盒阴影属性,因为它不适用于两个对象,因为总是必须有一个对象在另一个之上)。
答案 0 :(得分:1)
更多的是它的乐趣而不是真正的用途:
2个div,阴影不重叠,透明度不重叠
注意避免阴影重叠的技巧:div上的z-index自动,以及z-index为负的伪元素上的阴影设置。
避免透明度重叠的技术有点令人不安,因为它不仅需要混合混合模式,还需要将div放在图像后面......
但是,正如我所说,这是一个有趣的结果......
应该适用于Chrome,FF和Safari(这是未经测试的)
body {
background-color: gray;
font-size: 30px;
}
.test1 {
width: 300px;
height: 200px;
position: absolute;
left: 150px;
top: 150px;
background-color: #555;
z-index: auto;
}
.test2 {
width: 300px;
height: 200px;
position: absolute;
left: 10px;
top: 0px;
border-radius: 50%;
background-color: #555;
z-index: auto;
-webkit-animation: move 5s infinite;
animation: move 5s infinite;
}
@-webkit-keyframes move {
0% {left: 0px; top: 0px;}
33% {left: 300px; top: 20px;}
66% {left: 300px; top: 220px;}
100% {left: 0px; top: 0px;}
}
@keyframes move {
0% {left: 0px; top: 0px;}
33% {left: 300px; top: 20px;}
66% {left: 300px; top: 220px;}
100% {left: 0px; top: 0px;}
}
.test1:after , .test2:after {
content: "";
position: absolute;
left: 0px;
toop: 0px;
width: 100%;
height: 100%;
box-shadow: 4px 4px 8px 2px black;
border-radius: inherit;
z-index: -1;
}
.overlay {
width: 600px;
height: 600px;
background-image: url(http://placekitten.com/1000/750);
background-size: cover;
position: absolute;
z-index: 4;
mix-blend-mode: overlay;
pointer-events: none;
}

<div class="test1">test1</div>
<div class="test2">test2</div>
<div class="overlay"></div>
&#13;
答案 1 :(得分:0)
如果目标是绘制带阴影的形状,你可以看看svg将为此做出。 CSS有限制,并不是真正用于绘图:
对于带有html元素,背景和阴影的CSS技巧,在这种情况下你可以很容易地做背景,但是阴影部分将是平均值并且丢失了宝贵的时间恕我直言。
请参阅:http://jsbin.com/paqayorewo/1/或在下方运行代码段。
.shape1 {
width: 200px;
height: 200px;
background: rgba(0,0,0,.5);
position: absolute;
top: 200px;
box-shadow:-3px 3px 2px 0px,
50px 50px 2px -48px,
-50px -50px 2px -48px}
.shape2 {
width: 200px;
height: 200px;
border-radius: 100px;
position: absolute;
top: 100px;
left: 100px;
overflow:hidden;
box-shadow:2px -3px 3px, -20px -20px 3px -24px, -40px -15px 2px -40px, 8px 3px 3px -3px}
.shape2:before,
.shape2:after {
content:'';
background: rgba(0,0,0,.5);
position:absolute;
}
.shape2:before {
height:50%;
width:100%;
}
.shape2:after {
width:50%;
height:50%;
top:50%;
right:0;
}
body {
position:relative;
}
&#13;
<div class="shape1"></div>
<div class="shape2"></div>
&#13;