CSS 与 HTML 关联方式

720 阅读2分钟

CSS 与 HTML 关联方式共有三种:内联式、嵌入式、外联式,其中还包括了一种特殊的 @import 指令

内联式

将样式代码通过 style 属性写在 HTML 标签中。多条 CSS 样式之间使用;隔开。不推荐使用。

<p style="color:red;font-size:12px"></p>

嵌入式(内部样式表)

将样式代码写在<style></style>标签中。通常情况下<style></style>标签写在<head></head>中,其涉及了页面渲染性能问题。少量非重复性样式内容可采用该方式书写。

<head> 
  <style>          
    span {         
      color: red;
      font-size:12px;      
    }    
  </style> 
</head>

外联式(外部样式表)

将样式代码写在单独的 CSS 文件中,通过 <link> 标签引用。通常情况下<link>标签也是写在<head></head>中。推荐使用。

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

工程模块化

在 JS 文件中通过 import 引用

import './taskCreate.css';

@import

@import 指令可用于内部样式表和外部样式表,且必须放在其他 CSS 规则之前(可放在 @charset 规则之后),否则不起作用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        @charset "utf-8";
        @import './demo.css';
        .test {
            color: red;
        }
        /* 放在此处无效 */
        /* @import './demo.css'; */
    </style>
</head>
<body>
    <div class="test">
        测试 @import 
    </div>
</body>
</html>

总结

内联式、嵌入式、外联式都是在页面加载时,同时加载的。HTML 页面从头开始解析,当遇到 CSS 样式时就会开始加载并解析样式,此过程不会阻塞 HTML 的解析。

当一个页面中通过 <link> 引入多个外部样式表时,浏览器会并行下载多个 CSS 文件,以提高性能。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="./demo.css">
    <link rel="stylesheet" href="./demo1.css">
</head>
<body>
</body>
</html>

@import 指令引入的样式,是在开始解析 CSS 后,遇到 @import 指令时,才开始加载的,也就是串行加载,会导致页面渲染时间变长。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="./demo.css">
</head>
<body>
</body>
</html>

demo.css 内容:

@import './demo1.css';
.test {
    background: green;
}

demo1.css 内容:

.test {
    background: red;
}

除此之外,<link>@import 指令的其他区别:

  • <link> 是 HTML 标签,@import 是 CSS 指令;
  • <link> 可以通过 DOM 操作,如动态加载样式;
  • @import 是 CSS2.1 提供的语法,不兼容 IE5 及以下浏览器;
  • 样式的优先级问题:权重相同的情况下,@import引入的样式优先级低于书写在@import指令后的样式(CSS 层叠特性)。我个人理解产生这种问题的原因是,@import相当于一个占位符,通过它引入的样式最终会填充到@import书写的位置,而与@import引入样式的加载时间无关。由于浏览器的流式渲染,使用 @import 可能会触发重排、重绘等问题。

请避免使用 @import