base.css 是项目的基础样式文件,定义了全局的颜色变量、基础样式和暗色主题支持。该文件采用了现代 CSS 技术,包括 CSS 自定义属性(变量)、媒体查询和全局重置样式。
/* color palette from <https://github.com/vuejs/theme> */
:root {
--vt-c-white: #ffffff;
--vt-c-white-soft: #f8f8f8;
--vt-c-white-mute: #f2f2f2;
--vt-c-black: #181818;
--vt-c-black-soft: #222222;
--vt-c-black-mute: #282828;
--vt-c-indigo: #2c3e50;
--vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
--vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
--vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
--vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
--vt-c-text-light-1: var(--vt-c-indigo);
--vt-c-text-light-2: rgba(60, 60, 60, 0.66);
--vt-c-text-dark-1: var(--vt-c-white);
--vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
}
:root 伪类定义全局变量,这些变量可在整个文档中引用--vt-c- 前缀(可能代表 "Vue Theme color"),后跟语义化名称--vt-c-indigo):root 伪类代表文档的根元素,通常是 <html>,是定义全局 CSS 变量的最佳位置-- 前缀声明,通过 var() 函数引用rgba() 函数定义带透明度的颜色,最后一个参数是透明度值(0-1)/* semantic color variables for this project */
:root {
--color-background: var(--vt-c-white);
--color-background-soft: var(--vt-c-white-soft);
--color-background-mute: var(--vt-c-white-mute);
--color-border: var(--vt-c-divider-light-2);
--color-border-hover: var(--vt-c-divider-light-1);
--color-heading: var(--vt-c-text-light-1);
--color-text: var(--vt-c-text-light-1);
--section-gap: 160px;
}
--color-background 而不是 --vt-c-whitevar() 函数引用前面定义的基础颜色变量--section-gap 布局变量--color-text 而不需要记住具体的颜色值@media (prefers-color-scheme: dark) {
:root {
--color-background: var(--vt-c-black);
--color-background-soft: var(--vt-c-black-soft);
--color-background-mute: var(--vt-c-black-mute);
--color-border: var(--vt-c-divider-dark-2);
--color-border-hover: var(--vt-c-divider-dark-1);
--color-heading: var(--vt-c-text-dark-1);
--color-text: var(--vt-c-text-dark-2);
}
}
@media (prefers-color-scheme: dark) 检测用户的系统主题偏好prefers-color-scheme 是 CSS 媒体特性,用于检测用户系统是浅色还是深色主题*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
font-weight: normal;
}
* 选择所有元素,*::before 和 *::after 选择所有伪元素box-sizing: border-box 使元素的 width 和 height 包括 padding 和 bordermargin: 0 消除所有元素的默认外边距font-weight: normal 重置所有元素的字体粗细为正常值border-box 更直观,元素大小计算更符合预期body {
min-height: 100vh;
color: var(--color-text);
background: var(--color-background);
transition:
color 0.5s,
background-color 0.5s;
line-height: 1.6;
font-family:
Inter,
-apple-system,
BlinkMacSystemFont,
'Segoe UI',
Roboto,
Oxygen,
Ubuntu,
Cantarell,
'Fira Sans',
'Droid Sans',
'Helvetica Neue',
sans-serif;
font-size: 15px;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
min-height: 100vh 确保内容至少占满整个视口高度transition 属性使主题切换时有平滑的颜色过渡效果字体栈设计:
Inter:现代开源字体,优先使用-apple-system 和 BlinkMacSystemFont:苹果系统原生字体'Segoe UI':Windows 系统原生字体Roboto:Android 系统原生字体sans-serif 作为后备渲染优化:
text-rendering: optimizeLegibility:优化文本可读性-webkit-font-smoothing: antialiased:在 WebKit 浏览器中启用字体平滑-moz-osx-font-smoothing: grayscale:在 Firefox macOS 中优化字体渲染这种分层变量系统(基础变量 → 语义化变量)是一种优秀的设计模式:
--vt-c-white--color-background这种架构的优势在于:
使用 prefers-color-scheme 实现自动主题切换:
全局应用 box-sizing: border-box:
通过多个属性优化文本渲染:
可以考虑添加更多语义变量,如:
:root {
--color-primary: var(--vt-c-indigo);
--color-success: #28a745;
--color-warning: #ffc107;
--color-error: #dc3545;
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);
--shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
--radius-sm: 4px;
--radius-md: 8px;
--radius-lg: 12px;
}
可以使用 clamp() 函数实现响应式字体:
:root {
--font-size-fluid: clamp(1rem, 2.5vw, 1.25rem);
}
可以为更多属性添加平滑过渡:
:root {
--transition-fast: 0.15s ease;
--transition-normal: 0.3s ease;
--transition-slow: 0.5s ease;
}
base.css 文件采用了现代 CSS 最佳实践,构建了一个灵活、可维护的主题系统。通过 CSS 变量、媒体查询和全局重置样式,为整个项目提供了坚实的基础。这种设计不仅支持自动暗色主题切换,还使得未来的主题扩展变得简单高效。
文件的主要优点: