深入CSS | 青训营笔记

66 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第1天

深入CSS

1.选择器的特异度

选择器特异度的计算

(1)如果一个声明出现在元素的style属性中,则将a计为1; (2)b等于选择器中所有ID选择器加起来的数量和 (3)c等于选择器中所有class选择器和属性选择器,以及伪类选择器加起来的数量和 (4)d等于选择器中所有标签选择器和伪元素选择器加起来的数量和 a-b-c-d即是选择器的特异度,比较顺序从a先比起,谁先大则优先级就越高。

注意: 继承的优先级最低,没有特异度 结合符(如+,>)及通用选择符(*)特异度为0

eg: .box{} /特异度=0,0,1,0/ .box div{} /特异度=0,0,1,1/ #nav li{} /特异度=0,1,0,1/ p:first-line{} /特异度=0,0,0,2/ style="" /特异度=1,0,0,0/

2.继承--某些属性会自动继承其父元素的计算值,除非显示指定一个值

1.css可以和不可以继承的属性

不可继承的:

display、margin、border、padding、background、height、min-height、max-height、width、min-width、max-width、overflow、position、left、right、top、bottom、z-index、float、clear、box-sizing、table-layout、vertical-align、page-break-after、page-bread-before和unicode-bidi。

所有元素可继承:

visibility和cursor。

内联元素可继承:

letter-spacing、word-spacing、white-space、line-height、color、font、font-family、font-size、font-style、font-variant、font-weight、text-decoration、text-transform、direction。

终端块状元素可继承:

text-indent和text-align。

列表元素可继承:

list-style、list-style-type、list-style-position、list-style-image。

表格元素可继承:

border-collapse。

2.值的继承

继承也是基于文档树的,文档树中元素的某些属性可以被其子元素继承,每一个CSS属性都定义了它能否被继承。要设定文档的某些缺省样式属性,可以在文档树的根上设定该属性,如果这个属性可以继承,则其后代元素将继承这个属性,例如color、font-size等属性。

3.“inherit(继承)”值

每一个属性可以指定值为“inherit”,即:对于给定的元素,该属性和它父元素相对属性的计算值取一样的值。继承值通常只用作后备值,它可以通过显式地指定“inherit”而得到加强,例如:

p { font-size: inherit; } 1

4.继承的局限性

继承虽然减少了重复定义的麻烦,但是,有些属性是不能继承的,例如border(边框)、margin(边距)、padding(补白)和背景等。 这样设定是有道理的,例如,为一个

设定了边框,如果此属性也继承的话,那么在这个
内所有的元素都会有边框,这无疑会产生一个让人眼花缭乱的结果。同样的,影响元素位置的属性,例如margin(边距)和padding(补白),也不会被继承。

同时,浏览器的缺省样式也在影响着继承的结果。例如:

body { font-size: 12px; } 1 ​

2级标题的文字不是12px。

H2中文字将是标题2样式的文字而非12px大小的文字。

这是因为浏览器的缺省样式设定了

的CSS规则。

同时,有些老版本的浏览器可能对继承支持的不太好,例如某些浏览器当遇到

的时候,就会丢失所有的继承的属性

5.能否取消

css属性一旦继承了不能被取消,只能重新定义样式。

3.CSS求值过程

image.png

image.png

image.png

4.CSS布局--确定内容的大小和位置的算法

1.布局的相关技术

1.常规流

image.png

image.png

image.png

image.png

image.png

flex-shrink(如果空间不足,将该元素进行压缩)

image.png

image.png

image.png

image.png

2.浮动--float

实现图文--文字环绕效果

image.png

3.绝对定位--position

image.png

relative

在常规流里面布局;
相对于自己本应该在的位置进行偏移;
使用top、left、bottom、right设置偏移长度流内其它元素当它没有偏移一样布局(没有影响).

absolution

脱离常规流;
相对于最近的非static祖先定位;
不会对流内元素布局造成影响;

flexed

固定定位,相对于浏览器的视图边框,也就是html/body,我们经常用的悬浮窗口,左右对联式窗口,需要利用position:fixed;实现页面的固定,无论浏览器怎么滚动,窗口就在这个位置!!!

z-index--在同一个上下文比较,先比较层叠上下文