vike-vue-content

主题模式切换按钮,在 light 和 dark 之间切换,并在支持时使用 View Transitions 动画。

ThemeToggle

主题模式切换按钮组件。

import { ThemeToggle } from 'vike-vue-content/components/theme-toggle'

ThemeToggle 内部直接使用 useTheme(),点击后会在 lightdark 之间切换当前主题模式,并同步更新根节点样式与 localStorage['vvc-theme']

用法

<script setup>
import { ThemeToggle } from 'vike-vue-content/components/theme-toggle'
</script>

<template>
  <ThemeToggle />
</template>

行为

  • 当前为浅色时显示太阳图标,点击后切到深色
  • 当前为深色时显示月亮图标,点击后切到浅色
  • 不暴露额外 props,透传的 HTML attributes 会落到根按钮上
  • 如果浏览器支持 document.startViewTransition(),并且用户没有开启 reduced motion,则会播放一次圆形展开过渡动画
  • 如果不支持 View Transitions,则直接切换主题

依赖

ThemeToggle 依赖主题系统已经接入:

  • 页面中已引入 vike-vue-content/config
  • 布局中已引入 vike-vue-content/index.css

否则按钮仍然可以切换 localStorage 中的状态,但页面可能没有完整的主题样式表现。