VitePress学习-自定义主题

VitePress-自定义主题

代码仓库

基础了解

初始化项目的时候选择 custom theme
在这里插入图片描述
在这里插入图片描述
运行后会发现页面挺丑的。
在这里插入图片描述
如果想要用默认主题怎么办呢,修改Layout。
使用默认主题的Layout

<script setup lang="ts">
import { useData } from 'vitepress';
import DefaultTheme from 'vitepress/theme';
// https://vitepress.dev/reference/runtime-api#usedata
const { site, frontmatter } = useData();
const { Layout } = DefaultTheme;
</script><template><Layout> <Content /></Layout><!-- <div v-if="frontmatter.home"><h1>{{ site.title }}</h1><p>{{ site.description }}</p><ul><li><a href="/markdown-examples.html">Markdown Examples</a></li><li><a href="/api-examples.html">API Examples</a></li></ul></div><div v-else><a href="/">Home</a><Content /></div> -->
</template>

你可以在这个目录下找到他的默认组件
在这里插入图片描述
components里面可以侧重关注,因为自定义组件的话,大部分都是改这里的东西。
看下刚刚改的效果。

在这里插入图片描述
在配置项里面加nav和sidebar

import { defineConfig } from 'vitepress';// https://vitepress.dev/reference/site-config
export default defineConfig({title: '我的博客',description: '我的博客',themeConfig: {nav: [{ text: 'Home', link: '/' },{ text: 'Examples', link: '/markdown-examples' },],sidebar: [{text: 'Examples',items: [{ text: 'Markdown Examples', link: '/markdown-examples' },{ text: 'Runtime API Examples', link: '/api-examples' },],},],},
});

在这里插入图片描述
其实就是使用了官方的组件,自定义的话,就是自己写样式,写组件。

回到开始,不使用官方的。

思考,既然都是vue组件,可不可以用element-plus呢,来试一试。

npm install element-plus --save

在这里插入图片描述

开始

我让豆包帮我生成了一个图,来当作首页吧

在这里插入图片描述

首先布局

顶部Header,下面是列表。

先来编写组件。

组件Header

需要了解一个方法useData
useData

在config.mts中配置logo方便我们调试。

在theme下新建一个theme/component/Header.vue文件

在这里插入图片描述
首先我看来看看官方是怎么实现header的,在node_modules里面找到VPNav

在这里插入图片描述
复制出来,放到我们自己的Header组件中。
然后修改下引用路径

<script setup lang="ts">
import { inBrowser } from 'vitepress';
import { computed, provide, watchEffect } from 'vue';import { useData } from 'vitepress';
import { useNav } from 'vitepress/dist/client/theme-default/composables/nav';
import VPNavBar from 'vitepress/dist/client/theme-default/components/VPNavBar.vue';
import VPNavScreen from 'vitepress/dist/client/theme-default/components/VPNavScreen.vue';const { isScreenOpen, closeScreen, toggleScreen } = useNav();
const { frontmatter } = useData();const hasNavbar = computed(() => {return frontmatter.value.navbar !== false;
});provide('close-screen', closeScreen);watchEffect(() => {if (inBrowser) {document.documentElement.classList.toggle('hide-nav', !hasNavbar.value);}
});
</script><template><header v-if="hasNavbar" class="VPNav"><VPNavBar :is-screen-open="isScreenOpen" @toggle-screen="toggleScreen"><template #nav-bar-title-before><slot name="nav-bar-title-before"/></template><template #nav-bar-title-after><slot name="nav-bar-title-after"/></template><template #nav-bar-content-before><slot name="nav-bar-content-before"/></template><template #nav-bar-content-after><slot name="nav-bar-content-after"/></template></VPNavBar><VPNavScreen :open="isScreenOpen"><template #nav-screen-content-before><slot name="nav-screen-content-before"/></template><template #nav-screen-content-after><slot name="nav-screen-content-after"/></template></VPNavScreen></header>
</template><style scoped>
.VPNav {position: relative;top: var(--vp-layout-top-height, 0px);/*rtl:ignore*/left: 0;z-index: var(--vp-z-index-nav);width: 100%;pointer-events: none;transition: background-color 0.5s;
}@media (min-width: 960px) {.VPNav {position: fixed;}
}
</style>

在Layout里面引入下Header。
这里的Main你可以先创建下。

<script setup lang="ts">
import { useData } from 'vitepress';
import DefaultTheme from 'vitepress/theme';
import Header from './components/Header.vue';
import Main from './components/Main.vue';
import Home from './components/Home.vue';// https://vitepress.dev/reference/runtime-api#usedata
const data = useData();
console.log(data);
const theme = data.theme;
const { Layout } = DefaultTheme;
</script><template><!-- <layout /> --><el-container><Header /><Main><Content /></Main></el-container>
</template>

看效果
在这里插入图片描述

在config.mts中开启检索。
在这里插入图片描述

在这里插入图片描述
如果不想大改,可以在官方组件基础上改。
站点元数据可以通过useData来获取,组件中引入使用。
在改造主题的时候,避免使用固定设置,尽量和原组件保持一致,使用站点元数据,这样自定义的主题可以让别人也使用。

其他组件

目录结构大哥就这样。
其实就是自己写一套Layout 布局,然后渲染还是借助vitepress,实际上vitepress使用的是markdown-it来渲染的。

NavBar也是copy的官方组件源码修改的。调整了下组件顺序已经隐藏标题。

在这里插入图片描述

Home组件的话,可以在Layout里面写
在这里插入图片描述
也可以使用文档-重写组件

在这里插入图片描述

除此之外,你也可以自定义主题色,具体变量看这个文件
https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css

在这里插入图片描述

同样可以动态设置css来实现动态样式。

自定义的样式文件记得引入到.vitepress/theme/index.js
在这里插入图片描述

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

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

相关文章

【GEO从入门到精通】生成式引擎与其他 AI 技术的关系

2.1.3 生成式引擎与其他 AI 技术的关系生成式引擎作为人工智能领域的创新力量&#xff0c;与其他 AI 技术紧密相连&#xff0c;相互促进&#xff0c;共同推动 生成式引擎优化&#xff08;GEO&#xff09; 的发展。这些技术使生成式引擎能够为消费者提供更加个性化和精准的内容。…

JAVAEE--4.多线程案例

设计模式1.单例模式1.1饿汉模式1.2懒汉模式(单线程版)1.3懒汉模式(多线程版本)1.4懒汉模式(多线程版本进阶版)2.阻塞队列3.定时器4.线程池1.单例模式设计模式是"软性约束",不是强制的,可以遵守也可以不遵守,按照设计模式写代码使代码不会太差框架是"硬性约束&qu…

量化感知训练(QAT)流程

WHAT&#xff1a;量化感知训练&#xff08;Quantization-Aware Training, QAT&#xff09; 是一种在模型训练阶段引入量化误差的技术。它的核心思想是&#xff1a;通过在前向传播时插入“伪量化节点”引入量化误差&#xff0c;将权重和激活模拟为低精度&#xff08;如 int8&…

docker 用于将镜像打包为 tar 文件

docker save 是 Docker 中用于将镜像打包为 tar 文件的命令&#xff0c;常用于镜像的备份、迁移或离线传输。以下是其核心用法和注意事项&#xff1a;一、基本语法bashdocker save [选项] IMAGE [IMAGE...] > 文件名.tar # 或 docker save -o 文件名.tar IMAGE [IMAGE...]IM…

设计模式(六)创建型:单例模式详解

设计模式&#xff08;六&#xff09;创建型&#xff1a;单例模式详解单例模式&#xff08;Singleton Pattern&#xff09;是 GoF 23 种设计模式中最简单却最常被误用的创建型模式。其核心价值在于确保一个类在整个应用程序生命周期中仅存在一个实例&#xff0c;并提供一个全局访…

PostgreSQL AND OR 操作符详解

PostgreSQL AND & OR 操作符详解 在数据库查询中,AND 和 OR 是两种常见的逻辑操作符,用于组合多个查询条件。PostgreSQL 作为一款功能强大的开源关系型数据库管理系统,同样支持这些操作符。本文将详细介绍 PostgreSQL 中的 AND 和 OR 操作符,并探讨它们在查询中的应用…

RabbiteMQ安装-ubuntu

Ubuntu 1.安装Erlang RabbitMQ需要Erlang语言的支持&#xff0c;在安装RabbitMQ之前需要安装Erlang #更新软件包 sudo apt-get update#安装erlang sudo apt-get install erlang查看erlang版本 roothcss-ecs-027f:/# erl Erlang/OTP 24 [erts-12.2.1] [source] [64-bit] [sm…

Linux驱动20 --- FFMPEG视频API

目录 一、FFMPEG 视频 API 的使用 1.1 介绍 1.2 整体编程过程 获取核心上下文指针 打开输入流文件 获取输入流 获取编码器 初始化解码器 申请输出流指针 获取显示数据空间大小 申请输出显示空间 绑定输出流和输出显示空间 申请格式转换上下文 申请输入流指针 读取一帧数据 发…

OpenBayes 一周速览丨Self Forcing 实现亚秒级延迟实时流视频生成;边缘AI新秀,LFM2-1.2B采用创新性架构超越传统模型

公共资源速递 This Weekly Snapshots &#xff01; 5 个公共数据集&#xff1a; * AF-Chat 音频对话文本数据集 * ArtVIP 机器交互式图像数据集 * Updesh 印度语合成文本数据集 * Medical Information 药品信息数据集 * Nemotron-Math-HumanReasoning 数学推理数据集…

[NOIP2002 提高组] 均分纸牌

题目描述有N堆纸牌&#xff0c;编号分别为 1,2,…,N。每堆上有若干张&#xff0c;但纸牌总数必为N的倍数。可以在任一堆上取若干张纸牌&#xff0c;然后移动。移牌规则为&#xff1a;在编号为1堆上取的纸牌&#xff0c;只能移到编号为2的堆上&#xff1b;在编号为N的堆上取的纸…

【音视频】WebRTC-Web 音视频采集与播放

一、打开摄像头 打开摄像头首先需要有一个html的video标签&#xff1a; id "local-video"&#xff0c;是为了后续的js脚本调用这个对象autoplay是设置打开后自动播放&#xff0c;playsinline则是为了兼容移动端 <video id "local-video" autoplay p…

数据治理平台如何选?深度解析国产化全栈方案与行业落地实践

“数据治理平台厂商有哪些&#xff1f;”国内主流厂商包括阿里云、华为、百分点科技等&#xff0c;各有所长。其中&#xff0c;百分点科技凭借在应急管理、智慧公安及央国企数字化领域的深度实践&#xff0c;打造了行业特色鲜明的数据治理解决方案。百分点科技的数据治理解决方…

限流算法详解:固定窗口、滑动窗口、令牌桶与漏桶算法全面对比

限流&#xff08;Rate Limiting&#xff09;是保障系统稳定性和服务质量的关键机制&#xff0c;尤其在高并发、突发流量、攻击防护等场景中至关重要。本文将详细介绍四种主流限流算法&#xff1a;固定窗口&#xff08;Fixed Window&#xff09;滑动窗口&#xff08;Sliding Win…

Sentinel 搭建应用层面与网关层面的流控保护

源码&#xff1a;妖精的尾巴/spring-cloud-alibaba Nacos 和 Sentinel Dashboard 我这里全是使用window 本地运行的&#xff0c;需要自行下载运行 服务层面&#xff1a; 当你在某个具体的服务上使用Sentinel时&#xff0c;更多的是关注该服务内部资源的保护。例如&#xff0c…

纯血鸿蒙 AudioRenderer+AudioCapturer+RingBuffer 实现麦克风采集+发声

总共两个类&#xff0c;放到代码里&#xff0c;就可以快速完成K歌的效果&#xff0c;但应用层这么做延迟是比较高的&#xff0c;只是做一个分享。 类代码 import { audio } from kit.AudioKit; import { BusinessError } from kit.BasicServicesKit; import { AudioBufferFlow,…

洛谷 P1601 A+B Problem(高精)普及-

题目描述 高精度加法&#xff0c;相当于 ab problem&#xff0c;不用考虑负数。 输入格式 分两行输入。a,b≤10500a,b \leq 10^{500}a,b≤10500。 输出格式 输出只有一行&#xff0c;代表 ababab 的值。 输入输出样例 #1 输入 #1 1 1输出 #1 2输入输出样例 #2 输入 #2 1001 909…

Matrix Theory study notes[6]

文章目录linear spacereferenceslinear space a basis of linear space VkV^kVk,which is x1,x2,...xkx_1,x_2,...x_kx1​,x2​,...xk​,can be called as a coordinate system.let vector v∈Vkv \in V^kv∈Vk and it can be linear expressed on this basis as va1x1a2x2...…

专线与专线之间的区别

下面我们从定义、技术特点、适用场景、优缺点等多个维度来详细对比&#xff1a;✅ 一、四种方案简要定义技术方案定义MPLS 专线运营商基于 MPLS 技术提供的私有虚拟网络&#xff0c;逻辑隔离、安全可靠VPN over Internet利用公网加密通道&#xff08;如IPSec&#xff09;构建虚…

Git工作流:团队协作的最佳实践

目录 一、什么是 Git 工作流&#xff1f;为什么需要它&#xff1f; 二、基础&#xff1a;Git 分支核心概念 三、主流 Git 工作流实战指南 1. 集中式工作流&#xff08;Centralized Workflow&#xff09;&#xff1a;适合小团队 / 新手 操作步骤&#xff1a; 优缺点&#…

算法竞赛阶段二-数据结构(35)数据结构单链表模拟实现

//链表--链式存储的线性表 //存信息和下一个节点位置&#xff0c;数据域和指针域合起来叫节点 //带头&#xff08;哨兵位&#xff09;下标为0 //单向&#xff0c;双向&#xff0c;循环链表 //实现 单 //俩足够大数组 // elem&#xff0c;数据域 // next &#xff0c;指针域…