跳到正文

CSS 阴影生成

Box Shadow Generator

一边预览一边叠多层盒阴影和文字阴影,并导出对应的 CSS。

用多层组合出一个阴影,输出为 `box-shadow`、`text-shadow` 或 `drop-shadow()` 滤镜。值得知道的是,一层几乎从来不对:真实的阴影是一个紧凑的深色接触项加一个宽阔的浅色环境项,而单个阴影只能是其中之一。页面会为此唠叨,并告诉你目标属性表达不了一层里的哪些部分。

🔒 完全在你的浏览器里运行shadowcssgenerator
卡片
应用到
  • 第1层
  • 第2层

预设

偏移大致随高度线性增长,模糊按它的平方根增长——平面之上一个点光源真实产生的就是这个样子。影子越大不透明度越低,同样的遮挡摊到了更大的面积上;把这层关系弄反,正是手调出来的影子看着像脏印子的原因。

CSS

box-shadow: 0px 1px 3px rgb(0 0 0 / 0.1), 0px 4px 8px -2px rgb(0 0 0 / 0.08);

怎么用

  1. 说明它要放在什么上面

    卡片或按钮用 `box-shadow`,文字用 `text-shadow`,任何有真实透明度的东西——图标或抠出来的 PNG——用 `drop-shadow()`。预览会随之改变,所以你看的永远是对的东西。

  2. 从预设开始

    它们是两层叠加,偏移随高度线性增长,模糊随其平方根增长,不透明度随阴影散开而下降。最后那一点是人们手动时会弄反的部分,弄反了就是阴影看起来像一块污渍的原因。

  3. 把表面颜色设成你实际有的那个

    在白色上调好的阴影在灰色页面上太弱,在深色页面上太强。表面色块就是为了让你对着组件真正所在的背景来调。

  4. 调整各层

    每层的偏移、模糊、扩展和颜色,以及一个内阴影复选框。需要 alpha 时输入颜色而不是用色块——阴影颜色几乎总是半透明的,而原生颜色输入表示不了这一点。

  5. 复制声明

    属性名随目标改变,所以你复制的东西可以原样粘贴。

常见问题

切换目标后我的内阴影和扩展消失了。它们去哪了?

它们被丢掉了,页面在输出上方会说明。`text-shadow` 的语法里没有内阴影也没有扩展——它接受 x、y、模糊和颜色,就这些。`drop-shadow()` 也没有内阴影和扩展。照样输出它们会产生一条浏览器整个丢弃的声明,那比丢掉撑不过去的那部分更糟。

为什么色块和我输入的不一致?

色块是 `<input type="color">`,它只懂 `#rrggbb`,根本没有 alpha。它显示的是你输入内容的尽力而为的十六进制,文本框才是权威。值里有 alpha 时,编辑文本。

`drop-shadow()` 只是一个更慢的 `box-shadow` 吗?

不是,它回答的是另一个问题。`box-shadow` 描的是边框盒,所以透明 PNG 得到一个矩形。`drop-shadow()` 跟随 alpha 通道,所以描的是实际的形状。它确实要多一次合成,也做不了内阴影和扩展,所以形状要紧时用它,其他时候用 `box-shadow`。

多少层算太多?

两三层就能做到 UI 需要的一切。每一层都是合成器在每次绘制时多跑的一次模糊,两百行列表上的六层阴影在手机上是可测量的帧率代价。预设停在三层就是这个原因。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。