Neumorphism生成器

输入底色、偏移距离、强度、圆角与形状,实时生成新拟态(Neumorphism,也叫 Soft UI)的 CSS。默认底色 #e0e0e0、距离 20、强度 0.15、圆角 24、形状凸出,结果区直接给出 box-shadow: 20px 20px 40px #bebebe, -20px -20px 40px #e5e5e5,右侧方块同步预览,代码可一键复制。

只接受 #rgb 或 #rrggbb 两种写法,两侧输入框联动
允许 2~60;模糊半径取它的两倍
亮色与暗色各自的混合比例
允许 0~200;越大越柔和
凸出用外阴影,凹陷与按压用 inset
box-shadow: 20px 20px 40px #bebebe, -20px -20px 40px #e5e5e5;

底色 #e0e0e0 → 亮色 #e5e5e5 / 暗色 #bebebe;模糊 40px(2 × 20);强度 0.15;形状 凸出;圆角 24px

提示:改任意输入框或裸按 Enter 都会立即重算;预览区的底色与方块底色相同,这正是新拟态能显现的前提。

预设对照表(底色 × 距离 × 强度 × 形状,含算出的亮色与暗色)

底色距离强度形状亮色暗色box-shadow
#e0e0e0200.15凸出#e5e5e5#bebebebox-shadow: 20px 20px 40px #bebebe, -20px -20px 40px #e5e5e5;
#e0e0e0200.15凹陷#e5e5e5#bebebebox-shadow: inset 20px 20px 40px #bebebe, inset -20px -20px 40px #e5e5e5;
#e0e0e0200.15按压#e5e5e5#bebebebox-shadow: inset 6px 6px 12px #bebebe, inset -6px -6px 12px #e5e5e5;
#e0e0e0100.10凸出#e3e3e3#cacacabox-shadow: 10px 10px 20px #cacaca, -10px -10px 20px #e3e3e3;
#e0e0e0300.20凸出#e6e6e6#b3b3b3box-shadow: 30px 30px 60px #b3b3b3, -30px -30px 60px #e6e6e6;
#f0f0f3200.15凸出#f2f2f5#cccccfbox-shadow: 20px 20px 40px #cccccf, -20px -20px 40px #f2f2f5;
#f5f5f5120.08凸出#f6f6f6#e1e1e1box-shadow: 12px 12px 24px #e1e1e1, -12px -12px 24px #f6f6f6;
#d1d9e6180.12凸出#d7dee9#b8bfcabox-shadow: 18px 18px 36px #b8bfca, -18px -18px 36px #d7dee9;
#c8d0e7240.18凹陷#d2d8eb#a4abbdbox-shadow: inset 24px 24px 48px #a4abbd, inset -24px -24px 48px #d2d8eb;
#e8ebf3160.14按压#ebeef5#c8cad1box-shadow: inset 5px 5px 10px #c8cad1, inset -5px -5px 10px #ebeef5;
#2e3239200.15凸出#4d5157#272b30box-shadow: 20px 20px 40px #272b30, -20px -20px 40px #4d5157;
#ffffff200.10凸出#ffffff#e6e6e6box-shadow: 20px 20px 40px #e6e6e6, -20px -20px 40px #ffffff;
#e0e0e060.05凸出#e2e2e2#d5d5d5box-shadow: 6px 6px 12px #d5d5d5, -6px -6px 12px #e2e2e2;
#b8c0cc400.25凸出#cad0d9#8a9099box-shadow: 40px 40px 80px #8a9099, -40px -40px 80px #cad0d9;
#1f2937280.30凹陷#626973#161d27box-shadow: inset 28px 28px 56px #161d27, inset -28px -28px 56px #626973;
#eceff180.06按压#edf0f2#dee1e3box-shadow: inset 2px 2px 4px #dee1e3, inset -2px -2px 4px #edf0f2;

对照表由同一套算法算出,可用来挑起点:先找一行接近你设计稿的组合,再把它的四个参数填回上方微调。

使用方法

  1. 挑底色:用取色器或直接改十六进制文本框,两者联动。默认 #e0e0e0,这也是新拟态最典型的浅灰底;只接受 #rgb 与 #rrggbb 两种写法,其它形式会给出具体提示。
  2. 填偏移距离 d,默认 20,允许 2~60。它同时决定阴影偏移与模糊:模糊取 2 × d,所以改这一个数,阴影的远近和柔和度会一起变。
  3. 填强度,默认 0.15,允许 0.02~0.5。它决定亮色与暗色被推出多远:0.15 表示往白、往黑各走 15%。
  4. 填圆角,默认 24,允许 0~200;再选形状:凸出用外阴影,凹陷与按压用 inset,按压的距离自动缩到 0.3 倍。
  5. 点「生成 CSS」或裸按 Enter,结果区给出完整声明(background + border-radius + box-shadow),下方单独给出 box-shadow 一行,预览方块同步更新;点「复制 CSS」直接带走。

这个工具能解决什么问题

一是把「凭感觉调阴影」变成有公式可依。手写新拟态时,很多人反复试 #ffffff 与 #000000 的透明度,试出来的颜色与底色无关,换个底色就得重来。Neumorphism生成器让亮暗两色由底色按比例混合导出,底色一改,两色自动跟着走,风格不会串味。

二是一次给出可直接粘贴的声明。新拟态至少要两条阴影:一条向右下、一条向左上,颜色一暗一亮。少了任何一条就只剩投影,看起来像普通卡片而不是软界面;本页两条一起生成,并连同 background 与 border-radius 一起输出,粘进样式表即可。

三是把三种形态的差异讲清楚。凸出、凹陷、按压只差 inset 关键字与距离的倍数,但视觉语义完全不同:凸出是可点的块,凹陷是槽或输入框,按压是「已经按下」。对照表里同一组参数给出三种结果,可以直接横向比较。

本页不做这些事:不生成渐变或玻璃拟态;不做多元素的光照一致性检查;不评估你整站的对比度是否达标。它只回答「给定底色与这四个参数,新拟态的 CSS 是什么」。

原理与变量说明

前提:元素与背景必须同色。新拟态不靠描边、不靠色差,只靠阴影的方向与明暗制造起伏。所以本页输出的 background 与预览区背景是同一个色值,一旦把它放到别的底色上,两条阴影会立刻露馅——这是它与普通阴影最大的区别,也是它挑背景的原因。

亮色与暗色怎么来。逐通道线性混合:mix(a, b, t) = round(a + (b − a) × t)。亮色 = mix(底色, #ffffff, 强度),暗色 = mix(底色, #000000, 强度)。以默认值为例,底色 224,亮色 = round(224 + (255 − 224) × 0.15) = round(228.65) = 229 = #e5e5e5;暗色 = round(224 + (0 − 224) × 0.15) = round(190.4) = 190 = #bebebe。

这里藏着一个反直觉的现象。亮底上,往白只走了 4.65 阶(离白只剩 31 阶的 15%),往黑却走了 33.6 阶(自身亮度 224 的 15%)。所以浅色底上暗部远比亮部显眼,凸起感几乎全靠右下那道暗影撑起来。换到深底则完全反过来:#2e3239 在强度 0.15 下亮色跳到 #4d5157(+31 阶),暗色只到 #272b30(−7 阶),深色主题的高光成了主角。这就是为什么同一组参数照搬到深色模式会「发飘」。

模糊为什么取 2 × d。偏移 d 决定阴影往右下挪多远,模糊半径取它的两倍,是为了让阴影边界完全化开、看不出硬边,只在右下留一团逐渐变淡的暗。距离 20 → 模糊 40;距离拉到 60 时模糊 120,块面会显得离底板很远,小卡片上通常不合适。

三种形态的差别。凸出是外阴影,暗在右下、亮在左上,视觉上光源来自左上;凹陷把两条都加上 inset,阴影画在盒子内侧,于是同一个方向的光照下看起来是「挖下去一块」,常用来做输入框与轨道槽;按压同样用 inset,但距离取 round(d × 0.3)——按下后形变量变小,模糊也跟着缩到 2 × 6 = 12,这正是「按下」的手感来源。

完整示例(默认输入实测)

Neumorphism生成器的默认条件是:底色 #e0e0e0、距离 20、强度 0.15、圆角 24、形状凸出,与页面打开时的控件取值完全一致。逐步核对:

再换两种形态交叉验证。凹陷:两条都加 inset,其余不变,得到 box-shadow: inset 20px 20px 40px #bebebe, inset -20px -20px 40px #e5e5e5;——亮暗两色与凸出完全相同,变的只是画在内侧还是外侧。按压:距离取 round(20 × 0.3) = 6,模糊 12,得到 box-shadow: inset 6px 6px 12px #bebebe, inset -6px -6px 12px #e5e5e5;。三者共用同一套亮暗色,只有方向与尺度不同,这正是预设表前四行能直接对照的原因。

对照表

下表给出 16 组常见组合,每行都列出底色、距离、强度、形状,以及由同一套算法算出的亮色、暗色与完整 box-shadow。前 12 行直接显示,后 4 行点「加载更多」展开。

横向读这张表能看出三件事:同一底色下距离越大,模糊越大、块面越飘;强度从 0.05 提到 0.30,亮暗两色的差距从几个色阶拉开到几十个色阶;凹陷与凸出共享同一对亮暗色,区别只在 inset。

表里的深色组合(#2e3239、#1f2937)说明深色主题下高光主导,需要比浅色主题更小的强度才不至于发飘。需要带走时,点「导出对照表 CSV」得到带 UTF-8 BOM 的文件,Excel 打开中文不乱码;点「复制对照表」得到 TSV,可直接粘进任意表格软件。

结果边界与舍入

常见问题

为什么元素必须和背景同色?

新拟态靠阴影的方向与明暗表现起伏,不靠色差。元素换成别的颜色后,两条阴影的方向感还在,但边界会露出来,看起来就成了普通投影。本页输出的 background 与预览区背景用的是同一个色值,就是为了满足这个前提。

亮色和暗色是怎么算出来的?

逐通道线性混合后取整:亮色 = round(底色 + (255 − 底色) × 强度),暗色 = round(底色 + (0 − 底色) × 强度)。默认 224 与强度 0.15 得亮色 229、暗色 190,即 #e5e5e5 与 #bebebe。

模糊为什么要取距离的两倍?

为了让阴影边界彻底化开。偏移只决定阴影挪多远,模糊决定它化得多柔;取两倍时,右下那一团暗从元素边缘向外渐隐,看不出硬边,才有「从底板里长出来」的感觉。

凸出、凹陷、按压该选哪个?

可点击的块状元素选凸出;输入框、轨道槽、已选中的容器选凹陷;需要表现「正在被按下」的按钮选按压。后两者都用 inset,按压的距离只有凸出的 0.3 倍,形变更小。

我把强度调到 0.5 为什么反而难看?

强度越大,亮暗两色越接近纯白与纯黑,阴影变得又黑又硬,柔和感消失,看起来就是普通投影。浅底上 0.10~0.20、深底上 0.06~0.15 通常是更稳妥的区间。

深色主题要怎么调?

深底上往白混合的幅度远大于往黑,高光会非常抢眼。做法是降低强度(例如 0.08),必要时同时减小距离;对照表最后四行里有 #1f2937 与 #2e3239 的样例可以直接参考。

填 #eee 或 rgb(224,224,224) 可以吗?

#eee 可以,会被展开成 #eeeeee 参与计算;rgb(224,224,224) 不可以,本页只接受十六进制写法,会提示「底色」不是合法色值并给出允许的形式。

新拟态能直接用在生产环境吗?

可用,但不能只靠它传达信息。默认组合下亮暗与底色的对比度只有 1.05:1 与 1.41:1,远达不到 3:1 的非文本对比要求;弱视用户在纯新拟态界面上很难分辨边界,请配合文字、图标或细边框。

相关工具

更多样式生成工具见生成器分类页。