网站首页 > 基础教程 正文
当我们想给一个矩形或者其他能用border-radius生成的形状加投影时,box-shadow的表现都很棒的。但是,当元素添加可一些伪元素或半透明的装饰之后,border-radius会无视这些。
这是原本的图形:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
position: relative;
display: inline-flex;
flex-direction: column;
justify-content: center;
vertical-align: bottom;
box-sizing: border-box;
width: 5.9em;
height: 5.2em;
margin: .6em;
background: #fb3;
font: 200%/1.6 Baskerville, Palatino, serif;
text-align: center;
}
.speech{
border-radius: .3em;
}
.speech:before{
content: '';
position: absolute;
top: 1em;
right: -.7em;
width: 0;
height: 0;
border: 1em solid transparent;
border-left-color: #fb3;
border-right-width: 0;
}
.dotted{
background: transparent;
border: .3em dotted #fb3;
}
.cutout {
border: .5em solid #58a;
border-image: 1 url('data:image/svg+xml,\
<svg xmlns="http://www.w3.org/2000/svg"\
width="3" height="3" fill="%23fb3">\
<polygon points="0,1 1,0 2,0 3,1 3,2 2,3 1,3 0,2"/>\
</svg>');
background-clip: padding-box;
}
</style>
</head>
<body>
<div class="speech">Speech bubble</div>
<div class="dotted">Dotted border</div>
<div class="cutout">Cutout corners</div>
</body>
</html>
当我们直接使用box-shadow时:
box-shadow: 2px 2px 10px rgba(0,0,0,.5);
就会变成这样:
解决方案
这里我们引入一个叫filter的属性。是一个滤镜,只需要一些函数就可以很方便的制定滤镜效果。比如blur()、grayscale()以及我们需要的drop-shadow()。我们甚至可以把多个滤镜串联起来:
filter: blur() grayscale() drop-shadow();
drop-shadow()滤镜可接受的基本参数跟box-shadow属性一样,但不包括扩张半径,不包括inset关键字,也不支持逗号分割的多层投影语法,所以我们这里把之前的box-shadow换成:
/*box-shadow: 2px 2px 10px rgba(0,0,0,.5);*/
filter: drop-shadow(2px 2px 10px rgba(0,0,0,.5));
猜你喜欢
- 2024-12-27 CSS视觉格式化模型,你真的了解么?
- 2024-12-27 CSS linear-gradient() 函数用法详解
- 2024-12-27 CSS元素居中方法完全指南 css设置元素居中
- 2024-12-27 CSS实现溢出显示省略号 css 超出显示省略号
- 2024-12-27 CSS继承的元素属性小总结 css的继承性又被定义为什么
- 2024-12-27 网页元素常见的定位方式 列举常见的web页面元素的定位方式
- 2024-12-27 四年前端在CSS面试上跪了【亲身经历】
- 2024-12-27 HTML+CSS基础训练之实现一个“真实”的网页
- 2024-12-27 CSS3 - 新单位vw、vh、vmin、vmax使用详解(附样例)
- 2024-12-27 广州蓝景分享—实用的CSS技巧,助你成为更好的前端开发者
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)