CSS 面试题 目录

请解释 box-shadow 和 drop-shadow 的区别。

推荐答案

box-shadowdrop-shadow 都是 CSS 中用来添加阴影效果的属性,但它们作用的对象和阴影的生成方式有所不同。

  • box-shadow: 为元素的整个盒子模型(包括内容、内边距、边框)添加阴影。阴影会围绕整个矩形盒子生成,不会考虑元素内容的形状或透明度。
  • drop-shadow: 为元素的图像内容(包括透明区域)添加阴影。阴影会跟随图像内容的形状生成,透明区域不会产生阴影。

简单来说,box-shadow 是盒子阴影,而 drop-shadow 是内容阴影。

本题详细解读

box-shadow

box-shadow 属性用于为 HTML 元素的盒子模型添加一个或多个阴影。其语法如下:

  • h-offset: 水平偏移量,正值表示阴影在右侧,负值表示在左侧。
  • v-offset: 垂直偏移量,正值表示阴影在下方,负值表示在上方。
  • blur: 模糊半径,值越大,阴影越模糊。
  • spread: 阴影的扩展半径,正值表示阴影扩大,负值表示阴影缩小。
  • color: 阴影的颜色。
  • inset: 可选值,表示阴影在盒子内部,而不是外部。

特点:

  • 阴影总是矩形,并且跟随元素的盒子模型。
  • 即使元素的内容是不规则形状或有透明区域,阴影仍然是矩形的。
  • 不关心元素内容的透明度。

使用场景:

  • 为按钮、卡片等矩形元素添加阴影。
  • 创建立体感。
  • 模拟元素悬浮的效果。

drop-shadow

drop-shadow 属性用于为元素的图像内容添加阴影。它是一个 CSS filter 属性。其语法如下:

  • h-offset: 水平偏移量,正值表示阴影在右侧,负值表示在左侧。
  • v-offset: 垂直偏移量,正值表示阴影在下方,负值表示在上方。
  • blur: 模糊半径,值越大,阴影越模糊。
  • color: 阴影的颜色。

特点:

  • 阴影跟随图像内容的形状,包括透明区域。
  • 阴影会忽略元素盒子模型的边距和边框。
  • 更适用于具有复杂形状或透明区域的元素,例如图片、图标、文字等。

使用场景:

  • 为透明背景的 PNG 图片添加阴影,保持图像形状。
  • 为 SVG 图标添加阴影。
  • 创建具有自然轮廓的阴影效果。

总结

特性 box-shadow drop-shadow
阴影对象 元素的整个盒子模型(包括 padding、border) 元素的图像内容 (包括透明区域)
阴影形状 矩形 跟随图像内容形状
透明度 不考虑内容透明度 考虑内容透明度,透明区域不会产生阴影
应用场景 矩形元素、创建立体感 透明图像、SVG 图标、需要不规则形状阴影的情况
使用方式 独立属性 box-shadow CSS filter 属性 filter: drop-shadow()
纠错
反馈