从零用VitePress搭建博客教程(4) – 如何自定义首页布局和主题样式修改?
接上一节:从零用VitePress搭建博客教程(3) - VitePress页脚、标题logo、最后更新时间等相关细节配置
六、首页样式修改
有时候觉得自带的样式不好看,想自定义,首先我们在docs/.vitePress新建一个theme文件夹,用来存放自定义布局和主题修改的相关文件,如下所示

theme下再新建custom.css 和 index.js
custom.css我们用来写修改样式的,当然也可以安装css预处理器来写样式。
index.js是入口文件,用来注册组件和配置自定义布局的。
VitePress 对 CSS 预处理器有内置支持:.scss、.sass、.less, .styl 和 .stylus 文件。 不需要为它们安装 Vite 特定的插件,但必须安装相应的预处理器
这里我们选择使用sass,安装即可
pnpm install -D sass
编写custom.scss
通过浏览器开发工具,找到对应的样式选择器,覆盖原本的CSS即可修改默认主题的样式。
/**
主题变量样式修改
**/
/* :root {
--vp-c-brand: #656dff;
--vp-c-brand-light: #757cff;
} */ /**
顶部导航模块样式修改
**/
.VPNav {
.VPNavBar {
background-color: #fff;
border-bottom: 1px solid rgba(60, 60, 67, 0.13);
}
.VPNavBar.has-sidebar{
.curtain {
bottom: -30px !important;
/* 导航的底部边框不显示问题修改 */
&::before {
margin-top: 2px !important;
}
}
}
.logo {
height: 40px;
}
} /**
内容模块样式修改
**/ .VPContent {
.VPDoc {
padding-left: 0 !important;
}
/* 内容左边距调整 */
.content-container {
margin-left: 20px !important;
}
/* 副标题样式修改 */
.container .text {
font-size: 46px !important;
}
} /**
暗黑模式样式修改
**/
.dark {
.VPNav .VPNavBar {
background-color: #1e1e20;
border-bottom: 1px solid #000;
}
}
index.js
import DefaultTheme from "vitepress/theme";
import "./custom.css"; export default {
...DefaultTheme,
NotFound: () => "404", // <- this is a Vue 3 functional component
enhanceApp({ app, router, siteData }) {
// app is the Vue 3 app instance from createApp()
// router is VitePress' custom router (see `lib/app/router.js`)
// siteData is a ref of current site-level metadata.
},
};
1、首页标题和图片渐变色调整
标题渐变色和logo背景渐变色调整
可参考https://vitepress.dev/、https://unocss.dev/等,根据情况调整成自己喜欢的样式
2、样式动态变化
参考https://unocss.dev/官网效果。
源码地址:https://github.com/unocss/unocss/blob/main/docs/.vitepress/theme/index.ts
引入import ‘./rainbow.css’,文字颜色等可以动态变化。
需要变化的地方加上如下变量即可,比如
border: 1px solid var(--vp-c-brand);
color: var(--vp-c-brand);
background: var(--vp-c-brand);
最终效果如下:

七、自定义首页模板
当然如果你想自定义首页内容,你可以编写Vue组件的方式实现,首先要安装Vue
pnpm i -D vue
然后自定义编写好组件后,然后在index.md引入即可
比如我们这里简单写一个home.vue试试
<template>
<div class="ui-home">
<h2 class="ui-title">前端开源项目推荐</h2>
<ul class="ui-project">
<li class="item" v-for="v in siteData" :key="v.name">
<a class="link" :href="v.link" target="_blank">
<h3 :class="['title', v.className]">{{ v.name }}</h3>
<p class="desc">{{ v.desc }}</p>
</a>
</li>
</ul>
</div>
</template>
<script setup>
import { siteData } from '../model/siteData.js' </script>
<style lang="scss">
.color-pink1 {background: #90f;}
.color-red {background: #b91d47;}
.color-blue-deep4 {background: #3360a3;}
.color-blue-light6 {background: #2db7f5;}
.color-green-gradient1{
background: -webkit-linear-gradient(120deg, #86b91a 30%, #edd532);
background: linear-gradient(120deg, #86b91a 30%, #edd532);
}
.color-green-gradient2{
background: -webkit-linear-gradient(315deg, #42d392 25%, #647eff);
background: linear-gradient(315deg, #42d392 25%, #647eff);
}
.color-green-gradient3{
background: -webkit-linear-gradient(315deg, #51a256 25%, #f7d336);
background: linear-gradient(315deg, #51a256 25%, #f7d336);
}
.color-pink-gradient {
background: -webkit-linear-gradient(120deg, #bd44fe 35%, #42d1ff);
background: linear-gradient(120deg, #bd44fe 35%, #42d1ff);
} /**首页网址推荐**/
.ui-home {
width: 1152px;
margin: 20px auto;
.ui-title {
display: flex;
align-items: center;
justify-content: center;
height: 60px;
font-size: 26px;
}
}
.ui-project {
display: grid;
gap: 20px;
grid-template-columns: repeat(auto-fit, minmax(224px, 1fr));
justify-content: space-between;
margin-top: 20px;
.item,
.link {
height: 220px;
}
.item {
.link {
display: block;
color: #333;
background: #fff;
border: 1px solid #f1f1f1;
border-radius: 6px;
transition: all .4s;
}
.link:hover {
-webkit-filter: brightness(1.2);
box-shadow: 0 15px 30px rgba(0, 0, 0, .1);
transform: rotateY(-0.1deg) scale(1.03) translateZ(0);
}
.title {
height: 80px;
padding-top: 25px;
font-size: 24px;
color: #fff;
text-align: center;
border-radius: 6px 6px 0 0;
}
.desc {
line-height: 2;
padding: 0 12px;
margin-top: 14px;
font-size: 14px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
}
}
</style>
在theme/index.js注册为全局组件,然后在index.md 直接引用即可
<Home />
效果

github项目地址:https://github.com/msyuan/vitePress-project
在线预览效果:https://msyuan.github.io/vitePress-project
原文地址:http://www.qianduan8.com/2041.html
从零用VitePress搭建博客教程(4) – 如何自定义首页布局和主题样式修改?的更多相关文章
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)
前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自动部署Hexo(1)
前言 前面两篇文章介绍了在github上使用hexo搭建博客的基本环境和hexo相关参数设置等. 基于目前,博客基本上是可以完美运行了. 但是,有一点是不太好,就是源码同步问题,如果在不同的电脑上写文 ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置
前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置
前言 有朋友问了我关于博客系统搭建相关的问题,由于是做开发相关的工作,我给他推荐的是使用github的gh-pages服务搭建个人博客. 推荐理由: 免费:github提供gh-pages服务是免费的 ...
- Hexo搭建博客教程(1) - 安装环境与本地搭建
前言 搭建个人博客一般有两种选择,一个是使用WordPress,但是需要将博客搭建在服务器上,不过搭建好后写文章方便,适合没有程序基础的人使用.另一个是使用Hexo,相对简洁高效,不需要服务器,既可以 ...
- Hexo+NexT(零):最全Hexo+Next搭建博客教程
快速.简洁且高效的博客框架 有位大神说,喜欢写博客的人的人,折腾博客会经历三个阶段.找到一个免费空间,搭建一个博客,很欣喜,很有成就感,此为一阶段:受限免费空间各种限制,自己买空间和域名,实现对博客的 ...
- Hexo搭建博客教程(2) - 博客的简单个性化配置
本章主要讲博客的个性化,譬如站点的基本配置(语言.头像.站点图标等).安装新的Hexo主题(NexT主题)以及主题的配置. 1. 修改站点配置 打开站点配置文件 ,找到: # Site title: ...
- Hexo搭建博客教程(3) - 远程部署到GitHub Pages
本章讲的是如何将本地的个人项目远程部署到 GitHub Pages,涉及到GitHub的项目仓库.Git的使用,以及Hexo的远程部署等. 1. 安装 hexo-deployer-git 插件 想要将 ...
- 用 Sphinx 搭建博客时,如何自定义插件?
之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建. 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清 ...
- 转载一遍比较好的,django2.1搭建博客教程
非常感谢这位博主,找了几个星期终于找到了 https://www.dusaiphoto.com/article/article-detail/4/
随机推荐
- gRPC vs. HTTP:网络通信协议的对比
概述 gRPC 和 HTTP 是两种常见的网络通信协议,用于在客户端和服务器之间进行通信.它们具有不同的特点和适用场景,下面对它们进行详细比较. HTTP(Hypertext Transfer Pro ...
- 使用LaTex添加公式到Hexo博客里
代码编辑器,强烈推荐使用微软的 VS code,相比Atom开启迅速,使用方便,扩展丰富 第一步: 安装Kramed hexo 默认的渲染引擎是 marked,但是 marked 不支持 mathja ...
- 推荐一款.NET开源的轻量级分布式服务框架
前言 今天要给大家推荐一款由新生命开发团队开源的.NET轻量级分布式服务框架:星尘分布式平台(NewLife.Stardust). 项目介绍 星尘是一个轻量级分布式服务框架.它的功能包含配置中心.集群 ...
- 用Python操控斑马打印机的技术总结
前言 由于之前产品打印的标签为人工输入,可能存在信息错误且不适合大批量操作.所以我进行了前期的研究和总结,完成了任务,并这里做下技术总结,方便后面的人进行开发. 技术总结 斑马打印机的坑 官网:htt ...
- 玩转 PI 系列-如何在 Rockchip Arm 开发板上安装 Docker Tailscale K3s Cilium?
概述 618 买了几个便宜的 Purple PI OH 开发板 (500 块多一点买了 3 个), 这个开发板类似树莓派,是基于 Rockchip(瑞芯微) 的 rx3566 arm64 芯片.如下: ...
- 【JMeter】JMeter添加插件
JMeter添加插件 目录 JMeter添加插件 一.前言 二.插件管理器 三.推荐插件 1.Custom Thread Groups (1)Ultmate Thread Group (2)Stepp ...
- pandas: dataframe转字典,并设置key
解决方案 res = df_by_monthly.set_index('recruit_resign_month').T.to_dict('list') print(res) 上述代码是转为列表形式 ...
- LangChain:打造自己的LLM应用
1.LangChain是什么 LangChain是一个框架,用于开发由LLM驱动的应用程序.可以简单认为是LLM领域的Spring,以及开源版的ChatGPT插件系统.核心的2个功能为: 1)可以将 ...
- croc-文件传输工具
前言 croc是一款用go语言开发的命令行文件传输工具,该工具允许两台计算机设备以一种简单和安全的方式来传输文件. GitHub项目地址 环境信息 IP 系统版本 croc版本 说明 192.168. ...
- Luckysheet:一个纯前端的excel在线表格
最近因为项目要求,需要在页面上添加一个在线编辑excel的功能,因此只能在网上找有没有直接用的插件,最后很幸运的是幸好找到了一个 ----luckysheet. 这个是从luckysheet官网上找的 ...