weekCodeing / interview-answe

🌍 前端程序员训练 求星星 ✨ 各位同学可以在issues中提问,无论是实际项目中遇到的问题,或者是技术问题都可以, 大家一起解决💯 👍 😄。
http://www.dadaqianduan.cn/
76 stars 9 forks source link

245.[开发及性能优化]CSS3实现曲线阴影和翘边阴影 #245

Open webVueBlog opened 4 years ago

webVueBlog commented 4 years ago
1、阴影很容易实现,内阴影+外阴影

.box-shadow1{
    box-shadow: 0 1px 4px rgba(0,0,0,0.3),0 0 40px rgba(0,0,0,0.1) inset;
}
2、然后使用伪类在元素的后面添加一个“可适配”的阴影,为了可适配,我们就要使用相对定位,实现代码如下

.box-shadow1{
    position:relative;
    box-shadow: 0 1px 4px rgba(0,0,0,0.3),0 0 40px rgba(0,0,0,0.1) inset;
}
.box-shadow1:after{
    content:"";
    position:absolute;
    background:transparent;
    top:50%; //设置宽高仅仅设置上下左右边距是为了让系统自动定位。
    bottom: 1px;
    left: 10px;
    right: 10px; 
    z-index: -1; //将副阴影置于主阴影下
    box-shadow: 0 0 20px rgba(0,0,0,0.7); 
    border-radius: 100px/10px;
}

如此即实现了曲线阴影的效果。

<div class="box box-shadow1">将box-shadow1作为类使用即可</div>

翘边阴影 同理,翘边阴影可以在基础阴影下叠加两个平行四边形即可。

.box-shadow2{
    position:relative;
    box-shadow: 0 1px 4px rgba(0,0,0,0.3),0 0 40px rgba(0,0,0,0.1) inset;
}
.box-shadow2:before,.box-shadow2:after{
    content: "";
    position:absolute; 
    top:20px;bottom: 22px;  
    background: transparent; 
    box-shadow: 0 8px 20px rgba(0,0,0,0.7);  
    z-index: -1; 
    background: #fff; 
}
.box-shadow2:before{ 
    left: 22px;  
    right:12px; 
    transform: skew(-12deg) rotate(-4deg); 
}
.box-shadow2:after{  
    left: 12px;  
    right:22px; 
    transform: skew(12deg) rotate(4deg); 
}