等高布局 兼容浏览器--方法 用到bfc

134 阅读4分钟

什么是BFC?

BFC 全称为 块格式化上下文 (Block Formatting Context) 。

BFC 特性(功能)

使 BFC 内部浮动元素不会到处乱跑;

产生bfc

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div style="width: 600px; border:5px solid blue;" >
        <div style="width: 200px;height: 500px;background-color: yellow; float: left;">

        </div>
    </div>
</body>
</html>

如果我给里面的元素一个 float 或者绝对定位,它就会脱离普通文档流中。

position的值不是static或者relative

相对定位

<div style="width: 600px; border:5px solid blue; position:absolute;" >
    <div style="width: 200px;height: 500px;background-color: yellow; float: left;">

    </div>
</div>

inline-block

<div style="width: 600px; border:5px solid blue;display: inline-block;" >
    <div style="width: 200px;height: 500px;background-color: yellow; float: left;">

    </div>
</div>

over-hidden


<div style="width: 600px; border:5px solid blue;display: inline-block; overflow:hidden;" >
    <div style="width: 200px;height: 500px;background-color: yellow; float: left;">

    </div>
</div>

回归等高布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        section{
            float: left;
            /* overflow: hidden; */
        }
        .left{
            padding-bottom:2000000px ;
            margin-bottom:-2000000px ;
        }
        .right{

        }
    </style>
</head>
<body>
    <section style="width: 800px;  border:15px solid green;">
        <span class="left" style="width: 200px; display: inline-block; float: left; background-color: greenyellow;">行内元素水平排列,直到当
            行被占满然后换行,块级元素则会被渲染为完整的一个新行,除非另外指定,,块级元素则会被渲染为完整的一个新行,除非另外指定,块级元素则会被渲染为完整的一个新行,除非另外指定,块级元素则会被渲染为完整的一个新行,除非另外指定,块级元素则会被渲染为完整的一个新行,除非另外指定,块级元素则会被渲染为完整的一个新行,除非另外指定,块级元素则会被渲染为完整的一个新行,除非另外指定,块级元素则会被渲染为完整的一个新行,除非另外指定
            否则所有元素默认都是普通流定位,也可以说,普通流中元素的位置由该元素在 HTML 文档中的位置决定</span>
        <span  class = "right"style="width: 300px; display: inline-block; float: left;background-color: pink;">在普通流中,元素按照其在 HTML 中的先后位置至上而下布局,在这个过程中,行内元素水平排列,直到当行被占满然后换行,块级元素则会被渲染为完整的一个新行,除非另外指定,否则所有元素默认都是普通流定位,也可以说,普通流中元素的位置由该元素在 HTML 文档中的位置决定 从效果上看,因为两个 div 元素都处于同一个 BFC 容器下 (这里指 body 元素) 所以第一个 div 的下边距和第二个 div 的上边距发生了重叠,所以两个盒子之间距离只有 100px,而不是 200px。 首先这不是 CSS 的 bug,我们可以理解为一种规范,如果想要避免外边距的重叠,可以将其放在不同的 BFC 容器中。从效果上看,因为两个 div 元素都处于同一个 BFC 容器下 (这里指 body 元素) 所以第一个 div 的下边距和第二个 div 的上边距发生了重叠,所以两个盒子之间距离只有 100px,而不是 200px。 首先这不是 CSS 的 bug,我们可以理解为一种规范,如果想要避免外边距的重叠,可以将其放在不同的 BFC 容器中。从效果上看,因为两个 div 元素都处于同一个 BFC 容器下 (这里指 body 元素) 所以第一个 div 的下边距和第二个 div 的上边距发生了重叠,所以两个盒子之间距离只有 100px,而不是 200px。 首先这不是 CSS 的 bug,我们可以理解为一种规范,如果想要避免外边距的重叠,可以将其放在不同的 BFC 容器中。从效果上看,因为两个 div 元素都处于同一个 BFC 容器下 (这里指 body 元素) 所以第一个 div 的下边距和第二个 div 的上边距发生了重叠,所以两个盒子之间距离只有 100px,而不是 200px。 首先这不是 CSS 的 bug,我们可以理解为一种规范,如果想要避免外边距的重叠,可以将其放在不同的 BFC 容器中。从效果上看,因为两个 div 元素都处于同一个 BFC 容器下 (这里指 body 元素) 所以第一个 div 的下边距和第二个 div 的上边距发生了重叠,所以两个盒子之间距离只有 100px,而不是 200px。 首先这不是 CSS 的 bug,我们可以理解为一种规范,如果想要避免外边距的重叠,可以将其放在不同的 BFC 容器中。</span>
    </section>
</body>
</html>

加了padding 父级边框也被撑下去 加上 margin-bottom:-2000000px ; 触发bfc 限制内容