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

相关文章
|
9月前
|
存储 数据可视化 安全
万字长文读懂低代码(Low-Code)前世今生、分类、能力、趋势及选型
低代码是一种可视化应用开发方式,通过拖拽、配置等方式快速构建系统,降低开发门槛,提升效率。它起源于上世纪80年代,发展至今已广泛应用于ERP、CRM、MES等企业系统。低代码平台具备可视化编程、预置组件、快速部署、多端支持等功能,适合不同规模企业的多样化需求。相比传统开发,其优势在于缩短开发周期、促进业务与技术融合。
|
存储 JavaScript 中间件
Nuxt3 实战 (一):初始化项目
这篇文章介绍了Nuxt框架的基本信息,包括什么是Nuxt以及Nuxt3的优点。文章还介绍了Nuxt3的一些特点,如服务端渲染和静态站点生成、模块化、文件系统路由等。此外,文章还提供了项目安装的步骤和目录结构。最后,文章提到了下一步计划,即配置 Eslint、Prettier、Husky、lint-staged、commitlit项目提交规范的过程。
588 3
Nuxt3 实战 (一):初始化项目
|
JavaScript 前端开发 搜索推荐
Nuxt4.0初体验:一个简约、精美、现代化的个人站点导航!
这篇文章介绍了作者使用Nuxt 4.0重构个性化站点导航网站的经历,阐述了Nuxt 4.0的新特性和优势,如更清晰的项目结构、更好的TypeScript体验、更快的CLI和开发速度等,并且分享了重构过程中的体验和项目完成效果。同时,作者还对比了Nuxt.js与Next.js两个框架的优劣,表达了自己对Nuxt.js的偏好。
655 0
Nuxt4.0初体验:一个简约、精美、现代化的个人站点导航!
|
前端开发 JavaScript API
Nuxt3 实战 (十一):添加路由 Transition 过渡效果和 Loading 动画
这篇文章介绍了Nuxt3框架中页面和布局的过渡效果设置方法,以及首屏加载动画的添加。通过配置nuxt.config.ts文件和添加CSS样式,可以实现页面过渡效果。同时,文章也提到了在页面中设置不同的过渡效果和为布局和页面同时设置过渡效果的方法。最后,文章以一个Github仓库链接和一个线上预览地址作为总结,表示遵循官方文档操作即可完成相关设置。
522 0
Nuxt3 实战 (十一):添加路由 Transition 过渡效果和 Loading 动画
|
10月前
|
监控 安全 应用服务中间件
网站出现“SSL handshake failed“?SSL握手失败(525)的错误修复指南
本文详细解析了Cloudflare中常见的SSL握手失败(525)错误,从问题定义到根源分析,再到具体解决方案,提供了一站式修复指南。通过检查证书域名匹配、有效性及时钟同步等问题,结合Nginx/Apache配置调整与Cloudflare设置优化,帮助用户彻底解决525错误。同时,文章还提供了预防措施,如自动续期和SSL状态监控,确保网站长期稳定运行。跟随步骤操作,可有效避免SSL相关故障,保障网站安全访问。
7784 0
网站出现“SSL handshake failed“?SSL握手失败(525)的错误修复指南
|
前端开发 API 开发者
Next.js 实战 (五):添加路由 Transition 过渡效果和 Loading 动画
这篇文章介绍了Framer Motion,一个为React设计的动画库,提供了声明式API处理动画和页面转换,适合创建响应式用户界面。文章包括首屏加载动画、路由加载Loading、路由进场和退场动画等主题,并提供了使用Framer Motion和next.js实现这些动画的示例代码。最后,文章总结了这些效果,并邀请读者探讨更好的实现方案。
444 0
Next.js 实战 (五):添加路由 Transition 过渡效果和 Loading 动画
|
JSON JavaScript 定位技术
Echarts 绘制地图(中国、省市、区县),保姆级教程!
Echarts 绘制地图(中国、省市、区县),保姆级教程!
26134 154
|
监控 安全 中间件
Next.js 实战 (十):中间件的魅力,打造更快更安全的应用
这篇文章介绍了什么是Next.js中的中间件以及其应用场景。中间件可以用于处理每个传入请求,比如实现日志记录、身份验证、重定向、CORS配置等功能。文章还提供了一个身份验证中间件的示例代码,以及如何使用限流中间件来限制同一IP地址的请求次数。中间件相当于一个构建模块,能够简化HTTP请求的预处理和后处理,提高代码的可维护性,有助于创建快速、安全和用户友好的Web体验。
412 0
Next.js 实战 (十):中间件的魅力,打造更快更安全的应用
|
安全 关系型数据库 API
Nuxt3 实战 (七):配置 Supabase 数据库
这篇文章介绍了如何为Nuxt项目集成Supabase数据库。文章首先阐述了选择Supabase作为Nuxt项目的数据库的理由,包括其良好的网络评价、与Nuxt的良好集成以及对用户认证和身份鉴权的支持。接着,文章详细介绍了Supabase的特点,如使用PostgreSQL作为数据库、提供完整的认证系统、支持实时数据同步和提供对象存储服务等。然后,文章指导读者如何在Nuxt项目中安装和配置Supabase,包括设置重定向策略和获取数据库访问密钥。最后,文章强调了在开发环境和生产环境中使用不同密钥的重要性。
896 0
Nuxt3 实战 (七):配置 Supabase 数据库
|
JavaScript 开发工具 git
Nuxt3 实战 (三):使用 release-it 自动管理版本号和生成 CHANGELOG
这篇文章介绍了如何使用release-it工具实现以下功能:增加版本号并提交Git、生成变更日志(Changelog)并提交到Git、创建Git标签并推送到远程仓库、发布到npm等软件仓库、在GitHub、GitLab等平台创建发行版。文章还提到了前置知识,介绍了SemVer规范的内容和安装依赖的步骤。在文章的最后,展示了使用release-it生成的效果预览、git打的标签Tag以及待办事项(Todo)。最后还提到了安装NuxtUI。
398 0
Nuxt3 实战 (三):使用 release-it 自动管理版本号和生成 CHANGELOG