Nuxt3 实战 (五):Header 头部布局

简介: 这篇文章介绍了作者忙于公司系统迭代需求,但抽空完成了布局的Header部分。文章提到了需求的拆分,布局的组件拆分,并介绍了Nuxt框架以及安装和启用插件的步骤。还提到了白天暗黑模式切换组件和SVG跟随模式的组件的创建。最后,文章提到了PC端和移动端的最终实现效果,并给出了Github仓库和在线预览链接。

前言

这两周一直忙公司系统的迭代需求,没啥时间捣鼓自己的小项目,趁着项目进入测试收尾阶段,抽空把 Layout 布局的 Header 部分先搞好。

需求拆分

  1. 顶部左侧放 Logo,右边放社交图标,暗黑模式切换
  2. 提前准备好 Logo 和网站 favicon.ico 图标
  3. 布局组件拆分

先简单这样布局,后期会考虑加一个 搜索输入框

Layouts 布局

Nuxt 提供了一个布局框架,用于将常见的 UI 模式提取为可重用的布局。

  1. app.vue 中添加 <NuxtLayout>,可以启用布局:
    <template>
    <NuxtLayout>
     <NuxtPage />
    </NuxtLayout>
    </template>
    
  2. 安装 @nuxt/imagenuxt-icons
    pnpm add @nuxt/image nuxt-icons -D
    
    nuxt.config.ts 文件中启用:
    modules: ['@nuxt/image', 'nuxt-icons'],
    
  3. 新建 components/AppColorMode.vue 白天暗黑模式切换组件:

    <script setup lang="ts">
    const colorMode = useColorMode()
    
    function toggleDark() {
    colorMode.value = colorMode.value === 'dark' ? 'light' : 'dark'
    }
    
    </script>
    
    <template>
    <UTooltip :text="`切换${$colorMode.value === 'dark' ? '白天' : '黑夜'}模式`">
      <UButton
        :icon="$colorMode.value === 'dark' ? 'i-heroicons-moon-solid' : ' i-heroicons-sun-solid'"
        size="sm"
        variant="ghost"
        class="text-gray-700 dark:text-gray-200 hover:text-gray-900 dark:hover:text-white hover:bg-gray-50 dark:hover:bg-gray-800"
        @click="toggleDark"
      />
    </UTooltip>
    </template>
    
  4. 新建 components/UColorModeSVG.vue 组件,SVG 跟随白天暗黑模式:

    <script setup lang="ts">
    const colorMode = useColorMode()
    
    defineProps<{
    name:string; // svg 路径
    lightFill?:string; // 亮色模式填充
    darkFill?:string; // 暗色模式填充
    className?:string; // 图片样式
    }>()
    
    // 判断是否暗色模式
    const isDark = colorMode.preference === 'dark'
    </script>
    
    <template>
    <nuxt-icon
      :name="name"
      :fill="isDark ? darkFill : lightFill"
      :class="className"
    />
    </template>
    
    <style>
    .nuxt-icon svg{
    width:auto;
    height:auto;
    margin-bottom: 0;
    }
    </style>
    
  5. 新建 components/AppHeader 头部组件:

    <template>
    <header class="static top-0 h-14 shadow-md dark:shadow-white-500/50 backdrop-blur dark:bg-transparent transition-all py-3 px-4 md:px-8 lg:px-32">
      <nav class="flex gap-4 justify-between items-center">
        <!-- 左侧 logo -->
        <HeaderLogo />
        <!-- 右侧 社交图标 -->
        <HeaderSocial />
      </nav>
    </header>
    </template>
    
    <style scoped>
    .dark header{
    box-shadow: 0 4px 6px -1px rgb(255 255 255 / 0.1), 0 2px 4px -2px rgb(255 255 255 / 0.1);
    }
    </style>
    
  6. 新建 layouts/default.vue 默认布局组件:

    <template>
    <div>
     <AppHeader />
     <slot />
    </div>
    </template>
    

最终效果

1、 PC端
bnwm7kwafxe8y4lwgrblgu4cobsb9tdc.png
qj9a501lmupms62vipaywny6v4qpke44.png

2、 移动端
s5ucgv4eihym1l9alufeu344w6l1tim0.png
dy3u2hamgsnp7fnmtkhb1okrbmqd4hky.png

总结

目前实现的效果比较简单,先把基本布局和功能实现,后期再具体调整。

好了,今天就到这吧!

Github 仓库dream-site

线上预览dream-site.cn

相关文章
|
7月前
|
前端开发
当当网头部和尾部——CSS源码
当当网头部和尾部——CSS源码
|
7月前
uni-app 4.4封装头部导航组件(二)
uni-app 4.4封装头部导航组件(二)
62 0
|
7月前
uniapp自定义头部导航怎么实现?
uniapp自定义头部导航怎么实现?
|
7月前
|
JSON 数据格式
uniapp自定义头部导航样式
uniapp自定义头部导航样式
280 0
|
7月前
Nuxt3 实战 (六):Footer 底部布局
这篇文章介绍了开发项目的Footer布局,参考了Nuxt-UI官网的布局。文章从需求拆分开始,讲解了准备工作和组件开发的过程。最后展示了最终效果,并进行了简单的总结,指出下一篇将讨论主体内容的开发。文末提供了Github仓库和线上预览的链接。
Nuxt3 实战 (六):Footer 底部布局
|
7月前
uni-app 4.3封装头部导航组件(一)
uni-app 4.3封装头部导航组件(一)
57 0
|
JavaScript
js滚动导航定位--头部demo效果示例(整理)
js滚动导航定位--头部demo效果示例(整理)
|
前端开发
前端学习笔记202305学习笔记第二十二天-Header和Footer组件3
前端学习笔记202305学习笔记第二十二天-Header和Footer组件3
52 0
|
前端开发
前端学习笔记202305学习笔记第二十二天-Header和Footer组件1
前端学习笔记202305学习笔记第二十二天-Header和Footer组件1
49 0