DigitalOcean 为您的旅程的每个阶段提供云产品。立即开始使用 $200 免费信用额度!
CSS 中的 box-shadow
属性用于在元素上添加阴影(有时被称为“投影”,类似于 Photoshop/Figma)。
.card {
box-shadow: 0 3px 10px rgb(0 0 0 / 0.2);
}
该语法是
box-shadow: [horizontal offset] [vertical offset] [blur radius] [optional spread radius] [color];
- 水平偏移量(必需)阴影,正值表示阴影将在盒子的右侧,负偏移量将使阴影在盒子的左侧。
- 垂直偏移量(必需)阴影,负值表示盒子阴影将在盒子上方,正值表示阴影将在盒子下方。
- 模糊半径(必需),如果设置为 0,则阴影将很清晰,数字越大,模糊程度越高,阴影延伸的距离越远。例如,水平偏移量为 5px 的阴影,也具有 5px 的模糊半径,将有 10px 的总阴影。
- 扩散半径(可选),正值会增加阴影的大小,负值会减小阴影的大小。默认值为 0(阴影与模糊大小相同)。
- 颜色(必需) - 接受任何颜色值,如十六进制、命名、rgba 或 hsla。如果省略颜色值,则盒子阴影将以前景颜色(文本
color
)绘制。但请注意,旧版本的 WebKit 浏览器(Chrome 20 和 Safari 6 之前)在省略颜色时会忽略规则。
使用半透明颜色,例如 rgba(0, 0, 0, 0.4)
最常见,也是一种不错的效果,因为它不会完全/不透明地覆盖它所覆盖的内容,而是允许其下方的内容略微显示,就像真正的阴影一样。
示例
内阴影
您使用 inset
关键字
.shadow {
box-shadow: inset 0 0 10px #000000;
}
古代历史
以下是一个包含供应商前缀的代码片段,它提供了尽可能广泛的浏览器支持
.shadow {
-webkit-box-shadow: 3px 3px 5px 6px #ccc; /* Safari 3-4, iOS 4.0.2 - 4.2, Android 2.3+ */
-moz-box-shadow: 3px 3px 5px 6px #ccc; /* Firefox 3.5 - 3.6 */
box-shadow: 3px 3px 5px 6px #ccc; /* Opera 10.5, IE 9, Firefox 4+, Chrome 6+, iOS 5 */
}
您甚至可以在 IE 8 中使用盒子阴影。您需要一个额外的元素,但可以使用 filter
来实现。
<div class="shadow1">
<div class="content">Box-shadowed element</div>
</div>
.shadow1 {
margin: 40px;
background-color: rgb(68,68,68); /* Needed for IEs */
-moz-box-shadow: 5px 5px 5px rgba(68, 68, 68, 0.6);
-webkit-box-shadow: 5px 5px 5px rgba(68, 68, 68, 0.6);
box-shadow: 5px 5px 5px rgba(68, 68, 68, 0.6);
filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius=3,MakeShadow=true,ShadowOpacity=0.30);
-ms-filter: "progid:DXImageTransform.Microsoft.Blur(PixelRadius=3,MakeShadow=true,ShadowOpacity=0.30)";
zoom: 1;
}
.shadow1 .content {
position: relative; /* This protects the inner element from being blurred */
padding: 100px;
background-color: #DDD;
}
仅一侧
使用负扩散半径,您可以压缩盒子阴影,并将其仅推到盒子的一侧。
.one-edge-shadow {
box-shadow: 0 8px 6px -6px black;
}
多边框和更多内容
您可以根据需要多次使用逗号分隔盒子阴影。例如,这将在同一个元素上显示两个具有不同位置和不同颜色的阴影。
box-shadow:
inset 5px 5px 10px #000000,
inset -5px -5px 10px blue;
此示例展示了如何使用它来创建多个边框。
通过将阴影应用于伪元素,然后对其进行操作,您可以获得一些非常漂亮的 3D 盒子阴影效果。
超平滑的阴影 通过多个逗号分隔的值
filter: drop-shadow()
的比较
与 它们可以做类似的事情!但是,等等,不同的事情。这是 关于此主题的深入文章。也许最重要的是要知道,filter
比矩形 box-shadow
更紧密地贴合元素的边缘(即使盒子阴影确实紧密地贴合圆角)。
浏览器支持
这些浏览器支持数据来自 Caniuse,其中包含更多详细信息。数字表示浏览器在该版本及更高版本中支持该功能。
桌面
Chrome | Firefox | IE | Edge | Safari |
---|---|---|---|---|
4* | 3.5* | 9 | 12 | 5* |
移动/平板电脑
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
127 | 127 | 4 | 4.0-4.1* |
更多信息
- CSS 背景和边框模块级别 3
- Mozilla 文档
- CSS 提示:多色和剪裁投影 (DigitalOcean)
很高兴看到这个,但这太基础了。
我在寻找一些高级的东西。
无论如何,感谢这个!
是否有像 outset 这样的东西,可以抵消 inset 值(使用 LESS mixin 并需要填充 inset 的变量集)。
HTML SCSS 结果
.box {
box-shadow
0 2.8px 2.2px rgba(0, 0, 0, 0.034),
0 6.7px 5.3px rgba(0, 0, 0, 0.048),
0 12.5px 10px rgba(0, 0, 0, 0.06),
0 22.3px 17.9px rgba(0, 0, 0, 0.072),
0 41.8px 33.4px rgba(0, 0, 0, 0.086),
0 100px 80px rgba(0, 0, 0, 0.12)
;
min-height: 200px;
width: 50vw;
margin: 100px auto;
background: white;
border-radius: 5px;
}
body {
background: #EEF2F7;
}
嗨,首先我要说我非常喜欢你的网站,它帮助过我很多次。
关于盒阴影,我发现 FF 和 Chrome 在距离方面存在差异。
我的意思是,当使用这段代码时
在 FF 中,它会在盒子的底部显示一个漂亮的阴影,但在 Chrome 中却没有显示。为了显示它,我需要将其更改为这样
我很想听听你对此的看法。
谢谢
我喜欢 css3 和你的网站 :) 但我讨厌 INTERNET EXPLORER :@
可爱
这是一个用于比较的测试页面。在 Chrome、IE 中查看此页面,然后在 FireFox(当前版本)中查看。
http://www.danwenjiang.com/box_shadow_compare.php
请注意,Chrome 和 IE(哇!)正确地显示了它,而 FireFox 的渲染方式不同。
这是 css
td.greybutton {
background: #696059;
}
td.greybutton:hover {
background: #944F1B;
}
.unselected {
color:#fff;
}
这是标记
菜单项 1
菜单项 2
菜单项 3
您有什么想法可以使 FireFox 正常运行吗?
顺便说一句 - Safari 似乎也很好,但 Opera 的渲染方式与 FireFox 相似。
你能发布制作效果 2 的代码吗?我无法弄清楚,也不明白你所说的伪元素是什么意思?
好吧,我感觉自己像个傻瓜 lol。找到了 html 和 css 的位置 lol。但我试了一下,它什么也没做?我会玩一会儿,也许是我做错了什么
非常感谢您分享,这些效果非常酷。
在 Effect 7 的规则中,我不太明白代码是如何工作的
为什么随后的倾斜和旋转会以这种方式改变阴影?
我也是…
@Chris Coyier
您介意在我的网站 @leftree.webs.com 上留下建议/赞美吗?是的,我使用了网站构建器,但我对 HTML5 和 CSS3 非常了解,如这里所示: http://www.codecademy.com/kerpoof/codebits/NsulFX/edit
操作方法:只需点击左下角的绿色灯泡。谢谢!
这个页面已经超出了范围。请参见上面的“示例展示了如何使用它来创建多个边框”...这是一个不可思议的 HTML/CSS/PRIVIEW 应用程序。当然,div id=“init-data” 是浏览器界面的一个繁琐的翻译。但这是我第一次看到这种东西。这是浏览器程序员惊叹(和自豪)的东西。也许 10 年后,这种灵感会在一个文字 DOM 中出现。因此,我们可以用简单的英语编写这种内容。另一个好消息,人们!这个帖子框有“编写”和“预览”选项卡,它们也完美运行。我们都看到过这个网站的挣扎。今天,你们都闪耀。CSS-Tricks,太棒了!
我正在尝试在我的 div 上应用 effect3,但它不起作用。
PS:当我将我的 div 放到所有容器之外时,效果就起作用了
请您帮我一下!
在您的多个边框示例中,PlaceKitten 图像在我的浏览器中没有显示(已在 Chrome 和 FF 中测试)。但是,在研究 PlaceKitten 后,我发现添加一个“g 修饰符”将显示灰度版本,果然,当我在 Chrome 中检查图像并将其源从 http://placekitten.com/200/200 更改为 http://placekitten.com/g/200/200 时,它就显示出来了。因此,我推测没有那个图像的彩色版本可用。
无论如何,这篇文章非常有用,值得收藏。
干杯
与 bootstrap 结合使用时,bootstrap 会破坏阴影,怎么会这样?
您好!您网站上的代码片段很酷,非常感谢!
我在阴影方面遇到了问题。当我使用这些值时,页面加载非常慢,并且在 Chrome 上卡住了。这些值太高了吗?
body{
-moz-box-shadow: inset 0 200px 430px #000000;
-webkit-box-shadow: inset 0 200px 430px #000000;
box-shadow: inset 0 200px 430px #000000;
}
此致,Felix
您好,Felix,
我在 Windows XP Professional 桌面上的 Chrome 40.0.2214.91 m 上本地测试你的规则没有出现任何问题。你能提供一个指向问题页面的链接吗?可能存在与其他代码的冲突,因为我在测试它的页面只有在 http://csswizardry.com/2011/01/the-real-html5-boilerplate/ 中找到的 HTML5 基本代码。
干杯
嗨,Wayne,非常感谢你的测试和回复。最后我直接去掉了阴影。这样我也很高兴,无需再深入研究。这是该页面:http://www.empiresofevil.tv
是的,也感谢你!
我正在使用阴影效果 5,我真的很喜欢所有不同的阴影效果。但我无法弄清楚如何让我的网页主体变成不同的颜色,同时保持包装器中的白色。当我尝试这样做时,阴影完全消失了。我尝试过向包装器添加一个 z-index,但这没有改变任何东西。如果有任何想法或建议,我将不胜感激。
这是我的包装器代码…
.wrapper {
background-color: #ffffff;
color: #000000;
margin: 0 auto;
padding: 0;
text-align: left;
box-shadow: 0 0 30px rgba(0, 0, 0, 0.4);
}
Johnna
我遇到了同样的问题,这是我的做法
获取具有背景色的父容器。
赋予它“position: relative”和“z-index: -1”
这对我有用。
它很好
多个边框.. 我真的很喜欢那个
非常好,谢谢
来自地球的人们,您好,我来自另一个世界。但我想要学习 html 和 css =P
我的问题是关于效果 2,是否可以使用 youtube 视频播放器实现?谢谢!xD
嗨,我在我的网站上使用这段代码突出显示图片,但有些盒子显示不正确。可能是因为它们的大小不同吗?
这是我正在使用的代码,
这是其余代码… 当它是一个方形盒子时,它完全按照我的意愿执行。如果可以使其适用于任何大小的盒子,那就太好了
是否有简单的方法让阴影适应盒子的尺寸… 这可能是因为我有一个硬编码的宽度,当盒子尺寸不同时,阴影可能不起作用… 请将鼠标悬停在
weavekingdom.com 上,你可以在网格中将鼠标悬停在图像上时看到效果(将鼠标悬停在幻灯片和类别下方的图像上)
如何将第 4 个效果应用于固定在顶部的导航栏?
如果你将位置从 relative 更改为 fixed,就会发生这种情况
嘿,Keith,你可以阅读这篇文章 (https://fluentthemes.com/create-box-shadow-css/),我发现这篇文章对详细了解 Box-Shadow 非常有帮助。特别是那里提供的语法太方便了。
尝试了效果 2,伪元素上的 z-index:-1 没有显示任何内容,z-index:0 可以正常工作,但它在顶部。也许是关于祖先堆叠上下文的问题?我不能真的更改祖先,只能更改元素和父元素 :(