可见格式化模型

Posted on 2021-08-28 09:59  ${妖气}  阅读(45)  评论(0编辑  收藏  举报

可见格式化模型

外边距折叠

常规块盒子有一种机制叫作 外边距折叠

垂直方向上的两个外边距相遇时,会折叠成一个外边距。折叠后外边距的高度等于两者中较大的那个高度

外边距折叠只发生在文档常规文本流中块级盒子的垂直方向上

包含块

如果元素的定位方式为静态定位(position: static)或相对定位(position: realtive),则包含块的边界就计算到一个最近的父元素

该元素的display属性值必须能提供类似块级的上下文,如 block, inline-block, table-cell, list-item 等

默认情况下,width, height, margin 和 padding 的值为百分比时,就以该父元素的尺寸为计算依据。如果当前元素的定位模型改成了 absolute 或 fixed,那么计算依据就会发生变化

相对定位

相对定位的元素仍然会在文档流中占用初始的空间,但可以应用平移属性。

因此,这样平移元素会导致它遮挡其他元素

绝对定位

绝对定位会把元素拿出文档流,即不会再占用原来的空间

绝对定位元素的包含块是距离它最近的定位祖先,即 position 属性设置为 static 以外任意值的祖先元素

绝对定位的盒子脱离了常规文档流,因此很难使用它们创建随视口(viewport)宽度和内容长度变化而变化的自适应或响应式布局

固定布局

固定定位元素的包含块是视口(viewport)

固定定位可用来创建始终停留在窗口相同位置的浮动元素

很多网站都使用这个技术让导航区始终保持可见,有的固定侧栏,有的固定顶栏

浮动

浮动就是为了在网页中实现**文本环绕图片的效果而引入的一种布局模型 **

浮动会导致内容高度缺失,有如下解决方案:

  • 利用 clear 样式属性(clearFix)

    .clearFix::after {
        content: '';
        display: block;
        clear: both;
    }
    
  • 利用块级格式化上下文

    块级格式化上下文,规定了页面必须自动包含突出的浮动元素,而且所有块级盒子的左边界默认与包含块的左边界对齐。

    有如下规则允许元素建立内部的块级格式化上下文:

    • display 属性值设置为 inline-block 或 table-cell 之类的元素,可以为内容创建类似块级的上下文;
    • float 属性值不是 none 的元素;
    • 绝对定位的元素;
    • overflow 属性值不是 visible 的元素;

内在大小 与 外在大小

contain-floats 属性,使用这个关键字,可以仅通过以下代码就让元素包含浮动:

.myThing {
    min-height: contain-floats;
}

但是,目前支持这个关键字的浏览器还是较少,小心使用