二. CSS
2.1. 认识CSS
CSS表示层叠样式表(Cascading Style Sheet,简称:CSS,又称为又称串样式列表、级联样式表、串接样式表、阶层式样式表) 是为网页添加样式的代码。
CSS是一种语言吗?(知道即可)
- MDN解释:CSS 也不是真正的编程语言,甚至不是标记语言。它是一门样式表语言;
- 维基百科解释:是一种计算机语言,但是不算是一种编程语言;
历史
早期的网页都是通过HTML来编写的,但是我们希望HTML页面可以更加丰富:
这个时候就增加了很多具备特殊样式的元素:比如i、strong、del等等;
后来也有不同的浏览器实现各自的样式语言,但是没有统一的规划;
1994年,哈肯·维姆·莱和伯特·波斯合作设计CSS,在1996年的时候发布了CSS1;
直到1997年初,W3C组织才专门成立了CSS的工作组,1998年5月发布了CSS2;
在2006~2009非常流行 “DIV+CSS”布局的方式来替代所有的html标签;
从CSS3开始,所有的CSS分成了不同的模块(modules),每一个“modules”都有于CSS2中额外增加的功能,以及向后兼容。
直到2011年6月7日,CSS 3 Color Module终于发布为W3C Recommendation。
总结:CSS的出现是为了美化HTML的,并且让结构(HTML)与样式(CSS)分离;
- 美化方式一:为HTML添加各种各样的样式,比如颜色、字体、大小、下划线等等;
- 美化方式二:对HTML进行布局,按照某种结构显示(CSS进行布局 – 浮动、flex、grid);
2.2. CSS规则
CSS这么重要,那么它的语法规则是怎么样的呢?
属性名(Property name):要添加的css规则的名称;
属性值(Property value):要添加的css规则的值;
2.3. 三种编写规则
CSS提供了3种方法,可以将CSS样式应用到元素上:
- 内联样式(inline style) :内联样式表存在于HTML元素的style属性之中。 CSS样式之间用分号;隔开,建议每条CSS样式后面都加上分号;
很多资料不推荐这种写法:
-
在原生的HTML编写过程中确实这种写法是不推荐的
-
在Vue的template中某些动态的样式是会使用内联样式的;
- 内部样式表(internal style sheet)、文档样式表(document style sheet)、内嵌样式表(embed style sheet) 将CSS放在HTML文件head元素里的style元素之中。
在Vue的开发过程中,每个组件也会有一个style元素,和内部样式表非常的相似(原理并不相同);
- 外部样式表(external style sheet) 外部样式表(external style sheet) 是将css编写一个独立的文件中,并且通过link元素引入进来;
使用外部样式表主要分成两个步骤:
- 第一步:将css样式在一个独立的css文件中编写(后缀名为.css);
- 第二步:通过link元素引入进来;
@import:
可以在style元素或者CSS文件中使用@import导入其他的CSS文件
2.5. 常见的CSS的官方文档:
CSS官方文档地址: www.w3.org/TR/?tag=css
CSS推荐文档地址: developer.mozilla.org/zh-CN/docs/…
由于浏览器版本、CSS版本等问题,查询某些CSS是否可用:
三. 知识点补充
3.1. link元素
link元素是外部资源链接元素,规范了文档与外部资源的关系
link元素通常是在head元素中
最常用的链接是样式表(CSS):
此外也可以被用来创建站点图标(比如 “favicon” 图标);
◼ link元素常见的属性:
href:此属性指定被链接资源的URL。 URL 可以是绝对的,也可以是相对的。
rel:指定链接类型,常见的链接类型:developer.mozilla.org/zh-CN/docs/…
icon:站点图标;
stylesheet:CSS样式;
3.2. 颜色表示方法
1.颜色关键字:, 例如, red, yellow 等
2.RGB有三种表示方式:
所有颜色都是由三原色R(red)G(green)B(blue)组成,也就是通过调整这三个颜色不同的比例组合成其他的颜色,RGB各个原色的取值是0~255。
-
RGB颜色可以通过以#为前缀的十六进制字符和函数(rgb()、rgba())标记表示。
-
方式一:十六进制符号:#RRGGBB[AA]
-
-
R(红)、G(绿)、B (蓝)和A (alpha)是十六进制字符(0–9、A–F);A是可选的。
-
- 比如,#ff0000等价于#ff0000ff;
-
-
方式二:十六进制符号:#RGB[A]
-
-
R(红)、G(绿)、B (蓝)和A (alpha)是十六进制字符(0–9、A–F);
-
三位数符号(#RGB)是六位数形式(#RRGGBB)的减缩版。
-
- 比如,#f09和#ff0099表示同一颜色。
-
四位数符号(#RGBA)是八位数形式(#RRGGBBAA)的减缩版。
-
- 比如,#0f38和#00ff3388表示相同颜色。
-
-
方式三:函数符: rgb[a](R, G, B[, A])
-
- R(红)、G(绿)、B (蓝)可以是(数字),或者(百分比),255相当于100%。
- A(alpha)可以是0到1之间的数字,或者百分比,数字1相当于100%(完全不透明)。
developer.mozilla.org/zh-CN/docs/…
3.4. 浏览器的渲染流程:
根据HTML代码生成DOM Tree
根据CSS代码生成CSSOM
合并DOM Tree 和CSSOM整合生成Render tree
计算布局
绘制
为什么CSS要放在头部:
CSSOM 可以和DOM Tree可以同时构建
是为了在DOM Tree加载完之前,就加载完CSSOM,这样DOM tree一加载完就可以和CSSOM整合生成Render Tree,一次性渲染完成,避免重复渲染。
为什么JS要放在后面:
但是在执行中,html解析的时候遇到js标签,会停止解析html,而去加载和执行js代码,因为js代码可以操作我们的Dom,所以浏览器希望html解析的Dom和js操作的DOM放在一起形成最后的DOM,而不是去频繁的去生成DOM树。
JS会阻塞暂停页面的渲染,放在前面会导致页面渲染时间变得很长。
defer,asnyc可以异步
-
defer,同样是立即下载,延迟执行,
-
Async,不让页面等待下载,异步执行其他,不能控制执行循序的 segmentfault.com/a/119000001…