zoukankan      html  css  js  c++  java
  • overflow:hidden和块级格式化上下文

    overflow:hidden清除浮动原理

    1. BFC (Block Formatting Context)全称是块级格式化上下文,用于对块级元素排版,默认情况下只有根元素(body)一个块级上下文,但是如果一个块级元素 设置了float:left,overflow:hidden或position:absolute样式,就会为这个块级元素生成一个独立的块圾上下文,就像在window全局作用域内,声明了一个function就会生成 一个独立的作用域一样,新开僻的BFC像是开僻了一个新的小宇宙,使这个块圾元素内部的排版完全独立隔绝。
    2. 独立的块级上下文可以包裹浮动流,全部浮动子元素也不会引起容器高度塌陷,也就是说包含块会把浮动元素的高度也计算在内,所以不用清除浮动来撑起高度。

    该方法清楚浮动的本意

    overflow:hidden的意思是超出部分去掉,如果父元素height为auto,内部元素浮动,势必会将内部元素全部隐藏,故计算出内部浮动高度顺便清除浮动。

    满足下面任一条件的元素,会触发为 BFC :

    • 浮动元素,float 除 none 以外的值
    • 绝对定位元素,position(absolute,fixed)
    • display 为以下其中之一的值 inline-blocks,table-cells,table-captions
    • overflow 除了 visible 以外的值(hidden,auto,scroll)

    但是,"display:table" 本身并不产生 BFC,而是由它产生匿名框,匿名框中包含 "display:table-cell" 的框会产 BFC。 总之,对于 "display:table" 的元素,产生 BFC 的是匿名框而不是 "display:table"。

    在 CSS3 中,BFC 叫做 Flow Root,并增加了一些触发条件:

    • display 的 table-caption 值
    • position 的 fixed 值,其实 fixed 是 absolute 的一个子类,因此在 CSS2.1 中使用这个值也会触发 BFC ,只是在 CSS3 中更加明确了这一点。

    值得注意的是,在前面 Kayo 已经说明过了,BFC 并不是元素,而是某些元素带有的一些属性,因此,是上面这些元素产生了 BFC ,而它们本身并不是 BFC

    BFC 正是属于普通流的

    三. BFC 的特性

    从整体上看,BFC 是隔离了的容器,这个具体可以表现为三个特性:

    1. BFC 会阻止外边距折叠

    2. BFC 可以包含浮动的元素

    这也正是使用 overflow: hidden 与 overflow: auto 方法闭合浮动的原理,使用 overflow: hidden 或 overflow: auto 触发浮动元素的父元素的 BFC 特性,从而可以包含浮动元素,闭合浮动。

    3. BFC 可以阻止元素被浮动元素覆盖

    如上文所说,浮动元素的块级兄弟元素会无视浮动元素的位置,尽量占满一整行,这样就会被浮动元素覆盖,为该兄弟元素触发 BFC 后可以阻止这种情况的发生。

  • 相关阅读:
    ideaIU-2017.1.1.exe安装、注册、汉化IntelliJ IDEA
    504 Gateway Timeout 异常
    Windows下80端口被进程System占用的解决方法
    D2Admin基本使用
    MySQL 教程
    Element 插件
    VSCode-Element-Helper
    ECharts 教程
    JSP 教程
    Kotlin 教程 Android 官方开发语言
  • 原文地址:https://www.cnblogs.com/chern2468/p/6644166.html
Copyright © 2011-2022 走看看