本章概述
Bootstrap 5 提供了一套完整的颜色系统,包括语义化颜色、工具类颜色以及强大的主题定制功能。本章将深入介绍如何使用 Bootstrap 的颜色系统,以及如何通过 CSS 变量和 Sass 变量来定制自己的主题。
Bootstrap 颜色系统基础
1. 主题颜色
Bootstrap 定义了一套语义化的主题颜色,每种颜色都有特定的含义和用途:
<!-- 主题颜色示例 -->
<div class="container my-4">
<div class="row g-3">
<div class="col-6 col-md-4 col-lg-3">
<div class="p-3 bg-primary text-white text-center rounded">
Primary
</div>
</div>
<div class="col-6 col-md-4 col-lg-3">
<div class="p-3 bg-secondary text-white text-center rounded">
Secondary
</div>
</div>
<div class="col-6 col-md-4 col-lg-3">
<div class="p-3 bg-success text-white text-center rounded">
Success
</div>
</div>
<div class="col-6 col-md-4 col-lg-3">
<div class="p-3 bg-danger text-white text-center rounded">
Danger
</div>
</div>
<div class="col-6 col-md-4 col-lg-3">
<div class="p-3 bg-warning text-dark text-center rounded">
Warning
</div>
</div>
<div class="col-6 col-md-4 col-lg-3">
<div class="p-3 bg-info text-dark text-center rounded">
Info
</div>
</div>
<div class="col-6 col-md-4 col-lg-3">
<div class="p-3 bg-light text-dark text-center rounded border">
Light
</div>
</div>
<div class="col-6 col-md-4 col-lg-3">
<div class="p-3 bg-dark text-white text-center rounded">
Dark
</div>
</div>
</div>
</div>
2. 颜色含义和使用场景
<!-- 颜色使用场景示例 -->
<div class="container my-4">
<!-- Primary - 主要操作 -->
<div class="mb-3">
<button class="btn btn-primary">主要按钮</button>
<a href="#" class="link-primary">主要链接</a>
<div class="alert alert-primary" role="alert">
这是一个主要信息提示
</div>
</div>
<!-- Success - 成功状态 -->
<div class="mb-3">
<button class="btn btn-success">成功按钮</button>
<span class="badge bg-success">成功</span>
<div class="alert alert-success" role="alert">
<i class="bi bi-check-circle"></i> 操作成功完成!
</div>
</div>
<!-- Danger - 危险/错误状态 -->
<div class="mb-3">
<button class="btn btn-danger">删除按钮</button>
<span class="badge bg-danger">错误</span>
<div class="alert alert-danger" role="alert">
<i class="bi bi-exclamation-triangle"></i> 发生了一个错误!
</div>
</div>
<!-- Warning - 警告状态 -->
<div class="mb-3">
<button class="btn btn-warning">警告按钮</button>
<span class="badge bg-warning text-dark">警告</span>
<div class="alert alert-warning" role="alert">
<i class="bi bi-exclamation-circle"></i> 请注意这个重要信息!
</div>
</div>
<!-- Info - 信息状态 -->
<div class="mb-3">
<button class="btn btn-info">信息按钮</button>
<span class="badge bg-info text-dark">信息</span>
<div class="alert alert-info" role="alert">
<i class="bi bi-info-circle"></i> 这里有一些有用的信息。
</div>
</div>
</div>
3. 灰度颜色系统
<!-- 灰度颜色示例 -->
<div class="container my-4">
<div class="row g-2">
<div class="col-6 col-md-3">
<div class="p-3 bg-white text-dark text-center border rounded">
White
</div>
</div>
<div class="col-6 col-md-3">
<div class="p-3 text-dark text-center rounded" style="background-color: var(--bs-gray-100)">
Gray 100
</div>
</div>
<div class="col-6 col-md-3">
<div class="p-3 text-dark text-center rounded" style="background-color: var(--bs-gray-200)">
Gray 200
</div>
</div>
<div class="col-6 col-md-3">
<div class="p-3 text-dark text-center rounded" style="background-color: var(--bs-gray-300)">
Gray 300
</div>
</div>
<div class="col-6 col-md-3">
<div class="p-3 text-dark text-center rounded" style="background-color: var(--bs-gray-400)">
Gray 400
</div>
</div>
<div class="col-6 col-md-3">
<div class="p-3 text-white text-center rounded" style="background-color: var(--bs-gray-500)">
Gray 500
</div>
</div>
<div class="col-6 col-md-3">
<div class="p-3 text-white text-center rounded" style="background-color: var(--bs-gray-600)">
Gray 600
</div>
</div>
<div class="col-6 col-md-3">
<div class="p-3 text-white text-center rounded" style="background-color: var(--bs-gray-700)">
Gray 700
</div>
</div>
<div class="col-6 col-md-3">
<div class="p-3 text-white text-center rounded" style="background-color: var(--bs-gray-800)">
Gray 800
</div>
</div>
<div class="col-6 col-md-3">
<div class="p-3 text-white text-center rounded" style="background-color: var(--bs-gray-900)">
Gray 900
</div>
</div>
<div class="col-6 col-md-3">
<div class="p-3 bg-black text-white text-center rounded">
Black
</div>
</div>
</div>
</div>
背景颜色工具类
1. 基础背景颜色
<!-- 背景颜色工具类 -->
<div class="container my-4">
<div class="row g-3">
<div class="col-12">
<h4>主题背景颜色</h4>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-primary text-white rounded">.bg-primary</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-secondary text-white rounded">.bg-secondary</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-success text-white rounded">.bg-success</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-danger text-white rounded">.bg-danger</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-warning text-dark rounded">.bg-warning</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-info text-dark rounded">.bg-info</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-light text-dark rounded border">.bg-light</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-dark text-white rounded">.bg-dark</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-body text-body rounded border">.bg-body</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-white text-dark rounded border">.bg-white</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-transparent text-dark rounded border">.bg-transparent</div>
</div>
</div>
</div>
2. 背景颜色透明度
<!-- 背景颜色透明度 -->
<div class="container my-4">
<div class="row g-3">
<div class="col-12">
<h4>背景颜色透明度</h4>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-primary bg-opacity-10 text-dark rounded border">.bg-primary.bg-opacity-10</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-primary bg-opacity-25 text-dark rounded">.bg-primary.bg-opacity-25</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-primary bg-opacity-50 text-white rounded">.bg-primary.bg-opacity-50</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-primary bg-opacity-75 text-white rounded">.bg-primary.bg-opacity-75</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-primary text-white rounded">.bg-primary</div>
</div>
</div>
<!-- 其他颜色的透明度示例 -->
<div class="row g-3 mt-3">
<div class="col-6 col-md-4">
<div class="p-3 bg-success bg-opacity-25 text-dark rounded">.bg-success.bg-opacity-25</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-danger bg-opacity-25 text-dark rounded">.bg-danger.bg-opacity-25</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-warning bg-opacity-25 text-dark rounded">.bg-warning.bg-opacity-25</div>
</div>
</div>
</div>
3. 渐变背景
<!-- 渐变背景 -->
<div class="container my-4">
<div class="row g-3">
<div class="col-12">
<h4>渐变背景</h4>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-primary bg-gradient text-white rounded">.bg-primary.bg-gradient</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-secondary bg-gradient text-white rounded">.bg-secondary.bg-gradient</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-success bg-gradient text-white rounded">.bg-success.bg-gradient</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-danger bg-gradient text-white rounded">.bg-danger.bg-gradient</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-warning bg-gradient text-dark rounded">.bg-warning.bg-gradient</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 bg-info bg-gradient text-dark rounded">.bg-info.bg-gradient</div>
</div>
</div>
</div>
文本颜色工具类
1. 基础文本颜色
<!-- 文本颜色工具类 -->
<div class="container my-4">
<div class="row">
<div class="col-12">
<h4>文本颜色</h4>
<p class="text-primary">.text-primary</p>
<p class="text-primary-emphasis">.text-primary-emphasis</p>
<p class="text-secondary">.text-secondary</p>
<p class="text-secondary-emphasis">.text-secondary-emphasis</p>
<p class="text-success">.text-success</p>
<p class="text-success-emphasis">.text-success-emphasis</p>
<p class="text-danger">.text-danger</p>
<p class="text-danger-emphasis">.text-danger-emphasis</p>
<p class="text-warning">.text-warning</p>
<p class="text-warning-emphasis">.text-warning-emphasis</p>
<p class="text-info">.text-info</p>
<p class="text-info-emphasis">.text-info-emphasis</p>
<p class="text-light bg-dark p-2 rounded">.text-light</p>
<p class="text-light-emphasis bg-dark p-2 rounded">.text-light-emphasis</p>
<p class="text-dark">.text-dark</p>
<p class="text-dark-emphasis">.text-dark-emphasis</p>
<p class="text-body">.text-body</p>
<p class="text-body-emphasis">.text-body-emphasis</p>
<p class="text-body-secondary">.text-body-secondary</p>
<p class="text-body-tertiary">.text-body-tertiary</p>
<p class="text-black">.text-black</p>
<p class="text-white bg-dark p-2 rounded">.text-white</p>
<p class="text-muted">.text-muted</p>
</div>
</div>
</div>
2. 文本颜色透明度
<!-- 文本颜色透明度 -->
<div class="container my-4">
<div class="row">
<div class="col-12">
<h4>文本颜色透明度</h4>
<p class="text-primary text-opacity-75">.text-primary.text-opacity-75</p>
<p class="text-primary text-opacity-50">.text-primary.text-opacity-50</p>
<p class="text-primary text-opacity-25">.text-primary.text-opacity-25</p>
<p class="text-success text-opacity-75">.text-success.text-opacity-75</p>
<p class="text-danger text-opacity-50">.text-danger.text-opacity-50</p>
<p class="text-warning text-opacity-75">.text-warning.text-opacity-75</p>
</div>
</div>
</div>
3. 链接颜色
<!-- 链接颜色 -->
<div class="container my-4">
<div class="row">
<div class="col-12">
<h4>链接颜色</h4>
<p><a href="#" class="link-primary">Primary link</a></p>
<p><a href="#" class="link-secondary">Secondary link</a></p>
<p><a href="#" class="link-success">Success link</a></p>
<p><a href="#" class="link-danger">Danger link</a></p>
<p><a href="#" class="link-warning">Warning link</a></p>
<p><a href="#" class="link-info">Info link</a></p>
<p><a href="#" class="link-light bg-dark p-2 rounded d-inline-block">Light link</a></p>
<p><a href="#" class="link-dark">Dark link</a></p>
<p><a href="#" class="link-body-emphasis">Emphasis link</a></p>
</div>
</div>
</div>
边框颜色工具类
1. 基础边框颜色
<!-- 边框颜色工具类 -->
<div class="container my-4">
<div class="row g-3">
<div class="col-12">
<h4>边框颜色</h4>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-primary rounded">.border-primary</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-secondary rounded">.border-secondary</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-success rounded">.border-success</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-danger rounded">.border-danger</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-warning rounded">.border-warning</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-info rounded">.border-info</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-light rounded">.border-light</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-dark rounded">.border-dark</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-white bg-dark text-white rounded">.border-white</div>
</div>
</div>
</div>
2. 边框透明度
<!-- 边框透明度 -->
<div class="container my-4">
<div class="row g-3">
<div class="col-12">
<h4>边框透明度</h4>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-primary border-opacity-10 rounded">.border-primary.border-opacity-10</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-primary border-opacity-25 rounded">.border-primary.border-opacity-25</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-primary border-opacity-50 rounded">.border-primary.border-opacity-50</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-primary border-opacity-75 rounded">.border-primary.border-opacity-75</div>
</div>
<div class="col-6 col-md-4">
<div class="p-3 border border-primary rounded">.border-primary</div>
</div>
</div>
</div>
CSS 变量系统
1. Bootstrap CSS 变量
Bootstrap 5 使用 CSS 自定义属性(变量)来定义颜色,这使得主题定制变得更加灵活:
/* Bootstrap 5 默认 CSS 变量 */
:root {
/* 主题颜色 */
--bs-primary: #0d6efd;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary: #6c757d;
--bs-secondary-rgb: 108, 117, 125;
--bs-success: #198754;
--bs-success-rgb: 25, 135, 84;
--bs-danger: #dc3545;
--bs-danger-rgb: 220, 53, 69;
--bs-warning: #ffc107;
--bs-warning-rgb: 255, 193, 7;
--bs-info: #0dcaf0;
--bs-info-rgb: 13, 202, 240;
--bs-light: #f8f9fa;
--bs-light-rgb: 248, 249, 250;
--bs-dark: #212529;
--bs-dark-rgb: 33, 37, 41;
/* 灰度颜色 */
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-black: #000;
/* 文本颜色 */
--bs-body-color: #212529;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg: #fff;
--bs-body-bg-rgb: 255, 255, 255;
/* 边框颜色 */
--bs-border-color: #dee2e6;
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
}
2. 使用 CSS 变量自定义颜色
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>自定义颜色主题</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
/* 自定义主题颜色 */
.theme-purple {
--bs-primary: #6f42c1;
--bs-primary-rgb: 111, 66, 193;
--bs-secondary: #e83e8c;
--bs-secondary-rgb: 232, 62, 140;
--bs-success: #20c997;
--bs-success-rgb: 32, 201, 151;
}
.theme-orange {
--bs-primary: #fd7e14;
--bs-primary-rgb: 253, 126, 20;
--bs-secondary: #6c757d;
--bs-secondary-rgb: 108, 117, 125;
--bs-success: #198754;
--bs-success-rgb: 25, 135, 84;
}
.theme-dark {
--bs-primary: #375a7f;
--bs-primary-rgb: 55, 90, 127;
--bs-secondary: #444;
--bs-secondary-rgb: 68, 68, 68;
--bs-body-color: #fff;
--bs-body-color-rgb: 255, 255, 255;
--bs-body-bg: #222;
--bs-body-bg-rgb: 34, 34, 34;
--bs-border-color: #444;
}
</style>
</head>
<body>
<div class="container my-5">
<!-- 默认主题 -->
<div class="mb-5">
<h2>默认主题</h2>
<div class="row g-3">
<div class="col-auto">
<button class="btn btn-primary">Primary</button>
</div>
<div class="col-auto">
<button class="btn btn-secondary">Secondary</button>
</div>
<div class="col-auto">
<button class="btn btn-success">Success</button>
</div>
</div>
</div>
<!-- 紫色主题 -->
<div class="theme-purple mb-5">
<h2>紫色主题</h2>
<div class="row g-3">
<div class="col-auto">
<button class="btn btn-primary">Primary</button>
</div>
<div class="col-auto">
<button class="btn btn-secondary">Secondary</button>
</div>
<div class="col-auto">
<button class="btn btn-success">Success</button>
</div>
</div>
</div>
<!-- 橙色主题 -->
<div class="theme-orange mb-5">
<h2>橙色主题</h2>
<div class="row g-3">
<div class="col-auto">
<button class="btn btn-primary">Primary</button>
</div>
<div class="col-auto">
<button class="btn btn-secondary">Secondary</button>
</div>
<div class="col-auto">
<button class="btn btn-success">Success</button>
</div>
</div>
</div>
<!-- 深色主题 -->
<div class="theme-dark p-4 rounded">
<h2>深色主题</h2>
<div class="row g-3">
<div class="col-auto">
<button class="btn btn-primary">Primary</button>
</div>
<div class="col-auto">
<button class="btn btn-secondary">Secondary</button>
</div>
<div class="col-auto">
<button class="btn btn-success">Success</button>
</div>
</div>
</div>
</div>
</body>
</html>
深色模式支持
1. Bootstrap 5.3+ 深色模式
<!DOCTYPE html>
<html lang="zh-CN" data-bs-theme="light">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>深色模式示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container my-5">
<!-- 主题切换器 -->
<div class="mb-4">
<h2>主题切换</h2>
<div class="btn-group" role="group">
<button type="button" class="btn btn-outline-primary" onclick="setTheme('light')">
<i class="bi bi-sun"></i> 浅色模式
</button>
<button type="button" class="btn btn-outline-primary" onclick="setTheme('dark')">
<i class="bi bi-moon"></i> 深色模式
</button>
<button type="button" class="btn btn-outline-primary" onclick="setTheme('auto')">
<i class="bi bi-circle-half"></i> 自动
</button>
</div>
</div>
<!-- 示例内容 -->
<div class="row g-4">
<div class="col-12 col-md-6">
<div class="card">
<div class="card-header">
<h5 class="card-title mb-0">卡片标题</h5>
</div>
<div class="card-body">
<p class="card-text">这是一个示例卡片,展示深色模式下的外观。</p>
<button class="btn btn-primary">主要按钮</button>
<button class="btn btn-outline-secondary">次要按钮</button>
</div>
</div>
</div>
<div class="col-12 col-md-6">
<div class="card">
<div class="card-body">
<h5 class="card-title">表单示例</h5>
<form>
<div class="mb-3">
<label for="email" class="form-label">邮箱地址</label>
<input type="email" class="form-control" id="email" placeholder="输入邮箱">
</div>
<div class="mb-3">
<label for="message" class="form-label">消息</label>
<textarea class="form-control" id="message" rows="3" placeholder="输入消息"></textarea>
</div>
<button type="submit" class="btn btn-success">提交</button>
</form>
</div>
</div>
</div>
</div>
<!-- 警告框示例 -->
<div class="row g-3 mt-4">
<div class="col-12">
<h3>警告框示例</h3>
</div>
<div class="col-12 col-md-6">
<div class="alert alert-primary" role="alert">
这是一个主要信息警告框。
</div>
</div>
<div class="col-12 col-md-6">
<div class="alert alert-success" role="alert">
这是一个成功信息警告框。
</div>
</div>
<div class="col-12 col-md-6">
<div class="alert alert-warning" role="alert">
这是一个警告信息警告框。
</div>
</div>
<div class="col-12 col-md-6">
<div class="alert alert-danger" role="alert">
这是一个危险信息警告框。
</div>
</div>
</div>
</div>
<script>
function setTheme(theme) {
document.documentElement.setAttribute('data-bs-theme', theme);
localStorage.setItem('theme', theme);
}
// 页面加载时恢复主题设置
document.addEventListener('DOMContentLoaded', function() {
const savedTheme = localStorage.getItem('theme') || 'light';
setTheme(savedTheme);
});
</script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
2. 自定义深色模式样式
/* 自定义深色模式样式 */
[data-bs-theme="dark"] {
/* 自定义深色模式颜色 */
--bs-body-color: #e9ecef;
--bs-body-bg: #1a1a1a;
--bs-emphasis-color: #ffffff;
--bs-secondary-color: rgba(233, 236, 239, 0.75);
--bs-tertiary-color: rgba(233, 236, 239, 0.5);
--bs-border-color: #404040;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
/* 自定义主题颜色 */
--bs-primary: #4dabf7;
--bs-primary-rgb: 77, 171, 247;
--bs-secondary: #6c757d;
--bs-secondary-rgb: 108, 117, 125;
--bs-success: #51cf66;
--bs-success-rgb: 81, 207, 102;
--bs-danger: #ff6b6b;
--bs-danger-rgb: 255, 107, 107;
--bs-warning: #ffd43b;
--bs-warning-rgb: 255, 212, 59;
--bs-info: #74c0fc;
--bs-info-rgb: 116, 192, 252;
}
/* 深色模式下的卡片样式 */
[data-bs-theme="dark"] .card {
background-color: #2d2d2d;
border-color: #404040;
}
/* 深色模式下的表单控件 */
[data-bs-theme="dark"] .form-control {
background-color: #2d2d2d;
border-color: #404040;
color: #e9ecef;
}
[data-bs-theme="dark"] .form-control:focus {
background-color: #2d2d2d;
border-color: var(--bs-primary);
color: #e9ecef;
box-shadow: 0 0 0 0.2rem rgba(var(--bs-primary-rgb), 0.25);
}
/* 深色模式下的导航栏 */
[data-bs-theme="dark"] .navbar-light {
background-color: #2d2d2d !important;
}
[data-bs-theme="dark"] .navbar-light .navbar-nav .nav-link {
color: #e9ecef;
}
[data-bs-theme="dark"] .navbar-light .navbar-nav .nav-link:hover {
color: var(--bs-primary);
}
Sass 变量定制
1. 基础 Sass 变量
// 自定义 Bootstrap Sass 变量
// _custom-variables.scss
// 主题颜色定制
$primary: #6f42c1;
$secondary: #e83e8c;
$success: #20c997;
$info: #17a2b8;
$warning: #ffc107;
$danger: #dc3545;
$light: #f8f9fa;
$dark: #343a40;
// 灰度颜色定制
$white: #fff;
$gray-100: #f8f9fa;
$gray-200: #e9ecef;
$gray-300: #dee2e6;
$gray-400: #ced4da;
$gray-500: #adb5bd;
$gray-600: #6c757d;
$gray-700: #495057;
$gray-800: #343a40;
$gray-900: #212529;
$black: #000;
// 字体定制
$font-family-sans-serif: "Helvetica Neue", Arial, "Noto Sans", sans-serif;
$font-family-monospace: "SF Mono", Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
$font-size-base: 1rem;
$font-weight-lighter: lighter;
$font-weight-light: 300;
$font-weight-normal: 400;
$font-weight-medium: 500;
$font-weight-semibold: 600;
$font-weight-bold: 700;
$font-weight-bolder: bolder;
// 间距定制
$spacer: 1rem;
$spacers: (
0: 0,
1: $spacer * 0.25,
2: $spacer * 0.5,
3: $spacer,
4: $spacer * 1.5,
5: $spacer * 3,
6: $spacer * 4,
7: $spacer * 5
);
// 边框定制
$border-width: 1px;
$border-color: $gray-300;
$border-radius: 0.375rem;
$border-radius-sm: 0.25rem;
$border-radius-lg: 0.5rem;
$border-radius-xl: 1rem;
$border-radius-2xl: 2rem;
$border-radius-pill: 50rem;
// 阴影定制
$box-shadow: 0 0.5rem 1rem rgba($black, 0.15);
$box-shadow-sm: 0 0.125rem 0.25rem rgba($black, 0.075);
$box-shadow-lg: 0 1rem 3rem rgba($black, 0.175);
$box-shadow-inset: inset 0 1px 2px rgba($black, 0.075);
// 组件定制
$component-active-color: $white;
$component-active-bg: $primary;
// 链接定制
$link-color: $primary;
$link-decoration: underline;
$link-hover-color: darken($link-color, 15%);
$link-hover-decoration: null;
// 按钮定制
$btn-padding-y: 0.375rem;
$btn-padding-x: 0.75rem;
$btn-font-family: null;
$btn-font-size: $font-size-base;
$btn-line-height: $line-height-base;
$btn-white-space: null;
$btn-padding-y-sm: 0.25rem;
$btn-padding-x-sm: 0.5rem;
$btn-font-size-sm: $font-size-sm;
$btn-padding-y-lg: 0.5rem;
$btn-padding-x-lg: 1rem;
$btn-font-size-lg: $font-size-lg;
$btn-border-width: $border-width;
$btn-font-weight: $font-weight-normal;
$btn-box-shadow: inset 0 1px 0 rgba($white, 0.15), 0 1px 1px rgba($black, 0.075);
$btn-focus-width: 0.2rem;
$btn-focus-box-shadow: 0 0 0 $btn-focus-width rgba($component-active-bg, 0.5);
$btn-disabled-opacity: 0.65;
$btn-active-box-shadow: inset 0 3px 5px rgba($black, 0.125);
$btn-link-color: $link-color;
$btn-link-hover-color: $link-hover-color;
$btn-link-disabled-color: $gray-600;
$btn-border-radius: $border-radius;
$btn-border-radius-sm: $border-radius-sm;
$btn-border-radius-lg: $border-radius-lg;
$btn-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
// 导入 Bootstrap
@import "~bootstrap/scss/bootstrap";
2. 编译自定义主题
// main.scss - 主样式文件
// 1. 首先导入自定义变量
@import "custom-variables";
// 2. 导入 Bootstrap
@import "~bootstrap/scss/bootstrap";
// 3. 添加自定义样式
@import "custom-components";
// _custom-components.scss - 自定义组件样式
// 自定义按钮变体
.btn-gradient-primary {
@include button-variant(
$primary,
$primary,
$hover-background: darken($primary, 7.5%),
$hover-border: darken($primary, 10%),
$active-background: darken($primary, 10%),
$active-border: darken($primary, 12.5%)
);
background: linear-gradient(45deg, $primary, lighten($primary, 10%));
border: none;
&:hover {
background: linear-gradient(45deg, darken($primary, 5%), lighten($primary, 5%));
}
}
// 自定义卡片样式
.card-custom {
border: none;
box-shadow: 0 0.125rem 0.25rem rgba($black, 0.075);
transition: box-shadow 0.15s ease-in-out;
&:hover {
box-shadow: 0 0.5rem 1rem rgba($black, 0.15);
}
.card-header {
background: linear-gradient(135deg, $primary, lighten($primary, 10%));
color: $white;
border-bottom: none;
}
}
// 自定义导航栏
.navbar-custom {
background: linear-gradient(135deg, $primary, $secondary);
.navbar-brand,
.navbar-nav .nav-link {
color: $white;
&:hover {
color: rgba($white, 0.8);
}
}
}
// 自定义表单控件
.form-control-custom {
border: 2px solid $gray-300;
border-radius: $border-radius-lg;
padding: 0.75rem 1rem;
&:focus {
border-color: $primary;
box-shadow: 0 0 0 0.2rem rgba($primary, 0.25);
}
}
// 自定义警告框
.alert-custom {
border: none;
border-left: 4px solid;
border-radius: 0;
&.alert-primary {
border-left-color: $primary;
background-color: rgba($primary, 0.1);
}
&.alert-success {
border-left-color: $success;
background-color: rgba($success, 0.1);
}
&.alert-danger {
border-left-color: $danger;
background-color: rgba($danger, 0.1);
}
}
实际应用案例
1. 企业品牌主题
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>企业品牌主题示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
/* 企业品牌颜色定制 */
:root {
--bs-primary: #1e3a8a;
--bs-primary-rgb: 30, 58, 138;
--bs-secondary: #64748b;
--bs-secondary-rgb: 100, 116, 139;
--bs-success: #059669;
--bs-success-rgb: 5, 150, 105;
--bs-warning: #d97706;
--bs-warning-rgb: 217, 119, 6;
--bs-danger: #dc2626;
--bs-danger-rgb: 220, 38, 38;
--bs-info: #0284c7;
--bs-info-rgb: 2, 132, 199;
}
/* 自定义组件样式 */
.hero-section {
background: linear-gradient(135deg, var(--bs-primary), #3b82f6);
color: white;
padding: 4rem 0;
}
.feature-card {
border: none;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.feature-card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
}
.feature-icon {
width: 60px;
height: 60px;
background: linear-gradient(135deg, var(--bs-primary), var(--bs-info));
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 1.5rem;
margin: 0 auto 1rem;
}
.btn-brand {
background: linear-gradient(135deg, var(--bs-primary), var(--bs-info));
border: none;
color: white;
padding: 0.75rem 2rem;
border-radius: 50px;
font-weight: 600;
transition: all 0.3s ease;
}
.btn-brand:hover {
background: linear-gradient(135deg, #1e40af, #0284c7);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(30, 58, 138, 0.4);
color: white;
}
</style>
</head>
<body>
<!-- 导航栏 -->
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand fw-bold" href="#">企业品牌</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link active" href="#">首页</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">产品</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">服务</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">关于我们</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">联系我们</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- 英雄区域 -->
<section class="hero-section">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6">
<h1 class="display-4 fw-bold mb-4">创新解决方案</h1>
<p class="lead mb-4">
我们提供最先进的技术解决方案,帮助您的企业在数字化时代取得成功。
专业、可靠、创新是我们的核心价值。
</p>
<div class="d-flex gap-3">
<button class="btn btn-brand">了解更多</button>
<button class="btn btn-outline-light">联系我们</button>
</div>
</div>
<div class="col-lg-6">
<img src="https://via.placeholder.com/600x400" class="img-fluid rounded" alt="企业形象">
</div>
</div>
</div>
</section>
<!-- 特性展示 -->
<section class="py-5">
<div class="container">
<div class="row mb-5">
<div class="col-12 text-center">
<h2 class="display-5 fw-bold text-primary mb-3">我们的优势</h2>
<p class="lead text-muted">
专业的团队,先进的技术,为您提供最优质的服务
</p>
</div>
</div>
<div class="row g-4">
<div class="col-md-4">
<div class="card feature-card h-100 text-center p-4">
<div class="feature-icon">
<i class="bi bi-lightning"></i>
</div>
<h5 class="card-title text-primary">高效快速</h5>
<p class="card-text text-muted">
采用最新技术栈,确保项目快速交付,
提升您的业务效率和竞争力。
</p>
</div>
</div>
<div class="col-md-4">
<div class="card feature-card h-100 text-center p-4">
<div class="feature-icon">
<i class="bi bi-shield-check"></i>
</div>
<h5 class="card-title text-primary">安全可靠</h5>
<p class="card-text text-muted">
严格的安全标准和质量控制,
确保您的数据和业务安全无忧。
</p>
</div>
</div>
<div class="col-md-4">
<div class="card feature-card h-100 text-center p-4">
<div class="feature-icon">
<i class="bi bi-people"></i>
</div>
<h5 class="card-title text-primary">专业团队</h5>
<p class="card-text text-muted">
经验丰富的专业团队,
为您提供全方位的技术支持和服务。
</p>
</div>
</div>
</div>
</div>
</section>
<!-- 统计数据 -->
<section class="bg-light py-5">
<div class="container">
<div class="row text-center">
<div class="col-md-3 mb-4">
<div class="h2 text-primary fw-bold">500+</div>
<p class="text-muted">成功项目</p>
</div>
<div class="col-md-3 mb-4">
<div class="h2 text-success fw-bold">98%</div>
<p class="text-muted">客户满意度</p>
</div>
<div class="col-md-3 mb-4">
<div class="h2 text-info fw-bold">24/7</div>
<p class="text-muted">技术支持</p>
</div>
<div class="col-md-3 mb-4">
<div class="h2 text-warning fw-bold">5年</div>
<p class="text-muted">行业经验</p>
</div>
</div>
</div>
</section>
<!-- 行动号召 -->
<section class="bg-primary text-white py-5">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-8">
<h3 class="h2 mb-2">准备开始您的项目了吗?</h3>
<p class="lead mb-0">
联系我们的专业团队,获取免费咨询和项目评估。
</p>
</div>
<div class="col-lg-4 text-lg-end">
<button class="btn btn-light btn-lg px-4">
<span class="text-primary fw-bold">立即咨询</span>
</button>
</div>
</div>
</div>
</section>
<!-- 页脚 -->
<footer class="bg-dark text-white py-4">
<div class="container">
<div class="row">
<div class="col-md-6">
<h5>企业品牌</h5>
<p class="text-muted">专业的技术解决方案提供商</p>
</div>
<div class="col-md-6 text-md-end">
<p class="text-muted mb-0">© 2023 企业品牌. 保留所有权利.</p>
</div>
</div>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
2. 动态主题切换器
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>动态主题切换器</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css" rel="stylesheet">
<style>
/* 主题定义 */
.theme-blue {
--bs-primary: #0d6efd;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary: #6c757d;
--bs-secondary-rgb: 108, 117, 125;
}
.theme-green {
--bs-primary: #198754;
--bs-primary-rgb: 25, 135, 84;
--bs-secondary: #20c997;
--bs-secondary-rgb: 32, 201, 151;
}
.theme-purple {
--bs-primary: #6f42c1;
--bs-primary-rgb: 111, 66, 193;
--bs-secondary: #e83e8c;
--bs-secondary-rgb: 232, 62, 140;
}
.theme-orange {
--bs-primary: #fd7e14;
--bs-primary-rgb: 253, 126, 20;
--bs-secondary: #ffc107;
--bs-secondary-rgb: 255, 193, 7;
}
.theme-red {
--bs-primary: #dc3545;
--bs-primary-rgb: 220, 53, 69;
--bs-secondary: #e83e8c;
--bs-secondary-rgb: 232, 62, 140;
}
/* 主题切换器样式 */
.theme-switcher {
position: fixed;
top: 50%;
right: 20px;
transform: translateY(-50%);
background: white;
border-radius: 10px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
padding: 1rem;
z-index: 1000;
}
.theme-color {
width: 40px;
height: 40px;
border-radius: 50%;
border: 3px solid transparent;
cursor: pointer;
transition: all 0.3s ease;
margin: 0.25rem;
}
.theme-color:hover {
transform: scale(1.1);
}
.theme-color.active {
border-color: #333;
transform: scale(1.2);
}
.theme-blue .theme-color { background: #0d6efd; }
.theme-green .theme-color { background: #198754; }
.theme-purple .theme-color { background: #6f42c1; }
.theme-orange .theme-color { background: #fd7e14; }
.theme-red .theme-color { background: #dc3545; }
/* 过渡动画 */
* {
transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease;
}
</style>
</head>
<body class="theme-blue">
<!-- 主题切换器 -->
<div class="theme-switcher">
<h6 class="text-center mb-3">选择主题</h6>
<div class="d-flex flex-column align-items-center">
<div class="theme-color" data-theme="blue" style="background: #0d6efd;"></div>
<div class="theme-color" data-theme="green" style="background: #198754;"></div>
<div class="theme-color" data-theme="purple" style="background: #6f42c1;"></div>
<div class="theme-color" data-theme="orange" style="background: #fd7e14;"></div>
<div class="theme-color" data-theme="red" style="background: #dc3545;"></div>
</div>
</div>
<!-- 导航栏 -->
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand" href="#">主题演示</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link active" href="#">首页</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">产品</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">服务</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- 主要内容 -->
<div class="container my-5">
<div class="row">
<div class="col-12 text-center mb-5">
<h1 class="display-4 text-primary">动态主题切换演示</h1>
<p class="lead text-muted">点击右侧的颜色按钮来切换不同的主题</p>
</div>
</div>
<!-- 按钮示例 -->
<div class="row mb-5">
<div class="col-12">
<h3 class="text-primary mb-3">按钮示例</h3>
<div class="d-flex flex-wrap gap-2">
<button class="btn btn-primary">Primary</button>
<button class="btn btn-secondary">Secondary</button>
<button class="btn btn-success">Success</button>
<button class="btn btn-danger">Danger</button>
<button class="btn btn-warning">Warning</button>
<button class="btn btn-info">Info</button>
<button class="btn btn-outline-primary">Outline Primary</button>
<button class="btn btn-outline-secondary">Outline Secondary</button>
</div>
</div>
</div>
<!-- 卡片示例 -->
<div class="row mb-5">
<div class="col-12">
<h3 class="text-primary mb-3">卡片示例</h3>
</div>
<div class="col-md-4 mb-3">
<div class="card">
<div class="card-header bg-primary text-white">
<h5 class="card-title mb-0">主要卡片</h5>
</div>
<div class="card-body">
<p class="card-text">这是一个主要颜色的卡片示例。</p>
<a href="#" class="btn btn-primary">了解更多</a>
</div>
</div>
</div>
<div class="col-md-4 mb-3">
<div class="card">
<div class="card-header bg-secondary text-white">
<h5 class="card-title mb-0">次要卡片</h5>
</div>
<div class="card-body">
<p class="card-text">这是一个次要颜色的卡片示例。</p>
<a href="#" class="btn btn-secondary">了解更多</a>
</div>
</div>
</div>
<div class="col-md-4 mb-3">
<div class="card">
<div class="card-header bg-success text-white">
<h5 class="card-title mb-0">成功卡片</h5>
</div>
<div class="card-body">
<p class="card-text">这是一个成功颜色的卡片示例。</p>
<a href="#" class="btn btn-success">了解更多</a>
</div>
</div>
</div>
</div>
<!-- 警告框示例 -->
<div class="row mb-5">
<div class="col-12">
<h3 class="text-primary mb-3">警告框示例</h3>
<div class="alert alert-primary" role="alert">
<i class="bi bi-info-circle"></i> 这是一个主要信息警告框。
</div>
<div class="alert alert-secondary" role="alert">
<i class="bi bi-info-circle"></i> 这是一个次要信息警告框。
</div>
<div class="alert alert-success" role="alert">
<i class="bi bi-check-circle"></i> 这是一个成功信息警告框。
</div>
<div class="alert alert-danger" role="alert">
<i class="bi bi-exclamation-triangle"></i> 这是一个危险信息警告框。
</div>
</div>
</div>
<!-- 徽章示例 -->
<div class="row mb-5">
<div class="col-12">
<h3 class="text-primary mb-3">徽章示例</h3>
<div class="d-flex flex-wrap gap-2">
<span class="badge bg-primary">Primary</span>
<span class="badge bg-secondary">Secondary</span>
<span class="badge bg-success">Success</span>
<span class="badge bg-danger">Danger</span>
<span class="badge bg-warning text-dark">Warning</span>
<span class="badge bg-info text-dark">Info</span>
<span class="badge bg-light text-dark">Light</span>
<span class="badge bg-dark">Dark</span>
</div>
</div>
</div>
</div>
<script>
// 主题切换功能
document.addEventListener('DOMContentLoaded', function() {
const themeColors = document.querySelectorAll('.theme-color');
const body = document.body;
// 设置默认活动主题
document.querySelector('[data-theme="blue"]').classList.add('active');
themeColors.forEach(color => {
color.addEventListener('click', function() {
const theme = this.getAttribute('data-theme');
// 移除所有主题类
body.className = body.className.replace(/theme-\w+/g, '');
// 添加新主题类
body.classList.add(`theme-${theme}`);
// 更新活动状态
themeColors.forEach(c => c.classList.remove('active'));
this.classList.add('active');
// 保存主题设置
localStorage.setItem('selectedTheme', theme);
});
});
// 恢复保存的主题
const savedTheme = localStorage.getItem('selectedTheme');
if (savedTheme) {
const themeElement = document.querySelector(`[data-theme="${savedTheme}"]`);
if (themeElement) {
themeElement.click();
}
}
});
</script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
颜色可访问性
1. 颜色对比度
确保文本和背景之间有足够的对比度,以满足 WCAG 可访问性标准:
<!-- 良好的颜色对比度示例 -->
<div class="container my-4">
<div class="row g-3">
<div class="col-12">
<h4>颜色对比度示例</h4>
</div>
<!-- 良好的对比度 -->
<div class="col-md-6">
<h5 class="text-success">✓ 良好的对比度</h5>
<div class="p-3 bg-primary text-white rounded mb-2">
白色文本在深蓝色背景上 (对比度: 8.6:1)
</div>
<div class="p-3 bg-dark text-white rounded mb-2">
白色文本在深色背景上 (对比度: 15.3:1)
</div>
<div class="p-3 bg-light text-dark rounded border mb-2">
深色文本在浅色背景上 (对比度: 12.6:1)
</div>
</div>
<!-- 较差的对比度 -->
<div class="col-md-6">
<h5 class="text-danger">✗ 较差的对比度</h5>
<div class="p-3 text-warning rounded border mb-2" style="background-color: #fff3cd;">
黄色文本在浅黄色背景上 (对比度: 1.8:1)
</div>
<div class="p-3 text-info rounded border mb-2" style="background-color: #d1ecf1;">
浅蓝色文本在浅蓝色背景上 (对比度: 2.1:1)
</div>
<div class="p-3 text-muted rounded border mb-2" style="background-color: #f8f9fa;">
灰色文本在浅灰色背景上 (对比度: 2.9:1)
</div>
</div>
</div>
</div>
2. 色盲友好设计
<!-- 色盲友好设计示例 -->
<div class="container my-4">
<div class="row">
<div class="col-12">
<h4>色盲友好设计</h4>
<p class="text-muted">除了颜色之外,还使用图标、形状和文字来传达信息</p>
</div>
</div>
<!-- 状态指示器 -->
<div class="row g-3 mb-4">
<div class="col-md-4">
<div class="alert alert-success d-flex align-items-center" role="alert">
<i class="bi bi-check-circle-fill me-2"></i>
<div>
<strong>成功</strong><br>
操作已完成
</div>
</div>
</div>
<div class="col-md-4">
<div class="alert alert-warning d-flex align-items-center" role="alert">
<i class="bi bi-exclamation-triangle-fill me-2"></i>
<div>
<strong>警告</strong><br>
请注意此信息
</div>
</div>
</div>
<div class="col-md-4">
<div class="alert alert-danger d-flex align-items-center" role="alert">
<i class="bi bi-x-circle-fill me-2"></i>
<div>
<strong>错误</strong><br>
操作失败
</div>
</div>
</div>
</div>
<!-- 进度指示器 -->
<div class="row mb-4">
<div class="col-12">
<h5>进度指示器</h5>
<div class="progress mb-2" style="height: 25px;">
<div class="progress-bar bg-success" role="progressbar" style="width: 25%">
<span class="fw-bold">25% 完成</span>
</div>
</div>
<div class="progress mb-2" style="height: 25px;">
<div class="progress-bar bg-warning" role="progressbar" style="width: 50%">
<span class="fw-bold text-dark">50% 完成</span>
</div>
</div>
<div class="progress mb-2" style="height: 25px;">
<div class="progress-bar bg-danger" role="progressbar" style="width: 75%">
<span class="fw-bold">75% 完成</span>
</div>
</div>
</div>
</div>
<!-- 表单验证 -->
<div class="row">
<div class="col-md-6">
<h5>表单验证状态</h5>
<div class="mb-3">
<label for="validInput" class="form-label">
<i class="bi bi-check-circle text-success"></i>
有效输入
</label>
<input type="text" class="form-control is-valid" id="validInput" value="正确的输入">
<div class="valid-feedback">
<i class="bi bi-check"></i> 输入格式正确!
</div>
</div>
<div class="mb-3">
<label for="invalidInput" class="form-label">
<i class="bi bi-x-circle text-danger"></i>
无效输入
</label>
<input type="text" class="form-control is-invalid" id="invalidInput" value="错误的输入">
<div class="invalid-feedback">
<i class="bi bi-x"></i> 输入格式不正确!
</div>
</div>
</div>
</div>
</div>
性能优化
1. CSS 变量优化
/* 优化的 CSS 变量使用 */
:root {
/* 只定义必要的颜色变量 */
--primary-h: 210;
--primary-s: 100%;
--primary-l: 50%;
/* 使用 HSL 生成颜色变体 */
--bs-primary: hsl(var(--primary-h), var(--primary-s), var(--primary-l));
--bs-primary-dark: hsl(var(--primary-h), var(--primary-s), calc(var(--primary-l) - 10%));
--bs-primary-light: hsl(var(--primary-h), var(--primary-s), calc(var(--primary-l) + 10%));
/* RGB 值用于透明度 */
--bs-primary-rgb: 0, 123, 255;
}
/* 减少重复的颜色定义 */
.btn-primary {
background-color: var(--bs-primary);
border-color: var(--bs-primary);
}
.btn-primary:hover {
background-color: var(--bs-primary-dark);
border-color: var(--bs-primary-dark);
}
2. 按需加载颜色
// 按需导入 Bootstrap 颜色模块
@import "~bootstrap/scss/functions";
@import "~bootstrap/scss/variables";
@import "~bootstrap/scss/mixins";
// 只导入需要的颜色工具
@import "~bootstrap/scss/utilities/api";
// 自定义工具类生成
$utilities: (
"color": (
property: color,
class: text,
values: (
"primary": $primary,
"secondary": $secondary,
"success": $success,
"danger": $danger,
"warning": $warning,
"info": $info,
"dark": $dark,
"body": $body-color,
"muted": $text-muted,
"white": $white,
"black-50": rgba($black, .5),
"white-50": rgba($white, .5)
)
),
"background-color": (
property: background-color,
class: bg,
values: (
"primary": $primary,
"secondary": $secondary,
"success": $success,
"danger": $danger,
"warning": $warning,
"info": $info,
"light": $light,
"dark": $dark,
"body": $body-bg,
"white": $white,
"transparent": transparent
)
)
);
本章总结
本章详细介绍了 Bootstrap 5 的颜色系统和主题定制功能:
主要内容
颜色系统基础
- 主题颜色的含义和使用场景
- 灰度颜色系统
- 颜色的语义化应用
工具类应用
- 背景颜色工具类及透明度控制
- 文本颜色工具类及透明度控制
- 边框颜色工具类
- 渐变背景效果
CSS 变量系统
- Bootstrap 5 的 CSS 变量结构
- 自定义颜色主题
- 动态主题切换
深色模式支持
- Bootstrap 5.3+ 原生深色模式
- 自定义深色模式样式
- 主题切换实现
Sass 变量定制
- 自定义 Sass 变量
- 编译自定义主题
- 组件样式定制
可访问性考虑
- 颜色对比度标准
- 色盲友好设计
- 多重信息传达方式
性能优化
- CSS 变量优化策略
- 按需加载颜色模块
最佳实践
- 语义化使用颜色:根据内容含义选择合适的颜色
- 保持一致性:在整个项目中保持颜色使用的一致性
- 考虑可访问性:确保足够的颜色对比度
- 响应式颜色:在不同设备上测试颜色效果
- 性能优化:合理使用 CSS 变量和按需加载
练习题
基础练习
- 创建一个包含所有 Bootstrap 主题颜色的调色板页面
- 实现一个简单的深色/浅色模式切换功能
- 使用背景颜色透明度创建一个层叠效果的卡片布局
进阶练习
- 设计并实现一个企业品牌主题,包含自定义的主色调和配色方案
- 创建一个动态主题切换器,支持至少 5 种不同的颜色主题
- 实现一个符合 WCAG 可访问性标准的颜色系统
- 使用 Sass 变量创建一个可配置的多品牌主题系统
通过本章的学习,您应该能够熟练使用 Bootstrap 的颜色系统,并能够根据项目需求定制合适的主题颜色方案。