纯CSS实现翘角纸片效果

昨天浏览网站时,偶然发现了网站上的翘脚纸片效果,之前见过很多次这种纸张两边翘起的效果,今天终于有时间了解以下这种效果的实现方法了。

网页上的效果

通过检查元素后发现,这种效果其实也是通过box-shadow实现的,不过元素下面有专门用伪类实现的阴影层,然后通过rotate变换即可达到这种效果。阴影层和内容层的关系可以由下图表示。
结构示意图

其中元素#paper在上层,#paper:before#paper:after通过z-index调整到下层,然后设置两个伪元素的阴影即可达到上图效果。
代码如下:

#paper {
    width: 200px;
    height: 50px;
    background-color: #fff;
    margin: auto;
    position: relative;
}
#paper:before,
#paper:after {
    content: '';
    width: 90px;
    height: 40px;
    box-shadow: 0 10px 10px rgba(0, 0, 0, 0.1);
    position: absolute;
    z-index: -1;
}
#paper:before {
    transform: rotate(-5deg);
    transform-origin: top right;
    left: 10px;
}
#paper:after {
    transform: rotate(5deg);
    transform-origin: top left;
    right: 10px;
}
<div id="paper"></div>

以上代码在浏览器中的效果是这样的:


翘脚纸片效果

通过调整阴影层的各项阴影参数,就可以控制显示效果。值得注意的是,调整参数时千万不要让阴影层比内容层还大,不然阴影就露出马脚了哦!
当然还可以加一些小特技,比如给伪元素们加个动画:

#paper:before,
#paper:after {
    animation: shadow ease 2s infinite alternate;
}
@keyframes shadow {
    from {
        box-shadow: 0 0px 10px rgba(0, 0, 0, 0.1);
    }
    to {
        box-shadow: 0 10px 10px rgba(0, 0, 0, 0.15);
    }
}```
就变成了这样:
![动态效果](http://upload-images.jianshu.io/upload_images/3220260-79c48f3c7be41a48.gif?imageMogr2/auto-orient/strip)
还是蛮有趣的(^-^)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,690评论 1 92
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,441评论 4 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,995评论 25 709
  • 听了核聚老师课的我受益匪浅,决定将自己的所思所想所得用自己的写作方式一一记录下来。 找梦想 “为了什么?”逆向思维...
    谢宇雨阅读 3,564评论 0 6
  • miss
    就是一个别扭的人阅读 1,895评论 0 0

友情链接更多精彩内容