-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy path048css中的display和position
More file actions
111 lines (57 loc) · 5.11 KB
/
Copy path048css中的display和position
File metadata and controls
111 lines (57 loc) · 5.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
一. display的取值
none
block
inline
inline-block
块级元素:<div>、<p>、<form>、<ul>、<ol>、<li>
行内元素:<span>、<strong>、<em>
块级元素和行内元素的区别:
块级元素会单独占一行;行内元素不会单独占一行
块级元素可以设置width、height属性;行内元素不能设置width、height属性
块级元素可以设置margin、padding属性;行内元素水平方向的margin、padding有效果,垂直方向没有
display:none和 visibility:hidden的区别
display:none 元素在视图中不占据空间
visibility:hidden 元素在视图中保留占位
注意:display:none的元素也会被加载
二. position的取值
inherit:继承其父元素的定位
static:默认值,没有定位
absolute:绝对定位
relative:相对定位
fixed
sticky
absolute:若其父元素有absolute/relative/fixed定位,那么相对于父元素进行定位;若没有,则相对于body进行定位
relative:相对于本身的位置进行定位
fixed:相对于浏览器窗口进行定位
脱离文档流:absolute、fixed、float
设置absolute和float都会让元素的display变成inline-block
z-index属性:
若元素position:static,那么文档流后面的元素会覆盖掉前面的
若元素设置了定位,那么z-index越大,元素会在越上方
默认情况下,所有元素都是在z-index:0这一层的,这就是文档流。
更详细解释
display:inline-block和hasLayout
display的值除了block和inline,还有其他的值,比如list-item、table-cell等,但因为IE6和IE7浏览器支持的display类型很少,所以为了兼容IE,
我们真正能用的display类型只有block、inline和none三种。
对于另一中非常有用的display类型inline-block,其实IE和IE7下也是有办法实现的,但需要注意的是,并不是说IE6和IE7支持display:inline-block,
它的实现其实是一种hack——触发行内元素的hasLayout。在前面《CSS常见问题二:hasLayout》我们讲过,hasLayout是IE浏览器为解释盒模型而设计的
一个转有属性,它的设计初衷是用于块级元素的,如果触发行内元素的hasLayout,就会让行内元素拥有块级元素的特征。
先说说display:inline-block的特性吧,顾名思义,它是行内的块级元素,它拥有块级元素的特点,可以设置长宽,可以设置margin和padding值,
但它却不是独占一行,它的宽度并不占满父元素,而是和行内元素一样,可以和其他行内元素排在同一行里。它集块级元素和行内元素的特点于一身,
是个非常有用的display类型。
relative、absolute和float
position:relative和position:absolute都可以改变元素在文档流中的位置,设置position:relative或position:absolute都可以让元素激
活left、right、top、bottom和z-index属性(默认情况下,这些熟悉未激活,设置了也无效)。网页虽然看起来是平面的二维结构,但它其实是有Z轴的,Z轴的大
小由z-index控制,默认情况下,所有元素都是在z-index:0这一层。元素根据自己的display类型、长宽、内外边距等属性顺序排列在z-index:0这一层里,
这就是文档流。设置position:relative或position:absolute会让元素“浮”起来,也就是z-index的值大于0,它会改变正常情况下的文档流。
不同的是position:relative会保留自己在z-index:0层的占位,left、top、right、bottom值是相对于自己在z-index:0层的位置,虽然它的实际位置可能因
为设置了left、top、right、bottom值而偏离原来的位置,但对于其他仍然在z-index:0层的元素位置不会造成影响。而position:absolute会完全脱离文档流,
不再在z-index:0层保留占位符,其left、top、right、bottom值是相对于自己最近的一个设置了position:relative和position:absolute的祖先元素的,
如果祖先元素全都没有这是position:relative和position:absolute,那么就相对于body元素。
除了position:relative和position:absolute,float也能改变文档流,不同的是,float属性不会让元素“上浮”到另一个z-index层,它任然让元
素在z-index:0层排列,float不像position:relative和position:absolute那样,它不能通过left、top、right、bottom属性精确地控制元素的坐标,
它只能通过float:left或float:right来控制元素在同层里“左浮”“右浮”。float会改变正常的文档流排列,影响到周围元素。
另一个有趣的现象是position:absolute和float会隐式的改变display类型,不论之前什么类型的元素(display:none除外),
只要设置了position:absolute、float:left或float:right中任意一个,都会让元素以display:inline-block的方式显示:可以设置长宽,默认宽度并不
占满父元素。就算我们显示的设置display:inline或者display:block,也任然是无效的(float在IE6下的双边距BUG就是
利用添加display:inline来解决的)。值得注意的是,position:relative却不会隐式的改变display的类型。