Skip to content

CSS 引入方式

CSS(层叠样式表)可以通过多种方式应用到 HTML 文档中。选择合适的引入方式对于项目的可维护性和性能至关重要。

三种主要引入方式

1. 内联样式(Inline Styles)

内联样式直接在 HTML 元素的 style 属性中定义,具有最高的优先级。

语法:

html
<element style="property: value;">

示例:

html
<!DOCTYPE html>
<html>
<head>
    <title>内联样式示例</title>
</head>
<body>
    <h1 style="color: blue; font-size: 24px;">这是蓝色标题</h1>
    <p style="color: red; text-align: center;">这是居中的红色段落</p>
    <div style="background-color: yellow; padding: 20px; border: 2px solid black;">
        这是一个带样式的 div
    </div>
</body>
</html>

优点:

  • 优先级最高,可以覆盖其他样式
  • 适合快速测试和调试
  • 不需要额外的文件

缺点:

  • 难以维护,样式分散在各个元素中
  • 无法复用样式
  • 增加 HTML 文件大小
  • 不利于团队协作

适用场景:

  • 快速原型开发
  • 动态生成的样式(通过 JavaScript)
  • 需要覆盖其他样式的特殊情况

2. 内部样式表(Internal Stylesheet)

内部样式表在 HTML 文档的 <head> 部分使用 <style> 标签定义。

语法:

html
<head>
    <style>
        选择器 {
            属性: 值;
        }
    </style>
</head>

示例:

html
<!DOCTYPE html>
<html>
<head>
    <title>内部样式表示例</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f0f0f0;
            margin: 0;
            padding: 20px;
        }
        
        h1 {
            color: #333;
            text-align: center;
            border-bottom: 3px solid #4CAF50;
            padding-bottom: 10px;
        }
        
        .container {
            max-width: 800px;
            margin: 0 auto;
            background-color: white;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        }
        
        p {
            line-height: 1.6;
            color: #666;
        }
        
        .highlight {
            background-color: yellow;
            padding: 2px 5px;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>欢迎来到我的网站</h1>
        <p>这是一个使用<span class="highlight">内部样式表</span>的示例。</p>
        <p>所有样式都定义在 head 部分的 style 标签中。</p>
    </div>
</body>
</html>

优点:

  • 样式集中管理,便于查看和修改
  • 可以使用所有 CSS 选择器
  • 适合单页面应用
  • 不需要额外的 HTTP 请求

缺点:

  • 样式无法在多个页面间复用
  • 增加 HTML 文件大小
  • 不利于浏览器缓存

适用场景:

  • 单页面网站
  • 页面特定的样式
  • 邮件模板(某些邮件客户端不支持外部样式)

3. 外部样式表(External Stylesheet)

外部样式表将 CSS 代码保存在独立的 .css 文件中,通过 <link> 标签引入。

语法:

html
<head>
    <link rel="stylesheet" href="styles.css">
</head>

示例:

HTML 文件(index.html):

html
<!DOCTYPE html>
<html>
<head>
    <title>外部样式表示例</title>
    <link rel="stylesheet" href="css/main.css">
    <link rel="stylesheet" href="css/responsive.css">
</head>
<body>
    <header class="site-header">
        <h1>我的网站</h1>
        <nav class="main-nav">
            <ul>
                <li><a href="#home">首页</a></li>
                <li><a href="#about">关于</a></li>
                <li><a href="#contact">联系</a></li>
            </ul>
        </nav>
    </header>
    
    <main class="content">
        <article>
            <h2>文章标题</h2>
            <p>这是文章内容...</p>
        </article>
    </main>
    
    <footer class="site-footer">
        <p>&copy; 2024 我的网站</p>
    </footer>
</body>
</html>

CSS 文件(css/main.css):

css
/* 全局样式 */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    line-height: 1.6;
    color: #333;
}

/* 头部样式 */
.site-header {
    background-color: #2c3e50;
    color: white;
    padding: 1rem 2rem;
}

.site-header h1 {
    margin-bottom: 1rem;
}

.main-nav ul {
    list-style: none;
    display: flex;
    gap: 2rem;
}

.main-nav a {
    color: white;
    text-decoration: none;
    transition: color 0.3s;
}

.main-nav a:hover {
    color: #3498db;
}

/* 内容区域 */
.content {
    max-width: 1200px;
    margin: 2rem auto;
    padding: 0 2rem;
}

article {
    background: white;
    padding: 2rem;
    margin-bottom: 2rem;
    border-radius: 8px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}

/* 页脚样式 */
.site-footer {
    background-color: #34495e;
    color: white;
    text-align: center;
    padding: 2rem;
    margin-top: 3rem;
}

优点:

  • 样式可以在多个页面间复用
  • 便于维护和更新
  • 浏览器可以缓存 CSS 文件,提高性能
  • 实现内容与样式的完全分离
  • 便于团队协作

缺点:

  • 需要额外的 HTTP 请求(可通过 HTTP/2 或打包工具优化)
  • 首次加载可能稍慢

适用场景:

  • 多页面网站(推荐)
  • 大型项目
  • 需要团队协作的项目

引入方式对比

特性内联样式内部样式表外部样式表
位置HTML 元素内<head> 中的 <style>独立的 .css 文件
优先级最高中等最低
可复用性不可复用页面内复用多页面复用
维护性中等
缓存不可缓存不可缓存可缓存
文件大小增加 HTML增加 HTML独立文件
适用场景测试/特殊情况单页面多页面(推荐)

多个外部样式表的引入

可以在一个 HTML 文档中引入多个外部样式表:

html
<head>
    <!-- 重置样式 -->
    <link rel="stylesheet" href="css/reset.css">
    
    <!-- 主样式 -->
    <link rel="stylesheet" href="css/main.css">
    
    <!-- 响应式样式 -->
    <link rel="stylesheet" href="css/responsive.css">
    
    <!-- 第三方库 -->
    <link rel="stylesheet" href="https://cdn.example.com/library.css">
</head>

加载顺序:

  • 样式表按照引入顺序加载
  • 后引入的样式会覆盖先引入的样式(相同选择器和属性)

使用 @import 引入样式

在 CSS 文件或 <style> 标签中,可以使用 @import 规则引入其他样式表。

语法:

css
@import url("styles.css");
@import "styles.css";

示例:

在 CSS 文件中:

css
/* main.css */
@import url("reset.css");
@import url("typography.css");
@import url("layout.css");

/* 其他样式 */
body {
    background-color: #f5f5f5;
}

在 HTML 中:

html
<head>
    <style>
        @import url("css/base.css");
        @import url("css/components.css");
        
        /* 页面特定样式 */
        .special {
            color: red;
        }
    </style>
</head>

注意事项:

  • @import 必须放在样式表的开头
  • 会增加额外的 HTTP 请求
  • 可能影响页面加载性能
  • 现代开发中通常使用构建工具代替

条件引入样式表

媒体查询引入

根据设备特性引入不同的样式表:

html
<head>
    <!-- 所有设备 -->
    <link rel="stylesheet" href="css/base.css">
    
    <!-- 打印样式 -->
    <link rel="stylesheet" href="css/print.css" media="print">
    
    <!-- 屏幕样式 -->
    <link rel="stylesheet" href="css/screen.css" media="screen">
    
    <!-- 移动设备 -->
    <link rel="stylesheet" href="css/mobile.css" media="screen and (max-width: 768px)">
    
    <!-- 桌面设备 -->
    <link rel="stylesheet" href="css/desktop.css" media="screen and (min-width: 1024px)">
</head>

使用 @import 的媒体查询

css
@import url("mobile.css") screen and (max-width: 768px);
@import url("tablet.css") screen and (min-width: 769px) and (max-width: 1024px);
@import url("desktop.css") screen and (min-width: 1025px);

最佳实践

1. 推荐的引入方式

html
<!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 rel="stylesheet" href="css/normalize.css">
    <link rel="stylesheet" href="css/main.css">
    
    <!-- 页面特定样式(如果需要) -->
    <style>
        .page-specific {
            /* 仅此页面使用的样式 */
        }
    </style>
</head>
<body>
    <div class="container">
        <!-- 避免使用内联样式 -->
        <h1>标题</h1>
        
        <!-- 特殊情况下可以使用内联样式 -->
        <div style="display: none;" id="dynamic-content">
            动态内容
        </div>
    </div>
</body>
</html>

2. 性能优化

预加载关键 CSS:

html
<link rel="preload" href="css/critical.css" as="style">
<link rel="stylesheet" href="css/critical.css">

异步加载非关键 CSS:

html
<link rel="preload" href="css/non-critical.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="css/non-critical.css"></noscript>

3. 组织结构

推荐的 CSS 文件组织结构:

css/
├── base/
│   ├── reset.css          # 重置样式
│   ├── typography.css     # 字体排版
│   └── variables.css      # CSS 变量
├── components/
│   ├── buttons.css        # 按钮组件
│   ├── forms.css          # 表单组件
│   └── cards.css          # 卡片组件
├── layout/
│   ├── header.css         # 头部布局
│   ├── footer.css         # 页脚布局
│   └── grid.css           # 网格系统
├── pages/
│   ├── home.css           # 首页样式
│   └── about.css          # 关于页样式
└── main.css               # 主样式文件

4. 避免的做法

过度使用内联样式:

html
<!-- 不推荐 -->
<div style="width: 100px; height: 100px; background: red; border: 1px solid black; padding: 10px;">
    内容
</div>

使用类名:

html
<!-- 推荐 -->
<div class="box">内容</div>
css
.box {
    width: 100px;
    height: 100px;
    background: red;
    border: 1px solid black;
    padding: 10px;
}

实际应用示例

完整的网站结构

index.html:

html
<!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 rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/variables.css">
    <link rel="stylesheet" href="css/main.css">
    <link rel="stylesheet" href="css/responsive.css">
</head>
<body>
    <header class="header">
        <div class="container">
            <h1 class="logo">我的网站</h1>
            <nav class="nav">
                <ul class="nav-list">
                    <li><a href="#" class="nav-link">首页</a></li>
                    <li><a href="#" class="nav-link">产品</a></li>
                    <li><a href="#" class="nav-link">关于</a></li>
                </ul>
            </nav>
        </div>
    </header>
    
    <main class="main">
        <section class="hero">
            <h2>欢迎访问</h2>
            <p>这是一个完整的示例</p>
        </section>
    </main>
    
    <footer class="footer">
        <p>&copy; 2024 版权所有</p>
    </footer>
</body>
</html>

总结

选择合适的 CSS 引入方式对项目的成功至关重要:

  1. 外部样式表:大多数情况下的最佳选择,适合多页面网站
  2. 内部样式表:适合单页面应用或页面特定样式
  3. 内联样式:仅用于快速测试或动态生成的样式

遵循最佳实践,保持代码的可维护性和性能优化,是现代 Web 开发的关键。