关于overflow:hidden和bfc

在练习tab选项卡的时候遇到了设置div内部li出现了影响外层相邻div浮动的情况,早就知道overflow:hidden可以清除这种情况产生的浮动,但是为什么它可以清除呢?我们往下看:

首先看一下我的页面结构:

    <div class="tabTitle">
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </div>
    <div class="tabContent">
        <div>1 is here</div>
        <div>2 is here</div>
        <div>3 is here</div>
    </div>

为了区分两个div,我们给了两种背景色:

        .tabTitle{
            background: orange;
        }
        .tabTitle ul li{
            margin-right: 3px;
            /*float: left;*/
        }
        .tabContent{
            background: dodgerblue;
        }

效果如下:

但是当我给li加上浮动的时候出现了这样的情况:
上层div背景色消失,下层div第一行和上层div在一行:

为什么会这样呢?肯定是因为浮动这个不用多想,但是为什么只有一行呢?我们加大li的高度再来试一下:

        .tabTitle ul li{
            margin-right: 3px;
            float: left;
            height: 200px;
        }

设置高度之后出现了这样的情况:

这验证了我们的猜想,只浮动一行是因为上层的高度太小,当我们扩大高度之后出现了在我们预想之中的情况,接下来我们引入overflow:hidden;
引入后的显示效果:

在这里为什么要用它呢?因为这个问题就是一个div内部的样式影响到了它外部div的样式,符合BFC可以解决的范畴。
BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
我们为第一个div引入overflow:hidden;让它构成bfc这样它内部的样式就不会影响到下一个div了,至于overflow:hidden;放置的位置我们可以放在li的父级ul里也可以放在ul的父级div.tabTitle中。

原文地址:https://www.cnblogs.com/Scott-se7en/p/5148141.html