zoukankan      html  css  js  c++  java
  • BFC与HasLayout的理解

    1、(Block Formatting Contexts)BFC 定义
      BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。
    2、BFC布局规则:
    内部的Box会在垂直方向,一个接一个地放置。
    Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
    每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
    BFC的区域不会与float box重叠。
    BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
    计算BFC的高度时,浮动元素也参与计算
    3、哪些元素会生成BFC:
    根元素
    float属性不为none
    position为absolute或fixed
    display为inline-block, table-cell, table-caption, flex, inline-flex
    overflow不为visible
    1、haslayout:
    ‘Layout’ 是 IE 的专有概念,它决定了元素如何对其内容进行定位和尺寸计算,与其他元素的关系和相互作用,以及对应用还有使用者的影响。。
         当一个元素的 ‘hasLayout’ 属性值为 true 时,我们说这个元素拥有了一个布局(layout),即成功触发hasLayout
         默认拥有布局的元素:
    <html>, <body>
    <table>, <tr>, <th>, <td>
    <img>
    <hr>
    <input>, <button>, <select>, <textarea>, <fieldset>, <legend>
    <iframe>, <embed>, <object>, <applet>
    <marquee>
    可触发 hasLayout 的 CSS 特性:
    display: inline-block         /*ALL*/
    height: (除 auto 外任何值)  /*仅适用IE6 7*/
    (除 auto 外任何值)   /*仅适用IE6 7*/
    float: (left 或 right)       /*ALL*/
    position: absolute           /*ALL*/
    writing-mode: tb-rl          /*ALL*/
    zoom: (除 normal 外任意值)  /*仅适用IE6 7*/
    IE7 还有一些额外的属性(不完全列表)可以触发hasLayout :
    min-height: (任意值)/*以下适用IE7+*/
    min- (任意值)
    max-height: (除 none 外任意值)
    max- (除 none 外任意值)
    overflow: (除 visible 外任意值,仅用于块级元素)
    overflow-x: (除 visible 外任意值,仅用于块级元素)
    overflow-y: (除 visible 外任意值,仅用于块级元素)
    position: fixed
     
    总结:
     1、Layout是 IE 的专有概念,它决定了元素如何对其内容进行定位和尺寸计算,与其他元素的关系和相互作用,以及对应用还有使用者的影响。
     2、BFC就是一个不让内部元素与外界相互影响包容浮动子元素并自身和外界的浮动盒子不重叠的盒子
     3、Tips:我们有时会用overflow:hidden的方法去清除浮动,就是因为触发了元素的块格式化上下文(IE6 7要申明zoom为1)
     4、 IE有它自己的hasLayout属性,那么非IE浏览器呢?非IE浏览器采用的就是BFC(块格式化上下文)
      5.haslayout的原理 IE 浏览器中,触发 hasLayout 的元素在进行高度计算的时候,其浮动的子元素也会参与运算。
        
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    XPath中的text()和string()区别(转)
    (转)Ubuntu 16.04 安裝Docker(PS:本文适用amd64位的ubuntu系统)
    python 爬取世纪佳缘,经过js渲染过的网页的爬取
    Python中的join()函数的用法
    Ubuntu下修改ubuntu源,完成Redis Desktop Manager的安装
    Ubuntu16.04安装Redis
    Scrapy爬虫实例教程(二)---数据存入MySQL
    Ubuntu16.04安装mongodb 及使用
    关闭和启动网卡
    网络之端口的作用
  • 原文地址:https://www.cnblogs.com/dirkhe/p/6129605.html
Copyright © 2011-2022 走看看