网站首页 > 技术文章 正文
当我们想给一个矩形或者其他能用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));
猜你喜欢
- 2025-05-26 【HarmonyOS Next之旅】兼容JS的类Web开发 -> 常见组件(一)
- 2025-05-26 CSS必知|重点属性flex|实践技巧|温故知新
- 2025-05-26 Vue书组件设计与实现详解
- 2025-05-26 CSS Viewport 单位,很多人还不知道使用它来快速布局
- 2025-05-26 宁静清晨!两道 CSS 面试题,助你从容应对职场挑战
- 2025-05-26 如何使用CSS实现旋转地球动画效果
- 2025-05-26 【HarmonyOS Next之旅】兼容JS的类Web开发(五) -> Svg
- 2025-05-26 CSS超炫加载动画设计、实现与实例讲解
- 2025-05-26 垂直居中方法大全
- 2025-05-26 分享几个漂亮的宇宙风格的按钮动画效果,让你喜欢上CSS
- 05-27Python进阶 - day1:深入理解数据结构
- 05-27Java中transient字段的作用
- 05-27深度学习数据集处理常用函数示例(Python)
- 05-27Go语言-指针
- 05-27什么是 happens-before 规则?
- 05-27「Java」一张图教会你关于null的几种处理方式(内附代码)
- 05-27Python 中常用的数据结构,帮助你从基础到精通
- 05-271、数值类型
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)