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

接上一节:从零用VitePress搭建博客教程(3) – VitePress默认主题logo、最后更新时间等相关细节配置

六、首页样式修改

有时候觉得自带的样式不好看,想自定义,首先我们在docs/.vitePress新建一个theme文件夹,用来存放自定义布局和主题修改的相关文件,如下所示

theme下再新建custom.css 和 index.js

  1. custom.css我们用来写修改样式的,当然也可以安装css预处理器来写样式。
  2. index.js是入口文件,用来注册组件和配置自定义布局的。

VitePress 对 CSS 预处理器有内置支持:.scss、.sass、.less, .styl 和 .stylus 文件。 不需要为它们安装 Vite 特定的插件,但必须安装相应的预处理器

这里我们选择使用sass,安装即可

pnpm install -D sass

编写custom.scss

/** 
  主题变量样式修改
**/
/* :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背景渐变色调整

可参考VitePress | Vite & Vue Powered Static Site GeneratorUnoCSS: The instant on-demand Atomic CSS engine等,根据情况调整成自己喜欢的样式

:root {
  /* 按钮颜色 */
  --vp-button-brand-bg: var(--vp-c-brand);
  /* 首页标题和图片渐变颜色 */
  --vp-home-hero-name-color: transparent;
  --vp-home-hero-name-background: -webkit-linear-gradient( 120deg, var(--vp-c-brand) 45%, var(--vp-c-brand-next) );
  --vp-home-hero-image-background-image: linear-gradient( -45deg, var(--vp-c-brand) 45%, var(--vp-c-brand-next) );
  --vp-home-hero-image-filter: blur(180px);
}

2、样式动态变化

参考UnoCSS: The instant on-demand Atomic CSS engine官网效果。

源码地址: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 />

效果

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unsigned char 和 char 的主要区别在于其范围。一个 char 变量占 1 个字节,可以容纳 -128 到 127 的整数,而 unsigned char 变量同样占据1个字节,但是可以容纳 0 到 255 的整数。因此,char 变量可以表示有符号和无符号的值,而 unsigned char 变量只能表示无符号值。 ### 回答2: unsigned char 和 char 的区别在于它们的取值范围和表示方法。 首先,char 是有符号类型的字符型数据,它可以表示从-128到127的整数。其中,负数用补码表示,正数和零用原码表示。而 unsigned char 是无符号类型的字符型数据,它可以表示从0到255的整数,只用原码表示。 其次,char 在内存中占用一个字节(8位),但是与具体的实现有关,有时也可能占用其他大小的字节。unsigned char 也是占用一个字节。 再次,char 主要用于存储和处理字符,例如存储ASCII码表示的字母、数字和符号。而 unsigned char 则常用于表示字节数据,例如像素值、传感器数据等。 最后,char 可以用于执行算术和逻辑运算,包括正负号、加减乘除等操作,而 unsigned char 也可以进行相同的运算,但结果会被解释为无符号的值。 总结来说,unsigned char 和 char 的主要区别在于取值范围和表示方法。不同的场景和需求会决定使用哪种类型。 ### 回答3: unsigned char和char是在C语言中使用的两种不同类型的数据。它们的主要区别在于其取值范围和对待负数的方式。 首先,char类型是有符号的,它可以表示整数值的范围是-128到127(对应于8位的补码表示)。这意味着char类型可以表示负数和正数。例如,对于char x = -1;,x的值将是-1。 反之,unsigned char类型是无符号的,它仅能表示非负整数值。unsigned char类型的取值范围是0到255(对应于8位的无符号二进制表示)。这意味着unsigned char类型只能表示正数或零。例如,对于unsigned char x = 255;,x的值将是255。 其次,由于char类型是有符号的,它对负数的处理方式是使用补码表示法。这意味着负数使用符号位的方式来表示,并且对应的二进制值是正数值的补码。例如,对于char x = -1;,它的二进制表示为11111111。 与此相反,由于unsigned char类型是无符号的,它没有符号位,因此使用的是直接的二进制值表示。例如,对于unsigned char x = 255;,它的二进制表示为11111111。 综上所述,unsigned char和char之间的主要区别在于它们的取值范围和对负数的处理方式。char类型能够表示负数和正数,而unsigned char类型仅能表示正数或零,并且对于负数的处理方式不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值