CSS技巧:人人都能看懂的新拟态实现思路

🧑‍💻
推荐全栈学习资源:
  • Next.js 中文文档:样式和官网一样的中文文档,创造沉浸式Next.js中文学习体验。
  • 《Chrome插件全栈开发》:真实出海项目的实战教学课,讲解Chrome插件和Next.js端的全栈开发,帮助你半个月内成为全栈出海工程师。
  • 曾经有段时间新拟态火爆前端圈,时过境迁,新拟态并没有走入千家万户,而只存在于一些小众的产品上。究其原因,首先是设计成本太高,其次是前端程序员知道新拟态是用 box-shadow 来实现,但就是不知道怎么才能做出符合自己审美的新拟态。

    今天,我们就来扒一扒新拟态的奥妙,以前端工程师的角度总结出实现新拟态的正确思路。

    在我看了一众新拟态的设计后,总结了三个要点:光与背景、box-shadow、细节打磨。且看我下文分析,看我的思路对不对。

    欢迎加入「🌍独立全栈开发交流群」,一起学习交流前端和Node技术。

    光与背景

    理解新拟态设计的第一步,不是学习 box-shadow 的用法,而是思考光与背景的作用。新拟态的设计方法可以总结为:有光(打在平面上)就有了 box-shadow。我们得通过平面来强调光的效果,不信你看下面这张图:

    1.png

    上下两个新拟态按钮,除了背景不同,其他代码一样,下面的看起来明显更立体。这就是背景的作用,合理的背景能让用户好像看到光源一样。背景之于新拟态设计,就是画龙点睛的那一笔。

    那么什么样的搭配更合理?我总结出来这样的规律:

    • 以白色的主题为例,背景不能用白色,而要使用较浅的色调,如灰色、蓝灰色或暖色调,这样才能指示出光源方向(如图中按钮左上白色区域)
    • 按钮可以用与背景一样或相近的颜色,这样更有凹凸感。

    你也可以去观察新拟态设计的产品,他们的背景和按钮/方块也基本符合这样的规律。

    box-shadow详细用法

    如果背景的选择能帮你打开新拟态的设计思路,那么学好 box-shadow 则会让你打开创造新拟态产品的大门。

    box-shadow 属性在CSS中用于向框添加一个或多个阴影。它可以接受多组的值来创建多层阴影,每组值描述了一个阴影的外观。以下是可能的值:

    1. inset (可选):如果不使用这个值,阴影将在框的外部;如果使用了这个值,阴影在框的内部(即凹陷效果)。
    2. offset-x (必须):水平阴影的位置。正值阴影向右,负值向左。
    3. offset-y (必须):垂直阴影的位置。正值阴影向下,负值向上。
    4. blur-radius (可选):模糊距离。其值越大,阴影就越大且越模糊。如果没有设置这个值,阴影的边缘将是硬边缘。
    5. spread-radius (可选):扩散半径。正值会使阴影扩大且边缘更加模糊,负值会使阴影收缩。
    6. color (可选):定义阴影的颜色。可以使用任何CSS颜色值(如 #rrggbb, rgb(), rgba(), hsl(), hsla() 等)。

    使用示例:

    /* 单个阴影,没有模糊,黑色 */
    box-shadow: 5px 5px 0 0 black;
     
    /* 单个阴影,模糊半径为 5px */
    box-shadow: 3px 3px 5px black;
     
    /* 单个阴影,带有扩散效果 */
    box-shadow: 3px 3px 5px 1px black;
     
    /* 内部阴影 */
    box-shadow: inset 3px 3px 5px black;
     
    /* 多个阴影 */
    box-shadow: 3px 3px 5px black, -3px 0 5px grey;
     
    /* 阴影带有透明度 */
    box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.5);
     

    box-shadow 的值不复杂,但如果不常使用,我们是很难直观看出数值对应的效果,所以还是熟能生巧,多练练。

    细节打磨

    上面两节介绍的是新拟态的核心设计方法,但如果你实操一下,仍然会觉得创造出来的效果跟预期依然有所差异,但又不知道问题在哪里。这里还有一些设计细节的建议可以供你参考:

    1. 阴影和光效:
      • 双重阴影:利用内阴影和外阴影来创造凹凸感。通常使用较浅的阴影(浅色)模拟光源,以及较深的阴影(暗色)模拟深度。
      • 柔和阴影:阴影应该是柔和且分布广泛,避免使用过于尖锐或深色的阴影。
    2. 几何形状和边框:
      • 圆角:新拟态设计倾向于使用圆角。这些圆角可以帮助元素更自然地融入背景。
      • 简洁边框:边框通常细致且不突出,有时甚至是透明的,以增加立体感。
    3. 交互效果:
      • 交互状态:为不同的状态(如hover、active)设计不同的视觉效果,比如改变阴影深度或颜色。
      • 过渡动画:使用平滑的过渡效果,使状态变化更自然、更有吸引力。
    4. 字体和图标:
      • 简洁字体:使用简洁、易读的字体,以保持整体设计的一致性。
      • 图标风格:图标应与整体风格保持一致,避免过于复杂或扁平化的设计。

    作为一名不会设计的前端工程师,只能通过不断打磨细节来提升自己的设计能力啦~

    你可以在CodePen看我写的demo👇

    结语

    你看,看起来高大上的新拟态总结起来也不过就这么点内容,拿出你的CSS,码一个自己满意的新拟态吧!