• 【精通CSS】基本知识


    DTD & DOCTYPE

    DTD (文档类型定义)是一组机器可读的规则,它们定义 XML 或 HTML 的特定版本中允许有什么,不允许有什么。在解析网页时,浏览器使用这些规则来检查页面的有效性,并且采取相应的措施。浏览器是通过分析页面的 DOCTYPE 声明来了解要使用哪个 DTD, 由此知道要使用 HTML 的哪个版本。

    DOCTYPE 声明是 HTML 文档开头处的一行或两行代码,它描述使用那个 DTD。

    <!-- CSDN 的 DOCTYPE 声明-->
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    
    <!-- 更常见的 DOCTYPE 声明-->
    <!DOCTYPE html>
    

    上面第一个指出 要使用的DTD是 XHTML 1.0 Transitional 的 DTD。DOCTYPE 当前有两种风格:strict(严格)、transitional(过渡)。过渡DOCTYPE是为了帮助开发人员从老版本迁移到新版本,因此 HTML4.01 和 XHTML 1.0 仍然允许使用已经废弃的元素。

    第二个表示 HTML5,它不需要包含指定的 DTD 文件的 URL。

    DOCTYPE切换

    常见的几种情况:

    1. 对于 HTML 4.01 文档,包含 严格或过渡的 DTD 的 DOCTYPE 常常都会导致页面以标准模式呈现。而有过渡 DTD 而没有 URI 会导致页面以混杂模式呈现。
    2. 对于 XHTML 文档包含形式完整的 DOCTYPE 一般以标准模式呈现。
    3. DOCTYPE 不存在或形式不正确也会导致 HTML 和 XHTML 文档以混杂模式呈现。

    https://hsivonen.fi/doctype/#handling 页面中有一个图表说明了不同浏览器如何根据不容的 DOCTYPE 声明选择呈现的方式。

    IE6 下有个bug:如果 DOCTYPE 声明不是页面上的第一个元素,IE6 会自动切换到混杂模式。

    有效性验证

    可以使用 W3C 验证器(一个验证器bookmarklet)或 Firefox Web Developer Extension 等插件检查 HTML 是否是有效的。可以访问 http://validator.w3.org 并输入 URL 进行验证。

    对页面进行有效性验证要求有 DOCTYPE 声明。

    浏览器模式

    有两种页面的呈现模式:

    • 标准模式 Standard Mode
    • 混杂模式 Quirks Mode

    出现两种模式的原因:当浏览器厂商在开发与标准兼容的浏览器时,也希望能向后兼容,所以就出现了这两种模式。

    1. 在标准模式中,浏览器根据规范呈现页面。
    2. 在混杂模式中,会以一种比较宽松的向后兼容的方式呈现页面,兼容老式浏览器。比如在标准模式中使用正确的盒模型,在混杂模式中使用 IE5 及更低版本中的老式盒模型。

    Mozilla和Safari中海油第三种模式: almost standard mode(几乎标准模式),在 Firefox 中,可以使用 Web Developer Extension 查看页面的呈现模式。

    引用外部样式表

    在 HTML 文档中引入外部样式表有两种方法,可以使用链接,也可以导入:

    <link href="/css/basic.css" rel="stylesheet" type="text/css" />
    
    <style type="text/css">
    	<!--
    	@import url("/css/advanced.css");
    	-->
    </style>
    

    也可以在另一个样式表中导入其他样式表,比如我们可以在 HTML 文档中链接基本的样式表,然后将复杂的样式表导入到这个样式表:

    @import url("/css/layout);
    @import url("/css/color");
    

    把 CSS 分割为多个样式表是一种常见的做法,但是,浏览器的基准测试表明,导入样式表比链接样式表慢。

    在使用多个 CSS 文件时,有 2 个与速度有关的问题:

    • 多个文件会导致从服务器发送更多的数据包,这些数据包的数量(而不是内容)会影响下载时间。
    • 浏览器只能从一个同时下载数量有限的文件。老式浏览器限制为 2 个,现代浏览器限制为 8 个。

    所以,使用结构单一的 CSS 文件可以显著提高下载速度。

    层叠

    即使是在不太复杂的样式表中,要寻找同一个元素可能有两种或更多的规则,CSS 通过层叠(cascade)的过程处理这种冲突。

    层叠为每个规则分配一个重要度,以下是重要度次序:

    • 标有 !important 的用户样式
    • 标有!important 的作者样式
    • 作者样式(站点作者编写的样式,被认为是最重要的样式表)
    • 用户样式(用户可以通过浏览器应用自己的样式表)
    • 浏览器/用户代理应用的样式

    然后更具选择器的特殊性决定规则的次序。如果两个规则的特殊性相同,那么后定义的规则优先。

    为了计算规则的特殊性,会给每种规则分配一个数字值,然后,将规则的每个选择器的值加在一起,计算出该规则的特殊性。
    选择器的特殊性分成 4 个等级: a 、b、c、d。

    • a: 行内样式
    • b: id 选择器的数量
    • c: 类、伪类、属性选择器的数量
    • d: 类型选择器(元素选择器)和伪元素选择器的数量

    示例:

    | 选择器 | 特殊性 | 以10为基数的特殊性 | | ------- | :-------: | :----------: | | style="" | 1,0,0,0 | 1000 | | #wrapper #content {} | 0,1,0,0 | 200 | | #content .data-post {} | 0,1,1,0 | 1100 | | div#content {} | 0,1,0,1 | 101 | | #content {} | 0,1,0,0 | 100 | | p.content .data-post | 0,0,2,1 | 21 | | p.content {} | 0,0,1,1 | 11 | | div p {} | 0,0,0,2 | 2 |

    继承

    应用样式的元素的后代会继承样式的某些属性。如果将主体的字号设置为 1.4em,那么页面上多有的内容都应该继承这个字号(说“应该会”是因为 IE 和 NetScape 在继承表格的字号方面有bug)

    body {
    	color:  #333;
    }
    

    继承而来的样式的特殊性为 空

    设计代码结构

    为了便于维护,最好把样式表划分为几大类。通常,可以把最一般的规则放在最前面;然后处理更特殊的样式和辅助样式等等,如下:

    • 一般样式表
      • 主体样式
      • reset 样式
      • 链接
      • 标题
      • 其他元素
    • 辅助样式
      • 表单
      • 通知和错误
      • 一致的条目
    • 页面结构
      • 标题、页脚、导航
      • 布局
      • 其他页面结构元素
    • 页面组件
      • 各个页面
    • 覆盖

    注释风格

    /* @group general styles
    ------------------------------------------------------------------------------------------------*/
    
    /* @group helper styles
    ------------------------------------------------------------------------------------------------*/
    
    /* @group page structure
    ------------------------------------------------------------------------------------------------*/
    
    /* @group page components
    ------------------------------------------------------------------------------------------------*/
    
    /* @group overrides
    ------------------------------------------------------------------------------------------------*/
    

    同时,对于复杂的大型项目,在 CSS 文件中添加临时的注释常常对开发是有帮助的。

  • 相关阅读:
    DTOJ #3702. 月读(tsukuyomi)
    DTOJ #2311. 兔子与樱花 ( sakura )
    DTOJ #2416. 点燃的火焰(flame)
    dtoi4537 「TJOI / HEOI2016」树
    中科燕园gis外包------北京市人口普查地理信息系统
    中科燕园gis外包【动态标绘演示系统】v2.0 Flex版
    中科燕园GIS外包-----基于ArcGIS的应急平台
    arcgis server
    《深入理解ES6》之箭头函数
    【转】浏览器的工作原理:新式网络浏览器幕后揭秘
  • 原文地址:https://www.cnblogs.com/shih/p/6826782.html
Copyright © 2020-2023  润新知