javascript - 关于bfc的问题. 应该是bfc
伊谢尔伦
伊谢尔伦 2017-04-10 16:02:03
[JavaScript讨论组]
<p class='wraper'>
        <p class="left"></p>
        <p class="right"></p>
        <ul class=''>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </p>
    .wraper{width:1200px;margin:0 auto;}
    .left{float:left;}
    .right{float:right;}
    .left,.right{width:200px;height:200px;background:red;}
    ul{overflow:hidden;}

这里一个疑问。 1.为什么ul的宽会是800px?而不是1200?

  1. 给ul设置宽为1200px的时候,ul为什么不会换行?overflow不是触发了bfc不会和float重碟吗?
    3.当子元素含有float的时候,此元素是不是也触发了bfc?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
伊谢尔伦

问题1: 为什么ul的宽会是800px?而不是1200?

题主已经说了,创建了新的BFC(establishes a new block formatting context)的元素,不会与float重叠,因此。w3c的表述是:

The border box of a table, a block-level replaced element, or an element in the normal flow that establishes a new block formatting context (such as an element with 'overflow' other than 'visible') must not overlap the margin box of any floats in the same block formatting context as the element itself.

其中must not overlap就是说不重叠了,所以ul在widthauto的默认情况下,实际宽度比包含块小。

问题2:给ul设置宽为1200px的时候,ul为什么不会换行?overflow不是触发了bfc不会和float重碟吗?

经测试,在Firefox下不换行。但IE及Chrome下,都会认为空间不足而换行。一般来说,Chrome和Firefox同作为现代浏览器,它们的兼容差异是很少的,像这种有差异的情况,可以认为是w3c尚未详细描述的边缘细节。就这个具体问题来说,如果w3c的must not overlap是字面意思的话,也只是说,目前Chrome和IE对这个地方实现地更正确一些,仅此而已。

问题3:当子元素含有float的时候,此元素是不是也触发了bfc?

建立新的BFC的条件:

  1. 视口提供的初始包含块(根元素)

  2. 浮动元素

  3. 绝对定位元素

  4. displayinline-blocktable-celltable-caption的计算值的元素(行内块、表格标题、单元格)

  5. overflow不为visible的块元素

所以,如果问题里的”元素“是指这个浮动子元素的话,那就是“建立了新的BFC”。

PHP中文网

1.float 并没有脱离文档刘 所以 也还是会占有 空间 所以 ul只能是800 因为left 和right 分别是200的宽度
2.给ul设置overflow 只会对子元素出发bfc对他自己本身所在的文档中是没有影响的

怪我咯

1,因为设置overflow:hidden;,生成了BFC,而BFC区域不会与float区域重叠,故ul只能是800px;
2,我设置width:1200px;时,ul是会被挤下来的,具体可看演示
3,当元素有float元素且float不为none时,会触发BFC。

具体参考BFC原理

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号