说道定位机制,你们是否是以为只有float,absolute之类的才叫定位?
html
非也!dom
在CSS中,定位机制一共有四种:normal flow(普通流),float(浮动), absolute positioning(绝对定位)和flex box。而普通流的定位又分为三种:block formatting(块级格式化), inline formatting(行内格式化)及 relative positioning(相对定位)。flex
咱们先来了解一下“流”的概念。说道流,你是否是想到了它spa
其实咱们这个流和水流只是有必定的形似,都是一种流动。3d
一般,若是一个元素属于浮动元素(float属性值不为none)或是进行了绝对定位(position属性值为absolute或fixed)或是root元素,咱们会称这个元素out-of-flow,即脱离了流;相反,称这个元素in-flow,即在流内。那么,流具体指代什么呢。CSS2.2 Specification给出的定义以下:调试
The flow of an element A is the set consisting of A and all in-flow elements whose nearest out-of-flow ancestor is A
对此,我理解为:一个流就是一些元素的集合。只有out-of-flow元素(暂且称为A)才拥有本身的流,A元素的流包括它本身以及任何知足必定条件的in-flow元素,该条件要求这个in-flow元素最近的out-of-flow祖先为A。那么A元素内那些out-of-flow的子元素怎么办呢?它们会有本身的流,且在定位时A的流会当它们不存在,也就是说,这些out-of-flow元素的流之间是互不干扰的。rest
在CSS中,display属性、position属性和float属性决定了某dom元素可否生成一个box以及box的位置,而这些也就决定了dom元素的定位方式。orm
那么这些属性值是如何决定box的命运的呢,请看下方等级列表。数字越小,优先级越高。cdn
1. display:nonehtm
命运:dom元素不产生box, position 和 float 均无效,无生命,无定位
2. position: absolute / fixed
命运:dom元素产生box, float 的computed value为none, display的computed value请参照下方表格,属于绝对定位
3. float: right / left
命运: dom元素产生box, display的computed value请参照下方表格,属于浮动
4. 元素为 root 元素
命运:display的computed value请参照下方表格,属于普通流中的block formatting
5. 其余
命运:display的computed value即为specified value,依据display的值属于普通流中的block formatting 或 inline formatting
对照上面的等级列表,咱们来分析如下dom元素属于哪一种定位方式
------------ 普通流的block formatting
------------ 绝对定位
------------ 绝对定位,containing block为initial containing block(看第10条)
------------ 浮动
------------ 无生命,无定位
------------ 浮动,普通流的relative positioning
在具体调试CSS过程当中,你们能够对照以上等级表来肯定某个dom元素的box的定位方式,我就再也不一一举例了,由于————太多了。。。
好了,今天就是介绍了下定位方式的种类以及它们之间的优先级。若是你们想要知道某种定位的具体流程,那就点击文章第三段中出现的连接进去看吧!周末愉快啦!