1996年 CSS1
1998年 CSS2
2001年 CSS3(分为不同的模块,陆续推出)
2007年 CSS2.1
......
一、CSS历史
HTML被设计的初衷是用于表示文档的内容和结构
通过使用<h1>
、<p>
、<table>
这样的标签,来表明“这是一级标题”、“这是段落”、“这是表格”——同时文档布局和外观完全由用户代理(通常是浏览器)来决定,那个时候HTML并不关心外观,它只是一种简洁的小型标记机制
但是,对于网页样式多样性的需求不断增加,导致当时两种主要的浏览器(Netscape 和 IE)不断地将新的HTML标签和HTML特性(比如<font>
、<big>
等)添加到HTML规范中,他们大多仅仅是负责表现页面样式
突然之间,原本用于描述结构的语言开始描述外在表现了,虽然网页内容看上不是那么单调了,但是从此开始,创建文档结构清晰、独立于表现层、且具有良好语义的网页变得越来越困难
这还导致了以下一些问题
- 页面没有语义,可用性降低(对于盲人、对于语音浏览器)
- 对于搜索引擎优化不利(搜索引擎就是最活跃的盲人用户)
- 页面可读性差,不易于维护
为了解决这个问题,万维网联盟(W3C,非营利Web标准化联盟),肩负起了HTML标准化的使命,并在HTML 4.0 之外创造出了CSS
严格来讲,HTML和CSS并不算是编程语言,而是用来标记内容和为内容提供样式的一种机制
CSS定义了如何显示HTML元素——通过仅仅编辑一个简单的 CSS 文档(样式表),就能够同时改变站点中几乎所有页面的布局和外观,大大简化了工作,并且易于修改和维护
CSS的出现解决了内容与表现分离的问题,即
- HTML用来定义一个文档的结构(内容)
- CSS用来定义一个文档的外观(表现)
- JS用来定义一个文档的行为(交互)
二、CSS定义
CSS即层叠样式表(Cascading Style Sheet),定义了如何显示HTML元素
CSS不需要编译,直接由浏览器解释执行
CSS文件的后缀名为.css
三、CSS使用
使用CSS有以下4种方式
1、内联样式(行内样式)——不推荐
通过html元素的style特性来添加样式,使用分号分隔多个声明
段落内容
2、嵌入样式(页面样式)——不推荐
通过位于head标签内的style标签来添加样式(可选的media特性,指定媒体类型)
3、外部样式(链接样式)——真正实现内容与表现分离
通过位于head标签内的link标签(自闭合)来添加外部CSS文件
外部样式表中只能出现CSS规则和CSS注释
当指定了媒体类型(media)之后,只有符合条件的媒体类型才会加载此样式表(具体内容在媒体查询一节详述)
4、@import规则——不推荐
该规则位于style元素内部或者外部样式表中,并且必须出现在其他所有CSS规则之前
@import url(../test.css);@import "../test.css";@import url(../test.css) screen;
小结:方式3和4的区别
首先,外部样式使用的是html的link标签(是html级别的),link标签除了引入样式表之外,还有其他作用,而@import规则使用的是CSS规则(是CSS级别的),必须包含在style元素或者CSS文件内,且要位于任何规则之前
link标签可以引入候选样式表,而@import规则不可以
其次,link引入的样式会同html页面同时加载,而@import规则引入的CSS会等到页面全部下载完成后才加载,所以会使页面闪烁(出现无样式的页面,后恢复)
当浏览器遇到style或link元素时,会停止对html的解析,转而下载/解析CSS代码(阻塞式),解析完毕后,转而继续解析html文档,所以要把样式表放在前面,先渲染CSS,保证样式提前加载,避免出现页面“闪烁”
最后,@import规则会在外部样式表中再次引入其它样式表,会对服务器产生过多http请求,加重服务器负担(这也是不建议使用的根本原因)
使用打包构建工具的前提下,@import规则是可以无忧使用的
四、CSS编码
必须采用UTF-8的编码格式来书写和保存CSS文件
如果不能保证文件格式是UTF-8,那么就必须在CSS文件的最顶部书写如下规则(不是最顶部的话,会失效)
@charset "utf-8"; /*强制文件使用UTF-8编码,分号是必须的*//*即使能够保证文件格式是UTF-8,也总应该写上这条规则,因为如果不写的话,浏览器查看源代码时,中文注释就是乱码了*/
五、CSS语法
一个CSS文件,由很多CSS规则和CSS注释构成
1、CSS规则
一条CSS规则,由选择器和声明块构成
一个声明块可以包含多条声明,每条声明以分号分隔
一条CSS声明,由很多属性和值构成,属性和值以冒号分隔
div {width:120px;height:120px;}
每条声明必须以分号结束,以告知浏览器正确解析不同的声明
最后一条声明的分号可选,但应该总是加上,方便以后扩展
浏览器会忽略样式表中多余的空白符,因此可以保持适当的缩进,增加代码可读性
2、CSS注释
除了CSS规则外,CSS文件里就只能写CSS注释了
CSS注释只有一种格式,那就是
/*注释内容,不可嵌套,没有//这种单行注释!*/
六、大小写
涉及到CSS的大部分内容都是不区分大小写的,例如大部分选择器,所有属性和属性值
div {margin:10px;} /*都一样*/DIV {MARGIN:10PX;}Div {Margin:10Px;}
但是,涉及到类选择器、ID选择器、特性选择器等时,是区分大小写的,要严格跟HTML中的特性匹配
div[class="abc"] {} /*不一样*/div[class="Abc"] {}.abc {} /*不一样*/.Abc {}