首页 > 其他分享 >从零用VitePress搭建博客教程(4) – 如何自定义首页布局和主题样式修改?

从零用VitePress搭建博客教程(4) – 如何自定义首页布局和主题样式修改?

时间:2023-10-20 10:24:27浏览次数:51  
标签:VitePress 自定义 零用 gradient color background 样式 linear

接上一节:从零用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,自定义,零用,gradient,color,background,样式,linear
From: https://www.cnblogs.com/myboogle/p/17776406.html

相关文章

  • ES 结合nginx 实现自定义词库
    dockerrun-p80:80--namenginx-dnginx:1.10将容器内的配置文件拷贝到当前目录:dockercontainercpnginx:/etc/nginx.修改文件名称:mvnginxconf把这个conf移动到/mydata/nginx下执行命令删除原容器:dockerrmnginx创建新的nginx;执行以下命令dockerrun-......
  • Firefox 火狐浏览器 添加自定义搜索引擎 并屏蔽特定网站
    火狐浏览器添加自定义搜索引擎并屏蔽特定网站记录一下火狐浏览器(Firefox)添加自定义搜索引擎,并屏蔽特定网站的两种操作(注:本文用XXXX代替真实网站)。搜索引擎搜索时,有很多重复且无用的结果,部分有用的信息也需要登录关注才能看。这些内容大部分源于某些个网站,占据了大部分搜索结果......
  • ruoyi~为字典回显添加自定义样式
    ruoyi框架的vue版本中,对字典的回显样式的设计,默认有以下几种如果希望添加一种红色字体的,可以这样实现,实现后你的回显就多了一种红色字体的样式了具体实现的方法在app.vue中,添加对象的css样式<styletype="text/css">.el-tag--redColorFont{color:#ff0000;backgro......
  • Day18_有参装饰器_迭代器_可迭代对象___iter__()方法__next__()方法_for循环原理_自定
    1.Day17复习无参装饰器模版: 2.Day17复习装饰器的补充: 3.有参函数的知识储备: 4.有参装饰器不用语法糖,使用套用的方式从数据源取数据: 5.有参装饰器不用语法糖,使用套用的方式二从数据源取数据: 6.有参装饰器语法糖: 7.有参装饰器模板: 8.迭代器的介绍和为何存在迭......
  • 配置自定义服务为linux系统服务
    背景使用go语言写了一个测试环境部署上报的备份服务,以防因为主服务挂了影响部署操作。 想把这个backup服务设置了系统服务,如果因环境重启等异常,可以自动重启使用的环境的Centos71、首先需要创建一个systemdunit存储配置文件[Unit]Description=deployreportbackupse......
  • 【JDK】自定义注释处理程序插件 AbstractProcessor
    1 前言最近比较好奇,Lombok、MapStruct里的注解,会在打包的时候会给我们的字节码文件里,写入一些东西甚至生成一些转换的字节码文件,不知道人家是如何做到的,所以抽空看了看,自己写了一个小Demo,来体验下。我们的目标就是引入自己的 AbstractProcessor的maven依赖包,然后能给我们生......
  • 【问题记录】自定义注解处理程序 AbstractProcessor,就是不生效,执行没效果
    1  前言最近在看注解处理程序,也想打包的时候,生成一点自己的东西,写了一个 AbstractProcessor,奶奶的花了两个早上,一直想不明白为什么不生效:唉,仅记录哈。......
  • 用户控件和自定义控件
    用户控件和自定义控件的不同点在XAML中构成用户控件的样子。子控件需要暴露的依赖属性有2种用途:1.显示2.赋值3.事件。如何暴露属性?将2种需要暴露的依赖属性定义成用户控件的新增的自定义依赖属性。TextBoxText=Binding,子控件Text用户控件被赋值,文本框变,文本框变......
  • 初学Bokeh:自定义标题【12】跬步
    初学Bokeh:自定义标题【12】跬步大多数绘图都包含标题(headline)。可以通过向figure()函数传递标题参数来为图像添加标题:p=figure(title="Headlineexample")标题文本有多种样式,示例如下:frombokeh.plottingimportfigure,show#preparesomedata#定义绘图数据x......
  • 将自定义的日志直接写入到 mysql 数据库
    将日志直接写入到MySQL数据库中可能会对性能产生影响。如果需要高性能的日志记录解决方案,则可以考虑使用专门的日志记录器,例如Elasticsearch、Logstash和Kibana(ELK)堆栈。安装MySQL数据库,并创建一个新的数据库和表来存储日志数据。使用MySQL连接器来连接到MySQL数据库。创建一个包含......