Appearance
CSS 框架
CSS 框架提供预定义的样式和组件,加速开发过程。
概述
CSS 框架是一套预先编写好的 CSS 样式和组件,用于快速构建网站和应用程序。
主流 CSS 框架
Bootstrap
基本结构
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bootstrap 示例</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-8">内容区域</div>
<div class="col-md-4">侧边栏</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
网格系统
html
<!-- Bootstrap 12列网格系统 -->
<div class="container">
<div class="row">
<div class="col-12 col-md-6 col-lg-4">列1</div>
<div class="col-12 col-md-6 col-lg-4">列2</div>
<div class="col-12 col-lg-4">列3</div>
</div>
</div>
<!-- 响应式断点 -->
<div class="container">
<div class="row">
<!-- xs: <576px, sm: ≥576px, md: ≥768px, lg: ≥992px, xl: ≥1200px, xxl: ≥1400px -->
<div class="col-12 col-sm-6 col-md-4 col-lg-3">响应式列</div>
</div>
</div>
组件示例
html
<!-- 按钮 -->
<button type="button" class="btn btn-primary">主要按钮</button>
<button type="button" class="btn btn-outline-secondary">轮廓按钮</button>
<!-- 卡片 -->
<div class="card" style="width: 18rem;">
<img src="image.jpg" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">卡片标题</h5>
<p class="card-text">卡片内容描述。</p>
<a href="#" class="btn btn-primary">查看详情</a>
</div>
</div>
<!-- 导航 -->
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<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">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">首页</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">功能</a>
</li>
</ul>
</div>
</div>
</nav>
Tailwind CSS
基本配置
javascript
// tailwind.config.js
module.exports = {
content: [
"./src/**/*.{html,js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
使用示例
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tailwind CSS 示例</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body>
<!-- 实用优先类名 -->
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex items-center justify-between h-16">
<div class="flex-shrink-0">
<span class="text-2xl font-bold text-indigo-600">Logo</span>
</div>
<div class="hidden md:block">
<div class="ml-10 flex items-baseline space-x-4">
<a href="#" class="text-gray-900 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium">首页</a>
<a href="#" class="text-gray-900 hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium">关于</a>
</div>
</div>
</div>
</div>
</body>
</html>
响应式设计
html
<!-- Tailwind 的响应式前缀 -->
<div class="p-4 md:p-6 lg:p-8">
<div class="text-base sm:text-lg md:text-xl lg:text-2xl">
响应式文本
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4">
<div class="bg-white p-6 rounded-lg shadow">项目1</div>
<div class="bg-white p-6 rounded-lg shadow">项目2</div>
<div class="bg-white p-6 rounded-lg shadow">项目3</div>
<div class="bg-white p-6 rounded-lg shadow">项目4</div>
</div>
</div>
Bulma
基本结构
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bulma 示例</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css">
</head>
<body>
<section class="section">
<div class="container">
<h1 class="title">欢迎使用 Bulma</h1>
<p class="subtitle">现代 CSS 框架</p>
</div>
</section>
</body>
</html>
网格系统
html
<!-- Bulma 网格 -->
<div class="columns">
<div class="column is-8">主内容 (8/12)</div>
<div class="column is-4">侧边栏 (4/12)</div>
</div>
<!-- 响应式网格 -->
<div class="columns">
<div class="column is-12-mobile is-6-tablet is-3-desktop">响应式列</div>
<div class="column is-12-mobile is-6-tablet is-3-desktop">响应式列</div>
<div class="column is-12-mobile is-6-tablet is-3-desktop">响应式列</div>
<div class="column is-12-mobile is-6-tablet is-3-desktop">响应式列</div>
</div>
框架选择指南
按需选择
Bootstrap 适用场景
- 需要快速原型开发
- 团队熟悉 Bootstrap
- 需要丰富的预构建组件
- 项目时间紧张
html
<!-- Bootstrap 表单 -->
<form>
<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">邮箱地址</label>
<input type="email" class="form-control" id="exampleInputEmail1">
</div>
<div class="mb-3">
<label for="exampleInputPassword1" class="form-label">密码</label>
<input type="password" class="form-control" id="exampleInputPassword1">
</div>
<button type="submit" class="btn btn-primary">提交</button>
</form>
Tailwind CSS 适用场景
- 需要高度定制的设计
- 偏好实用优先的类名
- 项目有设计系统
- 团队适应新的开发方式
html
<!-- Tailwind 表单 -->
<form class="space-y-6">
<div>
<label for="email" class="block text-sm font-medium text-gray-700">邮箱地址</label>
<input type="email" class="mt-1 block w-full border border-gray-300 rounded-md p-2 focus:ring-indigo-500 focus:border-indigo-500">
</div>
<div>
<label for="password" class="block text-sm font-medium text-gray-700">密码</label>
<input type="password" class="mt-1 block w-full border border-gray-300 rounded-md p-2 focus:ring-indigo-500 focus:border-indigo-500">
</div>
<button type="submit" class="w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-indigo-600 hover:bg-indigo-700">
提交
</button>
</form>
Bulma 适用场景
- 简洁的样式需求
- Flexbox 布局
- 现代化的外观
- 需要 SASS 定制
性能考虑
文件大小比较
css
/* 各框架的文件大小(压缩后) */
/* Bootstrap: ~160KB */
/* Tailwind: ~300KB (完整版), ~10KB (Purge后) */
/* Bulma: ~200KB */
按需加载
javascript
// Bootstrap 按需引入
import { Modal } from 'bootstrap';
// Tailwind 按需使用类名,自动移除未使用的样式
// 在构建时通过 PurgeCSS 自动优化
// Bulma 可以按组件引入
@import "bulma/sass/base/_all";
@import "bulma/sass/elements/button";
@import "bulma/sass/components/navbar";
自定义和主题
Bootstrap 自定义
SCSS 变量覆盖
scss
// 自定义变量
$primary: #007bff;
$secondary: #6c757d;
$success: #28a745;
$font-family-base: "Helvetica Neue", Arial, sans-serif;
$border-radius: .4rem;
// 导入 Bootstrap
@import "bootstrap/scss/bootstrap";
JavaScript 组件
javascript
// 初始化模态框
const myModal = new bootstrap.Modal(document.getElementById('myModal'));
myModal.show();
// 事件监听
document.getElementById('myModal').addEventListener('shown.bs.modal', function () {
console.log('模态框已显示');
});
Tailwind 自定义
主题配置
javascript
// tailwind.config.js
module.exports = {
theme: {
extend: {
colors: {
brand: {
50: '#f0f9ff',
500: '#3b82f6',
900: '#1e3a8a',
}
},
spacing: {
'18': '4.5rem',
'88': '22rem',
},
fontFamily: {
sans: ['Inter', 'sans-serif'],
}
}
}
}
插件开发
javascript
// 自定义插件
const plugin = require('tailwindcss/plugin')
module.exports = plugin(function({ addUtilities }) {
addUtilities({
'.text-shadow': {
textShadow: '0 2px 4px rgba(0, 0, 0, 0.1)',
},
'.text-shadow-lg': {
textShadow: '0 4px 8px rgba(0, 0, 0, 0.12), 0 2px 4px rgba(0, 0, 0, 0.08)',
},
})
})
实用组件示例
响应式导航栏
html
<!-- Bootstrap 响应式导航 -->
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<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>
卡片组件
html
<!-- Tailwind 卡片 -->
<div class="bg-white rounded-lg shadow-md overflow-hidden max-w-sm">
<img class="w-full h-48 object-cover" src="image.jpg" alt="图片">
<div class="p-6">
<h3 class="text-xl font-semibold text-gray-800 mb-2">卡片标题</h3>
<p class="text-gray-600 mb-4">卡片描述文本,这里是详细内容。</p>
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
了解更多
</button>
</div>
</div>
表单布局
html
<!-- Bulma 表单 -->
<form class="box">
<div class="field">
<label class="label">姓名</label>
<div class="control">
<input class="input" type="text" placeholder="输入姓名">
</div>
</div>
<div class="field">
<label class="label">邮箱</label>
<div class="control">
<input class="input" type="email" placeholder="输入邮箱">
</div>
</div>
<div class="field">
<div class="control">
<label class="checkbox">
<input type="checkbox"> 我同意条款和条件
</label>
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button class="button is-link">提交</button>
</div>
<div class="control">
<button class="button is-link is-light">取消</button>
</div>
</div>
</form>
最佳实践
选择框架的原则
- 项目需求匹配度
- 团队技能水平
- 性能要求
- 维护成本
- 社区支持
使用框架的注意事项
- 避免过度依赖框架
- 了解框架的底层实现
- 定期更新框架版本
- 合理定制避免臃肿
- 注意可访问性
性能优化
html
<!-- 只引入需要的组件 -->
<!-- Bootstrap -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- 使用 PurgeCSS 清理未使用的 Tailwind 类 -->
<!-- 在生产环境中移除未使用的样式 -->
未来趋势
现代化发展方向
- 更好的可访问性支持
- 更轻量级的体积
- 更好的性能表现
- 更灵活的定制选项
- 更好的框架集成
CSS 框架是前端开发的重要工具,选择合适的框架并正确使用,可以大大提高开发效率和用户体验。