当前位置: 首页 > news >正文

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.lryc.cn/news/603234.html

相关文章:

  • 深度学习篇---百度AI Studio模型
  • Luogu P2577 午餐(ZJOI2004)
  • rtp、rtcp、rtsp、rtmp协议详解
  • 【网络工程师软考版】网络安全
  • ArkTS懒加载LazyForEach的基本使用
  • CNN卷积神经网络之模型评估指标(二)
  • 嵌入式系统分层开发:架构模式与工程实践(一)
  • HammerDB:一款免费开源的数据库基准测试工具
  • 【学习笔记】Lean4 定理证明 ing
  • C++ 模板类型 <T>,对函数参数传递兼容性检查
  • [MySQL] MySQL 版本不支持 ST_Distance_Sphere替代方案和解决方案
  • 数据结构【红黑树】
  • Charles中文版使用指南:如何利用抓包工具优化API调试与网络性能
  • Redis+JWT 认证管理最佳实践
  • TOPSIS(Technique for Order Preference by Similarity to Ideal Solution )简介与简单示例
  • Ext JS极速项目之 Coworkee
  • 随缘玩 一: 代理模式
  • 算法第29天|动态规划dp2:不同路径、不同路径Ⅱ、整数拆分、不同的二叉搜索树
  • 【图像处理基石】如何对遥感图像进行实例分割?
  • 小白学OpenCV系列1-图像处理基本操作
  • 在 Web3 时代通过自我主权合规重塑 KYC/AML
  • [SWPU2019]Web1
  • 链表反转中最常用的方法————三指针法
  • PHP云原生架构:容器化、Kubernetes与Serverless实践
  • redis【1】
  • 小程序视频播放,与父视图一致等样式设置
  • zama test
  • 百元级工业级核心板:明远智睿×瑞萨V2H,开启AIoT开发新纪元
  • PDF转Word免费工具!批量处理PDF压缩,合并, OCR识别, 去水印, 签名等全功能详解
  • 数据结构之时间复杂度