美文网首页
浮动 定位 BFC 包含块

浮动 定位 BFC 包含块

作者: fb941c99409d | 来源:发表于2018-12-23 13:47 被阅读0次

    文档流

    文档流处在网页的最底层,它表示的是一个页面中的位置, 我们所创建的元素默认都处在文档流中

    元素在文档流中的特点:

    块元素

           1.块元素在文档流中会独占一行,块元素会自上向下排列

           2.块元素在文档流中默认宽度是父元素的100%

           3.块元素在文档流中的高度默认被内容撑开

    内联元素

           1.内联元素在文档流中只占自身的大小默认从左向右排列, 如果一行中不足以容纳所有的内联元素,则换到下一行, 继续自左向右。

           2.在文档流中,内联元素的宽度和高度默认都被内容撑开


    浮动

    浮动时才考虑的层级问题: 1个元素 分两层 文字层和 标签层  浮动后提升半级, 提升标签层, 所以后面的元素会上来标签层, 文字层却不会上来这就是文字环绕的原理

    1. 块元素在文档流中默认垂直排列,如果希望块元素在页面中水平排列,使用float来使元素浮动,从而脱离文档流,它下边的元素会立即向上移动

    2. 元素浮动以后,会尽量向页面的左上或这是右上漂浮,直到遇到父元素的边框或者其他的浮动元素

    3. 如果浮动元素上边是一个没有浮动的块元素,则浮动元素不会超过块元素

    4. 浮动的元素不会超过他上边的兄弟元素,最多最多一边齐

    5. 浮动的元素不会盖住文字,文字会自动环绕在浮动元素的周围,所以我们可以通过浮动来设置文字环绕图片的效果

    6. 块元素脱离文档流以后,高度和宽度都被内容撑开

    7. 元素 开启浮动 脱离文档流以后会变成块元素

    清除浮动

    .clearfix{*zoom:1;(开启ie6 7 hasLayout 清除浮动)}

    .clearfix:before,.clearfix:after{content: ".";height:0;visibility:hidden;display: block;clear: both;}

    BFC

    开辟BFC容器的方法

    1.根元素

    2. 浮动元素:float 除 none 以外的值

    3. 绝对定位元素:position (absolute、fixed)

    4. display 为 inline-block、table-cells、flex

    5. overflow 除了 visible 以外的值 (hidden、auto、scroll)

    6.IE6以下没有BFC概念 但是有类似hasLayout, 开启方法 *zoom:1  (zoom是放大的意思 1代表不放大,但却触发了hasLayout机制)

    BFC的约束规则

    1. 内部的block box会在垂直方向上一个接一个的放置

    2. 垂直方向的距离由margin决定,属于同一个BFC的两个相邻或嵌套(只要他们之间没有阻挡,例如边框,非空内容,padding等)block box的margin会发生重叠

    3. 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此

    4. BFC的区域不会与float的元素区域重叠 因为两个BFC区域之间互不影响

    5. 计算BFC的高度时,浮动子元素也参与计算

    6. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面元素

    高度塌陷

    父元素没有设置高度 靠子元素撑开高度 此时子元素 开启浮动后 脱离了文档流 无法撑开父元素 就会导致父元素塌陷  父元素下面的所有元素就会上来  (根据BFC第五条规则可解决)

    外边距合并(重叠)

    外边距合并的4个条件: 1. 同属于1个BFC内    2. 块级元素 3. 相邻/嵌套(子父级也算) 4.之间没有阻碍(边框,非空内容,padding)

    按照BFC的定义,只有同属于一个BFC时,两个块级元素才可能发生Margin的重叠,这个包括(相邻元素,嵌套元素),只要他们之间没有阻挡(例如边框,非空内容,padding等)就会发生margin重叠。因此要解决margin重叠问题,消除4个条件其一就行了 ,对于两个相邻元素来说,意义不大,没有必要给它们加个外壳,但是对于嵌套元素来说就很有必要了,只要把父元素设为BFC就可以了。这样子元素的margin就不会和父元素的margin发生重叠了。

    浮动元素覆盖块级元素

    同一个BFC下 ,浮动元素会覆盖后面的块级元素。

    1.为后面的块级元素创建一个BFC。如overflow:hidden

    2. clear: both;

    定位position       偏移量默认值auto

    relative

        不脱离文档流,提升层级 ,不改变元素display

    absolute

        脱离文档流,提升层级,使元素变成块级元素,不设置偏移量则元素位置不会发生变化, 参照最近开启定位的祖先元素没有则参照初始包含块进行定位, 偏移边界是 内容区     margin:auto = margin : auto auto

    fixed

        根据浏览器窗口定位,ie6不支持

    static默认值

              没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)

    sticky 

        粘性定位 具备 relative和fixed的特性 兼容性不好 了解即可

    层级

    文档流中的普通元素默认最低 定位的元素会提升层级 , 手动设置了z-index层级比不设置的都高

    包含块

    元素的尺寸及位置 width height padding margin和absolute fixed的偏移值百分比是通过元素的包含块计算得来

    元素如何确定包含块:

    1.当元素在祖先元素上找不到包含块时 包含块是一个被称为初始包含块的视口大小的矩形  

    2.根元素(<html>)所在的包含块是初始包含块

    3. static或relative,包含块就是由它的最近的祖先(块|行内块)元素的内容区。

    4. absolute,包含块就是由它的最近的定位祖先元素的(包括内填充以内的)区域组成。如果没有祖先定位元素则是初始包含块

    5. fixed,包含块就是由 viewport (in the case of continuous media) 组成。

    根据百分比计算值

    块级元素的包含块的width height=内容区    绝对定位元素 width height = padding+内容区

    1. 计算height top及bottom中的百分值,是通过包含块的height的值。

         1.1如果包含块的height值会根据它的内容变化,非absolute的元素计算值为0 

         1.2包含块的position属性的值被赋予relative或static, absolute定位元素会计算包含块的padding值

    2. 计算 width, left, right, padding, margin 这些属性由包含块的 width 属性的值来计算它的百分值。

    相关文章

      网友评论

          本文标题:浮动 定位 BFC 包含块

          本文链接:https://www.haomeiwen.com/subject/cdjskqtx.html