跨两个元素共享半透明(没有重叠)?

时间:2015-04-27 16:25:31

标签: css css3 shadow css-shapes translucency

我很确定无法做到这一点。但是那里有很多聪明人,所以这里就是......

我正在使用两个重叠的元素创建UI形状。基本上是一个圆形突起的大正方形。

我希望这两个元素显示为一个对象(通过赋予它们相同的背景颜色并重叠它们很容易)但我也希望这个元素看起来像它有一个阴影。

问题是阴影是半透明的,两个元素重叠的地方,由于两个阴影元素组合,你会得到一个更暗的斑点。

示例:

http://jsbin.com/maboputexa/1/

enter image description here

因为这是两个HTML元素,所以我很确定没有办法解决这个问题,这就是它的原因。现在,我将尝试不使用半透明物体,并使用平坦的纯色作为阴影。但是如果有人知道在CSS3中使用所有新选项的任何技巧,请告诉我!

(请注意,我不是指盒阴影属性,因为它不适用于两个对象,因为总是必须有一个对象在另一个之上)。

2 个答案:

答案 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;
&#13;
&#13;

答案 1 :(得分:0)

如果目标是绘制带阴影的形状,你可以看看svg将为此做出。 CSS有限制,并不是真正用于绘图:

对于带有html元素,背景和阴影的CSS技巧,在这种情况下你可以很容易地做背景,但是阴影部分将是平均值并且丢失了宝贵的时间恕我直言。

请参阅:http://jsbin.com/paqayorewo/1/或在下方运行代码段。

&#13;
&#13;
.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;
&#13;
&#13;