在倾斜的div上创建部分框阴影

时间:2016-05-16 16:05:55

标签: css css-shapes css-transforms pseudo-element box-shadow

我正在尝试在偏斜的div上创建一个部分阴影,尽可能接近这个广告素材。

enter image description here

现在我一直在尝试使用伪元素(特别是之前),但我发现每当我将它们应用的元素倾斜时,这些元素的行为都很奇怪。即使z-index设置为-1,伪元素也会一直显示在div的顶部。无论我对z-index做什么,它都将保持在它之上。我希望它在它应用的div后面,并在下面的div前面,就像在广告中一样。

enter image description here

这是我的:: before代码和codepen的链接

CSS

/*! Shadows */
#test-title {
  position: relative;
}

#test-title:before {
  z-index: -1;
  position: absolute;
  content: "";
  bottom: 15px;
  left: 10px;
  width: 50%;
  top: 80%;
  max-width:300px;
  box-shadow: 0 15px 10px #777;
  -webkit-transform: rotate(-3deg);
  -moz-transform: rotate(-3deg);
  -o-transform: rotate(-3deg);
  -ms-transform: rotate(-3deg);
  transform: rotate(-3deg);
}

http://codepen.io/kathryncrawford/pen/WwWEma

4 个答案:

答案 0 :(得分:9)

Skew父母然后以相同的程度疏忽孩子。

public class ScriptB : MonoBehaviour{

    ScriptA scriptInstance = null;  

    void Start()
    {
      GameObject tempObj = GameObject.Find("NameOfGameObjectScriptAIsAttachedTo");
      scriptInstance = tempObj.GetComponent<ScriptA>();

      //Access playerScore variable from ScriptA
      scriptInstance.playerScore = 5;

     //Call doSomething() function from ScriptA
      scriptInstance.doSomething();
    }
}
* {
  box-sizing: border-box
}
body {
  padding: 40px 0
}
section {
  width: 60vw;
  clear: both;
  overflow: hidden;
  min-height: 100px;
  margin: 0 auto;
  position: relative;
  background: #035076
}
section article {
  width: 60%;
  padding: 20px;
  color: white;
  margin: 0 auto
}
section:nth-child(even) {
  transform: skew(-45deg) translate(5vw);
  box-shadow: inset 0 0 2px 0 black;
}
section:nth-child(odd) {
  transform: skew(45deg);
}
section:nth-child(even) article {
  transform: skew(45deg) translate(5vw);
}
section:nth-child(odd) article {
  transform: skew(-45deg);
}
section:before,
section:after {
  content: '';
  position: absolute;
}
section:nth-child(even):before {
  width: 100%;
  height: 0;
  bottom: 100%;
  left: 0;
  z-index: 6;
  opacity: 1;
  transform: rotate(-10deg) translateY(-30px);
  box-shadow: 0px 0px 64px 30px rgba(0, 0, 0, 0.8);
}

section:nth-child(odd):not(:first-child):before {
  width: 100%;
  height: 0;
  bottom: 100%;
  right: 0;
  z-index: 6;
  opacity: 1;
  transform: rotate(10deg) translateY(-30px);
  box-shadow: 0px 0px 64px 30px rgba(0, 0, 0, 0.8);
}

答案 1 :(得分:2)

更简单的方法是在第一个之后将阴影放在每个框的顶部。这将解决所有类型的z-index问题,因为每个框比它上面的框高1级..并且它允许阴影位于容器内而不是它之外。

我还改变了你的阴影样式,使用径向渐变*而不是盒子阴影,因为在这种情况下它更容易控制,并且更接近你的设计。我也做了一些定位,使其看起来更好一些,并为skew1skew2

分别设置了侧边

我已将您的上一个规则集更改为:

.test-info:before {
  position: absolute;
  content: "";
  width: 100%;
  left: 0;
  top: 0;
  height: 30px;
}

.test-info.skew1:before {
  background: radial-gradient(ellipse farthest-side at 30% top, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0) 100%);
}
.test-info.skew2:before {
  background: radial-gradient(ellipse farthest-side at 70% top, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0) 100%);
}

See Demo

*注意:在使用渐变之前,您可能需要检查/添加其他浏览器支持。

答案 2 :(得分:0)

我试过,它并不完美,但是,它更接近理想的外观,imho:

<div id="test-title">
            <h3>What our clients say about us</h3>
        </div>
        <div id="shadow1"></div>

所以,我添加了新的html元素(阴影),而不是使用伪元素......现在,我已正确设置z-index和位置,隐藏第一个div后面的旋转阴影div ,并添加了这个css:

#shadow1 {
  position:absolute;
  width:50%;
  height:150px;
  background:black;
  top:50px;
  left:11%;
  z-index:6;
  opacity:1;
 transform: rotate(-5deg);
box-shadow: 15px 56px 50px -12px rgba(0,0,0,0.80);

}

演示:http://codepen.io/anon/pen/vGwNqY

你可以玩旋转,盒子阴影,位置,身高......但是,这可能是一个好的开始(也许)。附:类似的逻辑可以应用于第二个div。

答案 3 :(得分:0)

尝试使用print(json_data['Events']['event'][2]['markets'][1]['selection'][0]['attributes']['attrib'][0]['value']) https://jsfiddle.net/0andpzsp/

为第二个元素制作方框阴影

&#13;
&#13;
:before
&#13;
.cont {
   width: 1000px;
   height: 500px;
}

div[class^="d"] {
   width: 70%;
   height: 50%;
   position: relative;
   margin-left: 40px;
   margin-top: 50px;
}

.d0 {
   background: linear-gradient(to right, #005f8a 0%,#00486c 50%,#003a59 100%);;
   transform: skew(20deg)
}

.d1 {
   background: linear-gradient(to right, #005f8a 0%,#00486c 50%,#003a59 100%);;
   overflow: hidden;
   top: -50px;
   left: 20%;
   transform: skewX(-20deg);
   z-index: -1
}

.d1:before {
   content: '';
   border-radius: 30%;
   position: absolute;
   display: block;
   width: 600px;
   height: 70px;
   z-index: 9999;
   top: -100px;
   left: -70px;
   box-shadow: -50px 60px 90px 0px #000;
   transform: rotate(-5deg)
}
&#13;
&#13;
&#13;