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

相关文章
|
存储 JavaScript 中间件
Nuxt3 实战 (一):初始化项目
这篇文章介绍了Nuxt框架的基本信息,包括什么是Nuxt以及Nuxt3的优点。文章还介绍了Nuxt3的一些特点,如服务端渲染和静态站点生成、模块化、文件系统路由等。此外,文章还提供了项目安装的步骤和目录结构。最后,文章提到了下一步计划,即配置 Eslint、Prettier、Husky、lint-staged、commitlit项目提交规范的过程。
425 3
Nuxt3 实战 (一):初始化项目
|
前端开发 JavaScript API
Nuxt3 实战 (十一):添加路由 Transition 过渡效果和 Loading 动画
这篇文章介绍了Nuxt3框架中页面和布局的过渡效果设置方法,以及首屏加载动画的添加。通过配置nuxt.config.ts文件和添加CSS样式,可以实现页面过渡效果。同时,文章也提到了在页面中设置不同的过渡效果和为布局和页面同时设置过渡效果的方法。最后,文章以一个Github仓库链接和一个线上预览地址作为总结,表示遵循官方文档操作即可完成相关设置。
398 0
Nuxt3 实战 (十一):添加路由 Transition 过渡效果和 Loading 动画
|
存储 前端开发 安全
Nuxt3 实战 (十):使用 Supabase 实现 RESTful 风格 API 接口
这篇文章介绍了如何使用Supabase实现RESTful风格的API接口,用于网站分类和子站点的增删改查(CURD)功能。文章首先阐述了表设计,包括ds_categorys和ds_websites两张表的列名、类型和用途,并提到了为每张表添加的user_id和email字段以支持用户身份识别。接着,文章描述了接口设计,以ds_websites表为例,说明了如何通过RESTful API实现CURD功能,并给出了使用SupabaseClient实现插入数据的相关代码。文章最后提供了项目效果预览和总结,指出学习了Nuxt3创建接口及调用Supabase数据库操作。
376 0
Nuxt3 实战 (十):使用 Supabase 实现 RESTful 风格 API 接口
|
前端开发 API 开发者
Next.js 实战 (五):添加路由 Transition 过渡效果和 Loading 动画
这篇文章介绍了Framer Motion,一个为React设计的动画库,提供了声明式API处理动画和页面转换,适合创建响应式用户界面。文章包括首屏加载动画、路由加载Loading、路由进场和退场动画等主题,并提供了使用Framer Motion和next.js实现这些动画的示例代码。最后,文章总结了这些效果,并邀请读者探讨更好的实现方案。
330 0
Next.js 实战 (五):添加路由 Transition 过渡效果和 Loading 动画
|
安全 关系型数据库 API
Nuxt3 实战 (七):配置 Supabase 数据库
这篇文章介绍了如何为Nuxt项目集成Supabase数据库。文章首先阐述了选择Supabase作为Nuxt项目的数据库的理由,包括其良好的网络评价、与Nuxt的良好集成以及对用户认证和身份鉴权的支持。接着,文章详细介绍了Supabase的特点,如使用PostgreSQL作为数据库、提供完整的认证系统、支持实时数据同步和提供对象存储服务等。然后,文章指导读者如何在Nuxt项目中安装和配置Supabase,包括设置重定向策略和获取数据库访问密钥。最后,文章强调了在开发环境和生产环境中使用不同密钥的重要性。
701 0
Nuxt3 实战 (七):配置 Supabase 数据库
|
JavaScript
Nuxt3 实战 (四):安装 Nuxt UI 和配置 Typescript 类型检查
这篇文章介绍了在项目中安装和配置Nuxt UI以及TypeScript的步骤。作者在前言中提到考虑了AntDesignVue和Element-Plus,但最终选择了NuxtUI,因为它更适合年轻化的项目,并且与Nuxt兼容。安装Nuxt UI需要执行一系列命令,同时会自动安装一些相关模块。然后,可以在Nuxt应用中使用Nuxt UI的所有组件和可组合函数。此外,还介绍了如何添加图标库和配置TypeScript。
537 0
Nuxt3 实战 (四):安装 Nuxt UI 和配置 Typescript 类型检查
|
JavaScript 前端开发 API
vue3 v-md-editor markdown编辑器(VMdEditor)和预览组件(VMdPreview )的使用
本文介绍了如何在Vue 3项目中使用v-md-editor组件库来创建markdown编辑器和预览组件。文章提供了安装步骤、如何在main.js中进行全局配置、以及如何在页面中使用VMdEditor和VMdPreview组件的示例代码。此外,还提供了一个完整示例的链接,包括编辑器和预览组件的使用效果和代码。
vue3 v-md-editor markdown编辑器(VMdEditor)和预览组件(VMdPreview )的使用
|
数据可视化 开发工具 git
效率提升利器:11款实用且便捷的Git可视化管理工具
效率提升利器:11款实用且便捷的Git可视化管理工具
1588 0
Nuxt3 实战 (八):优雅的实现暗黑主题模式
这篇文章介绍了在Nuxt3中实现暗黑模式的过程。首先推荐使用color-mode库来轻易实现暗黑模式切换,并通过pnpm命令安装@nuxtjs/color-mode依赖。然后在nuxt.config.ts配置文件中注入依赖,并根据项目实际情况自定义配置。接着通过toggleDark函数实现切换动画,并在需要的地方加载组件<ColorMode/>,从而达到最终效果。
412 0
Nuxt3 实战 (八):优雅的实现暗黑主题模式
|
数据采集 搜索推荐 开发者
Nuxt3 实战 (十二):SEO 搜索引擎优化指南
这篇文章介绍了如何为Nuxt.js项目添加favicon图标和TDK(标题、描述、关键词),安装@nuxtjs/seo模块,以及如何设置Robots、Sitemap、OG Image、Schema.org、Experiments等。文章还提到了添加Google Analytics、Microsoft Clarity和Umami统计代码的方法。文章最后总结称,Nuxt.js 3集成了很多SEOModules,使开发者能够更加高效便捷地做好搜索引擎方面的优化。
740 0
Nuxt3 实战 (十二):SEO 搜索引擎优化指南