模拟Element Plus的导航栏样式

本文我们来介绍一下要如何实现Element Plus的导航栏样式,我们可以先看一下它官网的效果是什么样的:

image

我们可以看到它的导航栏在滚动的时候会有一个模糊的背景,并且有一个点状的背景图案,看起来蛮炫酷对不对? 下面是我使用tailwindcss的实现方法,有参考它的浏览器样式:

          <div
            aria-hidden="true"
            className={clsx(
              'absolute inset-x-0 -top-1 -bottom-6 -z-10',
              'bg-white/20 dark:bg-zinc-900/20',
              'bg-[radial-gradient(transparent_1px,rgb(228_228_231/0.3)_1px)]',
              'dark:bg-[radial-gradient(transparent_1px,rgb(39_39_42/0.4)_1px)]',
              'bg-size-[4px_4px]',
              'backdrop-blur-xs backdrop-saturate-50',
              '-webkit-backdrop-blur-xs -webkit-backdrop-saturate-50',
              'border-b border-transparent',
              'transition-all duration-500',
            )}
          />

来说说各个部分的作用:

  1. 定位和尺寸:
              'absolute inset-x-0 -top-1 -bottom-6 -z-10',

这部分代码将这个元素定位为绝对定位,并且让它覆盖整个导航栏。

  1. 基础半透明底色:
              'bg-white/20 dark:bg-zinc-900/20',

这部分代码设置了一个基础的半透明背景色,在浅色模式下是白色的20%透明度,在深色模式下是深灰色的20%透明度。

  1. 点状网格(这部分是关键!):
                'bg-[radial-gradient(transparent_1px,rgb(228_228_231/0.3)_1px)]',
                'dark:bg-[radial-gradient(transparent_1px,rgb(39_39_42/0.4)_1px)]',
                'bg-size-[4px_4px]',

这部分代码使用了CSS的radial-gradient来创建一个点状的背景图案,在浅色模式下是透明点和浅灰色网格,在深色模式下是透明点和深灰色网格。bg-size-[4px_4px]设置了背景图案的大小为4px x 4px。

  1. 毛玻璃效果:
              'backdrop-blur-xs backdrop-saturate-50',
              '-webkit-backdrop-blur-xs -webkit-backdrop-saturate-50',

这部分代码使用了CSS的backdrop-filter属性来实现毛玻璃效果,backdrop-blur-xs设置了模糊程度,backdrop-saturate-50设置了饱和度。为了兼容Safari浏览器,还添加了-webkit-前缀的属性。

  1. 边框:
                    'border-b border-transparent',
                    'transition-all duration-500',

这部分代码设置了一个底部边框,初始状态是透明的,并且添加了过渡效果,当滚动时可以通过JavaScript来改变边框的颜色和透明度,从而实现边框的淡入效果。

让我们来看看最终的实现效果吧:

感谢你的阅读,希望能够给在看的你带来些许帮助。