Nuxt3 实战 (六):Footer 底部布局

news2024/12/24 21:16:33

前言

今天开发项目的 Footer 布局,这里我们参考 Nuxt-UI 官网的布局。

需求拆分

  1. 准备好域名备案号和 icp 图标
  2. 底部社交按钮链接或其他链接
  3. 布局组件开发

Footer 布局

  1. 新建 components/AppFooter.vue 文件:
<template>
 <footer class="fixed bottom-0 w-full">
   <UDivider :avatar="{ src: '/logo.svg' }" />
   <div class="flex justify-between items-center px-4 md:px-8 lg:px-32 py-3 max-sm:flex-col -mt-2.5">
     <!-- icp 备案 -->
     <ULink
       to="https://beian.miit.gov.cn/#/Integrated/index"
       target="_blank"
       active-class="text-primary"
       inactive-class="text-sm text-gray-400 hover:text-gray-600 dark:hover:text-gray-300"
     >
       <div class="flex items-center gap-2">
         <NuxtImg
           src="/icp.png"
           alt="粤ICP备2023007649号-3"
           class="w-4"
         />ICP2023007649-3
       </div>
     </ULink>
     <!-- 社交图标 -->
     <div class="max-sm:order-first">
       <!-- github -->
       <SocialButton
         icon="i-ri-github-line"
         url="https://github.com/baiwumm"
         tip="Github"
       />
       <!-- 微信 -->
       <SocialButton
         icon="i-ri-wechat-line"
         url="https://wechat.baiwumm.com/"
         tip="微信"
       />
       <!-- 电子邮箱 -->
       <SocialButton
         icon="i-ri-mail-line"
         url="mailto:baiwumm@foxmail.com"
         tip="Email"
       />
       <!-- 博客 -->
       <SocialButton
         icon="i-ri-quill-pen-line"
         url="https://baiwumm.com"
         tip="博客"
       />
     </div>
   </div>
 </footer>
</template>
  1. layouts/default.vue 文件配置组件:
<template>
 <div>
   <!-- header -->
   <AppHeader />
   <!-- main -->
   <slot />
   <!-- footer -->
   <AppFooter />
 </div>
</template>
  1. 这里我们顺便给 AppColorMode 组件加个切换过渡动画,让网站丰富一点:
 <script setup lang="ts">
 const colorMode = useColorMode()

 // 切换模式
 const setColorMode = () => {
   colorMode.value = colorMode.value === 'dark' ? 'light' : 'dark'
 }

 // 判断是否支持 startViewTransition API
 const enableTransitions = () =>
   'startViewTransition' in document &&
   window.matchMedia('(prefers-reduced-motion: no-preference)').matches

 // 切换动画
 async function toggleDark({ clientX: x, clientY: y }: MouseEvent) {
   const isDark = colorMode.value === 'dark'

   if (!enableTransitions()) {
     setColorMode()
     return
   }

   const clipPath = [
     `circle(0px at ${x}px ${y}px)`,
     `circle(${Math.hypot(
       Math.max(x, innerWidth - x),
       Math.max(y, innerHeight - y)
     )}px at ${x}px ${y}px)`
   ]

   await document.startViewTransition(async () => {
     setColorMode()
     await nextTick()
   }).ready

   document.documentElement.animate(
     { clipPath: !isDark ? clipPath.reverse() : clipPath },
     {
       duration: 300,
       easing: 'ease-in',
       pseudoElement: `::view-transition-${!isDark ? 'old' : 'new'}(root)`
     }
   )
 }
 </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>

 <style>
 ::view-transition-old(root),
 ::view-transition-new(root) {
   animation: none;
   mix-blend-mode: normal;
 }

 ::view-transition-old(root),
 .dark::view-transition-new(root) {
   z-index: 1;
 }

 ::view-transition-new(root),
 .dark::view-transition-old(root) {
   z-index: 9999;
 }
 </style>

最终效果

在这里插入图片描述

总结

这个篇章内容比较简单,下一篇开发主体内容。

好了,今天就到这吧!

Github 仓库:dream-site

线上预览:dream-site.cn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1633160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是编译与链接呢!

引言&#xff1a; 在ANSIC中存在两种编译环境 第一种是翻译环境&#xff1a;可以将环境中的源代码转换成能被机器执行的二进制指令&#xff1b;翻译环境即为我们所使用的编译器&#xff0c;可以将test.c文件翻译为test.exe文件 第二种是运行环境&#xff1a;它用于实际代码的…

LabVIEW 2024安装教程(附免费安装包资源)

鼠标右击软件压缩包&#xff0c;选择“解压到LabVIEW.2024”。 返回解压后的文件夹&#xff0c;鼠标右击“ni_labview-2024”选择“装载”。 鼠标右击“Install”选择“以管理员身份运行”。 点击“我接受上述2条许可协议”&#xff0c;然后点击“下一步”。 点击“下一步”。 …

Docker容器中安装vim

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Docker 是一个开源…

uni-app中配置自定义条件编译

前提&#xff1a;官网提供的自定义编译不满足条件 package.json | uni-app官网 下文&#xff1a;不详细写&#xff0c;主要写关键思路 package.json文件 主要看scripts的执行命令&#xff0c;其他依赖就是用vue-cli方式创建uni-app项目生成的 {"name": "un…

计算机组成实验(5)

一、实验目的和要求 1.1 实验目的 1. 复习二进制加减、乘除的基本法则 2. 掌握补码的基本原理和作用 3. 了解浮点数的表示方法及加法运算法则 4. 进一步了解计算机系统的复杂运算操作 1.2 实验要求 1. 熟悉二进制原码补码的概念,了解二进制加减乘除的原理与操作实现。 …

部署YUM仓库和NFS共享存储服务

目录 1. YUM仓库服务 1.1 YUM概述 1.2 准备安装源 1.3 yum在线源替换方法 2.制作YUM源 2.1制作ftp源 3.yum软件包的下载方式 4.NFS共享存储服务 4.1 NFS 4.2 NFS网络文件系统 4.3 NFS配置 1. YUM仓库服务 1.1 YUM概述 yum是一个基于RPM包&#xff08;是Red-Ha…

AI与新能源催生新增长,电子制造业如何提升预测力与连接力?

国产替代和新基建带来的结构性机遇&#xff0c;AI和新能源汽车行业的增长所带来的需求提升&#xff0c;都给电子制造行业以乐观的理由。但是&#xff0c;不少企业的客户经营管理、供需平衡与供应链协同等所面临的挑战仍在&#xff0c;如何为行业高质量增长持续注入动能&#xf…

Mycat(三)读写分离双主双从

文章目录 搭建双主双从双主机配置双从机配置双从配置两个主机互相复制停止从服务复制功能重新配置主从 修改 Mycat 的集群配置实现多种主从双主双从集群角色划分增加两个数据源修改集群配置文件读写分离配置扩展&#xff08;1&#xff09;读写分离(一主一从,无备)(m是主,s是从)…

不同规模企业如何进行系统集成?

摘要&#xff1a;系统集成作为企业信息化建设的重要组成部分&#xff0c;其实施策略和方法在不同规模的企业中存在着显著的差异。以下是针对小型、中型、大型企业在系统集成方面所做的六点深度对比&#xff1a; 1. 集成需求复杂度 •小型企业&#xff1a;系统集成需求相对简单…

Stable Diffusion教程:文生图

最近几天AI绘画没有什么大动作&#xff0c;正好有时间总结下Stable Diffusion的一些基础知识&#xff0c;今天就给大家再唠叨一下文生图这个功能&#xff0c;会详细说明其中的各个参数。 文生图是Stable Diffusion的核心功能&#xff0c;它的核心能力就是根据提示词生成相应的…

kali打镜像教程

用户名&#xff1a;kali 密码&#xff1a;kali 去如下网站下载kali镜像http://2.https://www.kali.org/get-kali/#kali-live 2.使用制作镜像工具制作镜像&#xff0c;格式化U盘制作为启动盘&#xff0c;下面是选择格式化哪个u盘 https://pan.baidu.com/s/1r7b3KynfWASqM-2B…

IDEA调试远程服务器项目

IDEA调试远程服务器项目(IDEA) 一、使用场景 1.很多时候&#xff0c;大家在本地开发项目&#xff0c;测试都没有问题。 2.部署服务器后&#xff0c;可能是因为服务的器的原因&#xff0c;或者网络原因等等&#xff0c;难免会出现一点点意向不到的问题。 3.本地又无法复现&…

C++实现高性能并行计算——1.pthreads并行编程(上)

系列文章目录 pthreads并行编程(上)pthreads并行编程(中)pthreads并行编程(下)使用OpenMP进行共享内存编程 文章目录 系列文章目录前言一、PthreadsPthreads 库的主要特性包括&#xff1a; 二、Hello World程序2.1 准备工作2.2 启动线程2.3 运行线程2.3.1 线程函数 2.4 停止线…

win10 配置OpenCV LNK2019 无法解析的外部符号 “void __cdecl cv::imshow

1 遇到问题 严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误 LNK2019 无法解析的外部符号 “void __cdecl cv::imshow(class std::basic_string<char,struct std::char_traits,class std::allocator > const &,class cv::debug_build_guard::_InputArray…

照片彻底删除了如何恢复?学会这5招恢复不求人!

我们的日常生活已经离不开视频和照片&#xff0c;很多小伙伴在清理各种电脑文件和SD卡时&#xff0c;很容易误删除一些重要的视频和照片&#xff0c;那么如何找回删除的视频和照片&#xff1f;下面一起来看看↓↓↓ 找回删除的视频和照片教程一、备份恢复 备份是防止数据丢失…

基于springboot+vue+Mysql的生鲜交易系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

系统性文献综述的撰写(Systematic Review)

文献综述 什么是文献综述 对某一个“领域、专业、课题、问题、研究专题”&#xff0c;通过搜集大量的相关资料&#xff08;别人发表的论文&#xff09;&#xff0c;然后通过“阅读、分析、归纳、整理”给出最新进展、学术见解或建议。对其做出综合性介绍和阐述的一种学术论文…

吴恩达机器学习笔记:第 8 周-14降维(Dimensionality Reduction) 14.3-14.5

目录 第 8 周 14、 降维(Dimensionality Reduction)14.3 主成分分析问题14.4 主成分分析算法14.5 选择主成分的数量 第 8 周 14、 降维(Dimensionality Reduction) 14.3 主成分分析问题 主成分分析(PCA)是最常见的降维算法。 在 PCA 中&#xff0c;我们要做的是找到一个方向…

基于SpringBoot和PostGIS的各省与地级市空间距离分析

目录 前言 一、PostGIS时空库 1、时空表设计 2、空间数据管理与查询 二、后台接口设计 1、ORM层设计与实现 2、业务层设计与实现 3、控制层设计 三、web可视化设计与实现 1、省份范围展示 2、城市距离可视化 3、成果展示 总结 前言 在上一篇博客中基于Java和GDAL实…

npm安装时一直idealTree:npm: sill idealTree buildDeps卡住不动

npm安装时一直idealTree:npm: sill idealTree buildDeps卡住不动 解决步骤&#xff1a; 1.去以下的目录中删掉.npmrc文件&#xff08;只在C:\User.npmrc&#xff09; 2.清除缓存&#xff0c;使用npm cache verify 不要用npm cache clean --force&#xff0c;容易出现npm WAR…