接上一节:从零用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) – 如何自定义首页布局和主题样式修改?的更多相关文章

  1. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)

    前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...

  2. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自动部署Hexo(1)

    前言 前面两篇文章介绍了在github上使用hexo搭建博客的基本环境和hexo相关参数设置等. 基于目前,博客基本上是可以完美运行了. 但是,有一点是不太好,就是源码同步问题,如果在不同的电脑上写文 ...

  3. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置

    前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...

  4. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置

    前言 有朋友问了我关于博客系统搭建相关的问题,由于是做开发相关的工作,我给他推荐的是使用github的gh-pages服务搭建个人博客. 推荐理由: 免费:github提供gh-pages服务是免费的 ...

  5. Hexo搭建博客教程(1) - 安装环境与本地搭建

    前言 搭建个人博客一般有两种选择,一个是使用WordPress,但是需要将博客搭建在服务器上,不过搭建好后写文章方便,适合没有程序基础的人使用.另一个是使用Hexo,相对简洁高效,不需要服务器,既可以 ...

  6. Hexo+NexT(零):最全Hexo+Next搭建博客教程

    快速.简洁且高效的博客框架 有位大神说,喜欢写博客的人的人,折腾博客会经历三个阶段.找到一个免费空间,搭建一个博客,很欣喜,很有成就感,此为一阶段:受限免费空间各种限制,自己买空间和域名,实现对博客的 ...

  7. Hexo搭建博客教程(2) - 博客的简单个性化配置

    本章主要讲博客的个性化,譬如站点的基本配置(语言.头像.站点图标等).安装新的Hexo主题(NexT主题)以及主题的配置. 1. 修改站点配置 打开站点配置文件 ,找到: # Site title: ...

  8. Hexo搭建博客教程(3) - 远程部署到GitHub Pages

    本章讲的是如何将本地的个人项目远程部署到 GitHub Pages,涉及到GitHub的项目仓库.Git的使用,以及Hexo的远程部署等. 1. 安装 hexo-deployer-git 插件 想要将 ...

  9. 用 Sphinx 搭建博客时,如何自定义插件?

    之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建. 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清 ...

  10. 转载一遍比较好的,django2.1搭建博客教程

    非常感谢这位博主,找了几个星期终于找到了 https://www.dusaiphoto.com/article/article-detail/4/

随机推荐

  1. 关于SQL SERVER ROW_NUMBER(),RANK(),DENSE_RANK() 的排序和分页查询问题

    经常接触SQL SERVER 的朋友来说,排序是经常遇见的问题,有的人还会傻傻自己写排序,比如用循环去写,当然这就比较难受 今天就给大家介绍一下SQL SERVER 自带的排序,共有三种,分别为ROW ...

  2. CF1654E Arithmetic Operations 题解

    摘自我的洛谷博客. 题目让我们求改变数字的最少次数,那我们转化一下, 求可以保留最多的数字个数 \(cnt\),再用 \(n\) 减一下就行,即 \(res = n - cnt\). 我们先考虑两种暴 ...

  3. Linux 软件包:man pages

    有时候,man ls 发现没有帮助文档,可以快递打开浏览器检索 "man ls" . # yum list | grep man | grep pages gl-manpages. ...

  4. jQuery事件冒泡和默行为

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Django 组织json格式

    @api_view(['GET', 'POST']) def api_test(request): classes = Classes.objects.all() # classes_data = C ...

  6. 端路由原理及react-router的常用组件

    在react中,通常都是使用单页面应用(SPA),即整个页面只有一个html,然后通过不同的url地址进行组件的匹配和切换. 我们看到的url地址可能会有两种形式,一种是 localhost:3000 ...

  7. 【必看!】阿里云推出QWen-7B和QWen-7b-Chat,开放免费商用!

    阿里云于8月3日宣布开源两款重要的大型模型--QWen-7B和QWen-7b-Chat.这两款模型的参数规模达到了令人瞩目的70亿,并且已经在Hugging Face和ModelScope平台上开放, ...

  8. vscode c++食用指南

    准备 配置环境为机房的 win10. 首先你需要下载 vscode. 可以从官网下载:https://code.visualstudio.com/Download 配置编译c++ 下载完之后安装好,界 ...

  9. 【matplotlib基础】--子图

    使用Matplotlib对分析结果可视化时,比较各类分析结果是常见的场景.在这类场景之下,将多个分析结果绘制在一张图上,可以帮助用户方便地组合和分析多个数据集,提高数据可视化的效率和准确性. 本篇介绍 ...

  10. Java语言与其环境:常见问题解答

    Java语言与其环境:常见问题解答 在本博客文章中,将深入探讨Java编程语言的特点和环境,解释一些常见的关于Java的疑问. Java语言的特点是什么? Java是一种高级编程语言,它具有以下几个主 ...