0

0

overflow 与布局上下文(BFC)_html/css_WEB-ITnose

php中文网

php中文网

发布时间:2016-06-21 08:48:57

|

1577人浏览过

|

来源于php中文网

原创

HTML采用流式布局方式,CSS的 float在这种环境下非常重要。 float常与 overflow配合使用都是因为 overflow会创建新的BFC,进而影响布局。 本文从三个方面介绍 overflow对浮动的影响:清除环绕,包裹浮动元素,以及独立布局环境。在此之前先来了解一下什么是BFC:

BFC(Block Formatting Context,布局上下文) 是CSS渲染过程中进行布局的盒子,所有浮动子元素都在盒子内进行布局。 也就是说BFC内的浮动元素不会影响到BFC外部,BFC外部的环境也不会影响BFC内的布局。 MDN共列出8类元素可以生成一个BFC,包括浮动和绝对定位元素、行内块,以及 overflow不为 visible的元素。 可见, 设置 overflow:hidden可以开启一个BFC

立即学习前端免费学习笔记(深入)”;

BFC很多时候翻译为块级格式化上下文,其实笔者认为布局上下文更为贴切。 本质上讲一个BFC就是一个矩形块的独立布局环境。

参考: https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Block_formatting_context

清除环绕效果

和其他的流式文档(包括Microsoft Word文档)一样, 为了支持环绕布局CSS引入了浮动的概念。 使得后续的文档流能够环绕在浮动元素的周围。例如:

立即学习前端免费学习笔记(深入)”;

<div style="border:1px solid #000;width:300px;">  <div style="float:left;background: yellow;height:100px;width:150px;">float:left</div>   <div> Eros. Nunc ac tellus in sapien molestie rhoncus. Pellentesque nisl. Praesent venenatis blandit velit. Fusce rutrum.  Leo diam interdum ligula, eu scelerisque sem purus in tellus.</div></div>

左侧

浮动,右侧
会环绕左侧的浮动元素。

立即学习前端免费学习笔记(深入)”;

float:left

Eros. Nunc ac tellus in sapien molestie rhoncus. Pellentesque nisl. Praesent venenatis blandit velit. Fusce rutrum. Leo diam interdum ligula, eu scelerisque sem purus in tellus.

但是当我们需要分栏布局时,就要清除环绕效果。有多种方式可以做到这一点:

  • 给右侧
    添加 margin-left。
  • 给父容器的 ::after设置 clear:both(见 利用浮动和清除浮动进行布局一文)。
  • 本文要介绍的方法是为右侧

    设置 overflow:hidden。这样右侧就会形成一个BFC其内部布局不受外部浮动的影响,因此也就不会环绕左侧
    了。

    立即学习前端免费学习笔记(深入)”;

    <div style="float:left;border:1px solid #000;width:300px;">  <div style="background: yellow;height:100px;width:150px;">float:left</div>   <div style="overflow:hidden"> Eros. Nunc ac tellus in sapien molestie rhoncus. Pellentesque nisl. Praesent venenatis blandit velit. Fusce rutrum.  Leo diam interdum ligula, eu scelerisque sem purus in tellus.</div></div>

    效果如下:

    立即学习前端免费学习笔记(深入)”;

    float:left

    Eros. Nunc ac tellus in sapien molestie rhoncus. Pellentesque nisl. Praesent venenatis blandit velit. Fusce rutrum. Leo diam interdum ligula, eu scelerisque sem purus in tellus.

    包裹浮动元素

    立即学习前端免费学习笔记(深入)”;

    如果一个父元素内只包含浮动元素,那么如何让父元素包裹子元素呢?

    这是一个前端开发中很常见的布局问题。 存在浮动子元素时,父元素的高度是可能小于子元素的。 比如我们给父元素设置红色背景:

    立即学习前端免费学习笔记(深入)”;

    <div style="background:red;width:300px;">  <div style="width:150px;height:100px;float:left;border:1px solid #000;">Child</div>  Parent</div>

    子元素超出来啦!父元素的红色背景没有完全应用到子元素上。

    立即学习前端免费学习笔记(深入)”;

    Child

    Parent

    志设AI
    志设AI

    志设AI是一站式AI设计平台,集“AI生图 + 在线设计 + 素材交易 + 收益分成”于一体。

    下载

    这时为父元素设置 overflow:hidden,它便成为一个BFC。

    立即学习前端免费学习笔记(深入)”;

    <div style="overflow:hidden;background:red;width:300px;">  <div style="width:150px;height:100px;float:left;border:1px solid #000;">Child</div>  Parent</div>

    BFC内部元素不能影响外部,因此浮动子元素不可显示在父元素之外。 而父元素高度为零,难道不显示子元素了吗? CSS决定这时就用父元素来包裹子元素吧! 于是父元素便和子元素等高了,红色背景也就显示出来。

    立即学习前端免费学习笔记(深入)”;

    Child

    Parent

    独立布局环境

    overflow:hidden可以开启一个布局上下文(BFC),内部布局不会受外部影响。这在嵌套的浮动布局中非常有用。 考虑如下场景:

    立即学习前端免费学习笔记(深入)”;

    整个页面采用两栏布局:左侧是Sidebar定宽且向左浮动,右侧是Content自适应。 我们计划在右侧Content中显示用户列表。

    立即学习前端免费学习笔记(深入)”;

    <div style="width:320px;border:1px solid black;">  <div style="float:left;width:100px;background:yellow;height:200px;">Sidebar</div>  <div>    <p style="background:lightblue;"> User: Alice </p>    <div style="clear: both;"></div>    <p style="background:lightblue;"> User: Bob </p>    <div style="clear: both;"></div>    <p style="background:lightblue;"> User: Charlie </p>  </div></div>

    假如每个用户内部布局存在着某种浮动,于是我们需要在每个用户之后清除浮动。 这会发生什么?

    立即学习前端免费学习笔记(深入)”;

    Sidebar

    User: Alice

    User: Bob

    User: Charlie

    用户列表中的 clear:both将整个页面布局的浮动清除了! 从第2个用户开始,都跑到边栏Sidebar的下面了。 为了给右侧容器创建独立的布局环境,我们给右侧容器添加 overflow:hidden:

    立即学习前端免费学习笔记(深入)”;

    <div style="width:320px;border:1px solid black;">  <div style="float:left;width:100px;background:yellow;height:200px;">Sidebar</div>  <div style="overflow:hidden">    <p style="background:lightblue;"> User: Alice </p>    <div style="clear: both;"></div>    <p style="background:lightblue;"> User: Bob </p>    <div style="clear: both;"></div>    <p style="background:lightblue;"> User: Charlie </p>  </div></div>

    设置 overflow:hidden的右侧

    会被渲染成一个BFC(布局上下文), 外部浮动元素(Sidebar)就不会影响BFC内部布局了:

    立即学习前端免费学习笔记(深入)”;

    Sidebar

    User: Alice

    User: Bob

    User: Charlie

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

43

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

38

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

35

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

20

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

18

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

3

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

235

2026.02.27

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

11

2026.02.27

AO3官网直接进入
AO3官网直接进入

AO3官网最新入口合集,汇总2026年可用官方及镜像链接,助你快速稳定访问Archive of Our Own平台。阅读专题下面的文章了解更多详细内容。

382

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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