`

各浏览器在 HTML 页面与页面中引入的外部 CSS 文件编码不一致时表现不同

 
阅读更多

标准参考

根据 CSS 2.1 规范的描述,应按照以下优先级来确定一个外部 CSS 文件的编码:

  1. HTTP 响应头中 "Content-Type" 字段的 "charset" 参数指定的编码。
  2. BOM 以及/或者 @charset 定义的编码。
  3. <link charset=""> 或其他链接机制提供的元数据(如果有的话)指定的编码。
  4. 引入该 CSS 文件的 HTML 或另一个 CSS 文件(如果有的话)中已确定的编码。
  5. 如果以上几步都没能确定编码,则假定其编码为 UTF-8。

关于上述内容的详细信息,请参考 CSS 2.1 规范 4.4 CSS style sheet representation 中的内容。

问题描述

如果一个外部 CSS 文件的编码与引入该文件的 HTML 文件的编码不一致,并且没有显式的声明该 CSS 文件的编码,在某些情况下会造成 CSS 的解析错误。

造成的影响

该问题将造成页面布局在一些浏览器中与预期的效果不符。

受影响的浏览器

所有浏览器

问题分析

对于一个未显式声明编码的 CSS 文件,浏览器会将其编码认为与引入该文件的文件的编码一致。在一些特定的情况下,将造成 CSS 代码解析异常。举例如下:

HTML 代码(编码为 UTF-8):

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" type="text/css"  href="css.css"/>
</head>
<body>
  <h1>内容文本</h1>
</body>
</html>

以上页面引入的 css.css 的代码(编码为 GB2312):

h1 {
  margin:0;
  width:100px;
  height:100px;
  background:blue;
  font:20px/100px "黑体";
  text-decoration:underline;
  color:red;
}

假设上述两个文件均为在 HTTP 响应头中设定编码,在各浏览器中表现如下:

IE6 其他浏览器
snapshot snapshot

可见,IE6 把 CSS 文件从“黑体”二字到规则结束的样式都没有起作用,其他浏览器中仅“黑体”二字解析错误。

产生这种差异的原因是各浏览器对与这种错误的容错方式不同。

按照规范的规定,在这种情况下,浏览器会认为 CSS 文件的编码与页面一致,即 UTF-8,但 GB2312 编码下的一个中文字符是 2 个字节,在 UTF-8 编码下则为 3 个字节,在把 GB2312 编码下的“黑体”二字当作 UTF-8 编码的文字来解析的时候,得到的是“����”,这并不是预期的值。正是这个值导致了样式定义在各浏览器中都无法按照预期被解析。

解决方案

当 HTML 文件或 CSS 文件要引入一个不同编码的 CSS 文件时,要明确声明被引入的 CSS 文件的编码。

如以上的举例,在 CSS 文件的开头加上一行1

@charset "GB2312";

或者在各文件的 HTTP 响应头中声明该文件实际使用的编码。

注:
1. 虽然 CSS 2.1 规范也允许在 LINK 标签上添加 'charset' 属性来指定编码,但 IE6 IE7 IE8(Q) 不支持。

 

解决方案:

在CSS文件中和link标签中同时指定正确的字符集

分享到:
评论

相关推荐

    html+css仿写电商网站商品购买页面

    在本项目中,“html+css仿写电商网站商品购买页面”是一个典型的前端开发任务,主要目的是利用HTML和CSS技术来创建一个与实际电商网站类似的商品购买界面,同时实现响应式布局,确保页面在不同设备上都能正常显示。...

    HTML+CSS布局、规范、兼容

    规范方面,为确保不同浏览器下的兼容性,建议统一定义常用标签的默认属性,可以通过引入一个基础样式文件(如base.css)来实现。使用DOCTYPE声明可以确保文档按标准模式解析。指定文档的语言和字符集,确保内容正确...

    html页面乱码问题总结

    1. **确保源文件编码正确**:使用统一的编码格式,如UTF-8,并确保编辑器保存文件时使用该编码。 2. **添加字符集声明**:在HTML文档的部分插入`&lt;meta&gt;`标签,明确指定字符集。 3. **检查服务器配置**:确保服务器...

    html和css写的华为商城首页静态网页,.zip

    1. **头部()**:包含元信息,如字符编码(charset)、页面标题()和引用外部资源(如CSS文件)。 2. **主体()**:实际展示给用户的内容,包括导航栏、产品展示、横幅广告、搜索框、商品分类等。 3. **链接()*...

    HTMLCSS笔记.pdf

    在部分,一般会包含页面的标题、引入的外部资源(如CSS样式表、JavaScript文件)等信息。在部分,则包含页面的所有可见内容,比如标题、段落、图片、链接等。 CSS样式可以通过内联、内部和外部三种方式添加到HTML文...

    HTML外部引用CSS文件不生效原因分析及解决办法

    在CSS文件中,你可以通过在文件顶部添加`@charset "UTF-8";`来明确声明编码。而在HTML中,可以通过`&lt;meta charset="UTF-8"&gt;`来设定编码。 此外,浏览器缓存也可能导致CSS更新未被加载。当修改CSS文件后,浏览器可能...

    CSS编码规范.docx

    HTML文件只包含结构,所有样式定义在CSS文件中,通过外部链接引入,遵循“内容与表现分离”的原则,提高代码的可维护性。 6. **文档的结构化书写** 使用语义化的HTML标签和清晰的CSS结构,如`.main-nav`、`.sub-...

    html+css前端编码规范.docx

    11. **JS调用规范**:JavaScript代码应与HTML结构分离,最好使用外部JS文件,并在`&lt;head&gt;`或`&lt;body&gt;`底部引入,以优化页面加载。 12. **HTML+CSS页面布局**:使用合理的布局技术,如流式布局、网格布局或响应式设计...

    登录页面HTML CSS JS代码.doc

    本文将对登录页面HTML CSS JS代码进行详细的知识点解析,从标题、描述、标签和部分内容四个方面入手,深入探讨HTML、CSS和JS技术在登录页面开发中的应用。 HTML技术 1. 文档类型声明:`&lt;!DOCTYPE html&gt;`声明了文档...

    62个404页面出错提示页html格式

    404页面是网站设计中不可或缺的一部分,它用于在用户尝试访问不存在的URL时显示一个友好的错误信息。404页面的目的是告知用户请求的页面无法找到,并提供可能的解决方案或引导他们返回网站的其他部分。在这个压缩包...

    HTML5与CSS3web前端开发技术习题答案.pdf

    1. **浏览器兼容性问题:** 在HTML4及之前的版本中,不同浏览器对标准的支持程度差异较大,导致开发者需要编写不同的代码来适应各种浏览器,这不仅增加了开发难度,也降低了用户体验。HTML5通过标准化的新特性,大大...

    静态引入其他页面详细的很啊

    根据提供的文件信息,我们可以推断出此文档主要讨论的是如何在Web应用中通过配置静态页面的字符编码方式来实现对不同页面的静态引入。这里提到的“静态引入其他页面”通常指的是在一个Web应用中,一个HTML或JSP页面...

    div+css入门教程.doc

    CSS文件中,首先设定全局字体大小、外边距、文本对齐方式等基本信息,接着分别针对页面的各部分(如头部、主体、底部)设置宽度、高度、背景色等属性。这些样式规则使页面呈现出初步的框架和视觉效果。 #### 四、...

    html&css入门资料

    通过`&lt;link&gt;`标签可以引入外部CSS文件,实现样式控制。此外,HTML文档还遵循一定的语法规则,如正确嵌套标签,以保证浏览器正确解析和渲染。 总之,HTML和CSS是网页开发的核心技术,它们共同决定了网页的结构、内容...

    情人节程序员用HTML网页表白【婚礼庆典-邀请函】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript

    - `link`标签用于引入外部样式表文件。本项目中包含了多个CSS文件,包括但不限于: - `normalize.css`: 用于重置浏览器默认样式的文件。 - `ionicons.min.css`: 引入了Icon字体库。 - `foundation.min.css` 和 `...

    AJAX CSS JS JSP 编码规范

    1. 所有的 CSS 代码尽量采用外部调用,使用标签将 CSS 文件引入 HTML 文档中。 2. 在编写 CSS 代码时,重定义的最先,伪类其次,自定义最后。例如,a:link、a:visited、a:hover、a:actived 顺序编写。 3. 使用点数 ...

    html css div教程

    - **导入样式**:使用`@import`规则在CSS文件中引入其他样式表,虽然功能强大,但可能导致额外的HTTP请求,影响页面加载速度。 ##### 5. CSS优先级规则 CSS优先级决定了当多个样式规则同时应用于同一元素时,哪个...

    css规范文档

    - 引入文件时,去除默认类型声明,如`&lt;link rel="stylesheet" href="..."&gt;`。 - JS库文件名包含库名、版本号和.min(压缩版)标识,插件文件名包含库名和插件名。 - 遵循XHTML标准,标签、属性和属性命名全小写,...

    Css规范编码规范 - layout团队使用

    【CSS编码规范】是Web开发中的重要组成部分,它旨在提高代码的可读性、可维护性和团队协作效率。布局团队在进行CSS编写时遵循一定的规则和标准,以确保项目的稳定性和一致性。以下是对这些规范的详细说明: 1. **...

Global site tag (gtag.js) - Google Analytics