CSS3 box-shadow实现纸张的曲线投影效果

标签: 前端 css css3
325人阅读 评论(0) 收藏 举报
分类:

本文地址:http://www.zhangxinxu.com/wordpress/?p=1322

一、简单的前言

一般的投影效果,尤其通过CSS实现的投影效果(无论是CSS3,还是IE滤镜),都是直来直往的。纸张是有卷角的,其投影就是曲面的,如何使用CSS模拟出纸张的卷边曲线投影效果就是本篇的内容了。
实现的曲线投影效果截图 张鑫旭-鑫空间-鑫生活

二、实现原理简介

首先,曲线投影的终效果其实是多投影重叠的效果:一点点倾斜的投影重叠一个直直的投影。
一般的直来直往的投影显然是使用box-shadow属性就可以搞定了。至于那个倾斜的投影,如果是现代浏览器,则需要就是CSS3变换属性transform(具体参见之前的“CSS3 Transitions, Transforms和Animation使用简介与应用展示”一文)。首先是倾斜,5度左右的样子,然后让其在主投影的后面显示就可以了。然后,单单只有倾斜是不够的,因为有一个脚会从一侧露出来,这很好理解。假设两个矩形一样大,位置完全重叠,如果发生旋转,则必定有边角不重合而露出来。即使矩形尺寸不一样,只要其以一个公共的边角旋转,至少会有两个角露出来,而实际上我们只需要一个,也就是斜边投影的哪个角。那么这个问题该如何解决呢,也很简单,同样是transform,不过这回不是旋转,而是拉伸(skew),将规整的矩形拉伸成平行四边形,可避免旋转的时候多余的角露出来。

对于不支持CSS3的IE浏览器,按照上面的原理,理论上也是可以模拟出曲线投影效果的。因为IE下的投影效果可以使用投影滤镜(效果生硬不推荐)实现,或是模糊滤镜实现(推荐),至于旋转也有旋转滤镜。但是,就性能和成本而言,是否应该使用很值得商榷。

三、具体实现

在现代浏览器下,一层标签就可以了。首先,如下HTML:

<div class="curved_box"></div>

相关CSS代码如下:

.curved_box {
    display: inline-block;
    *display: inline;
    width: 200px;
    height: 248px;
    margin: 20px;
    background-color: #fff;
    border: 1px solid #eee;
    -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 60px rgba(0, 0, 0, 0.06) inset;
    -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.06) inset; 
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.06) inset;
    position: relative;
    *zoom: 1;
}

.curved_box:before {
    -webkit-transform: skew(-15deg) rotate(-6deg);
    -moz-transform: skew(-15deg) rotate(-6deg);
    transform: skew(-15deg) rotate(-6deg);
    left: 15px;
}
.curved_box:after {
    -webkit-transform: skew(15deg) rotate(6deg);
    -moz-transform: skew(15deg) rotate(6deg);
    transform: skew(15deg) rotate(6deg);
    right: 15px;
}

.curved_box:before, .curved_box:after {
    width: 70%;
    height: 55%;
    content: ' ';
    
    -webkit-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
    -moz-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); 
    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
    
    position: absolute;
    bottom: 10px;
    z-index: -1;	
}

使用了content内容生成技术,创建斜边投影。

最后实现的效果就是下面这张图的效果:
实现的曲线投影效果截图 张鑫旭-鑫空间-鑫生活

您可以狠狠地点击这里:纸张的曲线投影效果demo

如果您使用的是IE浏览器,可能也会看到点效果,大致如下:
IE浏览器下的曲线投影效果 张鑫旭-鑫空间-鑫生活

这是我使用IE滤镜折腾出来的效果。由于IE6~7不支持before、after,所以,IE下投影所在标签的定位我是使用js辅助实现的。所以花的功夫不少,但是最后的效果还是不及Firefox以及Chrome来的逼真。

由于IE滤镜方法不是本文重点,自己也不推荐这种做法,所以这就就不展示IE的实现了。您可以查看页面源代码。

友情提示
这里的斜边投影使用的是负值z-index定位到本体阴影的后面的。由于使用的是z-index负值,所以,请务必保证当前投影元素的所有父标签均没有背景图片或背景色(body标签除外),否则,斜边投影是看不到的。

四、快速结语

所说目前而言,本文实例效果是没有多少实际应用价值的。但是,其中实现的原理,关于content的使用,以及对z-index的一些认识,熟悉CSS3的一些属性还是颇有帮助的。可能不需要多少年,本文的例子就会会很基本很常用的入门实例了,期待那一天的到来。

参考页面:Pure CSS3 box-shadow page curl effect

原创文章,转载请注明来自张鑫旭-鑫空间-鑫生活[http://www.zhangxinxu.com]
本文地址:http://www.zhangxinxu.com/wordpress/?p=1322

(本篇完)

查看评论

CSS3实现精美的纸张折角效果

预备知识 CSS定位 CSS三角实现 CSS圆角及伪类,盒子阴影 在自己做的项目的某个地方需要用到折角效果,折腾了下就拿出来分享了;...
  • bomess
  • bomess
  • 2015-10-28 01:21:40
  • 4173

css3 box-shadow实例 盒子阴影(翘边阴影,曲线阴影)

做完后效果如下: 上面是曲边阴影,下边是翘边阴影。曲边阴影下部是类似弧线,翘边效果四角旁边翘起阴影。 *{ margin:0; padding: 0; } ul{ list-sty...
  • Christine95
  • Christine95
  • 2015-07-14 16:28:59
  • 2125

如何使用CSS3实现书页(书本)卷角效果

我们有时候想在踏得网页面上显示一个公告或用户提示信息。一个常用设计是使用书签形状。 我们可以给书签添加卷角效果,以使其更为逼真。所谓的“卷角”实际上可以用小角度倾斜的阴影效果来模拟。 用CSS3的伪元...
  • iefreer
  • iefreer
  • 2016-03-10 16:46:10
  • 5913

利用HTML5和CSS3实现很酷的3D纸片折叠动画效果

  • 2014年09月25日 12:59
  • 2KB
  • 下载

纯CSS3实现的纸张褶起动效

由纸张DIV的before和after两个伪元素所构建。这两个伪元素绝对定位于纸张DIV的底部,加上skew和shadow CSS3样式,形成下边角褶起的视觉效果。...
  • iefreer
  • iefreer
  • 2014-10-23 22:54:11
  • 2067

box-shadow实现曲线投影效果

一般的投影效果,尤其通过CSS实现的投影效果(无论是CSS3,还是IE滤镜),都是直来直往的。纸张是有卷角的,其投影就是曲面的,如何使用CSS模拟出纸张的卷边曲线投影效果就是本篇的内容了。 二、...
  • load_life
  • load_life
  • 2011-09-28 11:40:15
  • 281

CSS3 transform实现图片投影效果

纯css3打造投影效果——使用CSS3的transform属性实现的网页图片特效,除了ie9以下的浏览器,其他浏览器用户都可看到效果。在Safari下也有完美表现。...
  • life66881
  • life66881
  • 2015-06-11 15:51:33
  • 1339

box-shadow实现外发光效果

box-shadow:-1px 0 20px #3B3B3B(左边), 1px 0 20px #3B3B3B(右边), 0 -1px 20px #3B3B3B(上边), 0 1px 20px #3B3...
  • leng1235
  • leng1235
  • 2016-07-08 22:41:35
  • 946

CSS3实现折纸效果

无标题文档 @-webkit-keyframes open{ 0% { -webkit-transform:rotateX(-120deg); } 25% { -webkit-tr...
  • u013267266
  • u013267266
  • 2016-05-04 14:55:56
  • 936

css3 box-shadow发光效果

如果用过twitter,你可能已经留意到当输入框获得焦点后,它的边框会有蓝色发光的效果,并且这里运用了transition属性,使得发光效果有很平滑的过渡。本教程将讲述如何运用box-shadow属性...
  • huang100qi
  • huang100qi
  • 2012-08-20 10:38:20
  • 20047
    个人资料
    等级:
    访问量: 9188
    积分: 142
    排名: 113万+
    文章分类
    文章存档