CSS3"提升角落"阴影与不透明度

Joe*_*Joe 12 css opacity css3

我一直在玩一些CSS3阴影效果.我非常喜欢"提升的角落"效果,但在尝试为元素添加不透明度时遇到了一个问题.我的问题是:有没有办法在不透明度的元素上创建"提升角"效果?

http://jsfiddle.net/WAvZu/

.drop-shadow{
    position:relative;
    float:left;
    width:40%;
    padding:1em;
    margin:2em 10px 4em;
    background:#fff;
    -webkit-box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
    -moz-box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
    box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
}
.drop-shadow:before,
.drop-shadow:after{
    content:"";
    position:absolute;
    z-index:-2;
}
.lifted{
    -moz-border-radius:4px;
    border-radius:4px;
}
.lifted:before,
.lifted:after{
    bottom:15px;
    left:10px;
    width:50%;
    height:20%;
    max-width:300px;
    max-height:100px;
    -webkit-box-shadow:0 15px 10px rgba(0, 0, 0, 0.7);
    -moz-box-shadow:0 15px 10px rgba(0, 0, 0, 0.7);
    box-shadow:0 15px 10px rgba(0, 0, 0, 0.7);
    -webkit-transform:rotate(-3deg);
    -moz-transform:rotate(-3deg);
    -ms-transform:rotate(-3deg);
    -o-transform:rotate(-3deg);
    transform:rotate(-3deg);
}
.lifted:after{
    right:10px;
    left:auto;
    -webkit-transform:rotate(3deg);
    -moz-transform:rotate(3deg);
    -ms-transform:rotate(3deg);
    -o-transform:rotate(3deg);
    transform:rotate(3deg);
}
Run Code Online (Sandbox Code Playgroud)

thg*_*ell 9

问题是理解堆叠上下文以及它们在浏览器中的呈现方式.

  • 根元素(HTML),
  • 定位(绝对或相对)z-index值不是"auto",
  • 不透明度值小于1的元素.
  • 在移动WebKit和Chrome 22+上,position:fixed总是创建一个新的堆叠上下文,即使z-index是"auto"

9.9.1指定堆栈级别:'z-index'属性

  1. 形成堆叠背景的元素的背景和边界.
  2. 子堆叠上下文与负堆栈级别(最负面的).
  3. 流入的,非内联级别,非定位后代.
  4. 未定位的花车.
  5. 流入的,内联级的,未定位的后代,包括内联表和内联块.
  6. 堆栈级别为0的子堆栈上下文和堆栈级别为0的已定位后代.
  7. 堆叠具有正堆栈级别的子堆栈(最少积极的第一个).

#test首先渲染背景,因为这是应用不透明度的元素.之后,由于阴影位于新的堆叠上下文(position: absolute)中,因此阴影位于顶部.最后,div的文本.

一个简单的解决方案:将div放在另一个div中,并将不透明度应用于 div而不是#test.

http://jsfiddle.net/WAvZu/3/

另一个好读:没有人告诉你Z-Index