当前位置: 首页 > article >正文

【CSS】什么是BFC?BFC有什么作用?

【CSS】什么是BFC?BFC有什么作用?

  • 一、BFC概念
  • 二、触发BFC
  • 三、BFC特性即应用场景
    • 1、解决margin塌陷的问题
    • 2、避免外边距margin重叠(margin合并)
    • 3、清除浮动
    • 4、阻止元素被浮动元素覆盖

一、BFC概念

BFC(block formatting context)块级格式化上下文,他是页面中的一块渲染区域,并且有一套属于自己的渲染规则,BFC 是一个独立的布局环境,具有BFC特性的元素可以看作是隔离的独立容器,容器里面的元素不会在布局上影响到外面的元素。

二、触发BFC

  • 浮动元素(元素的float不是none)
  • 绝对定位元素(元素的position为absolute 或 fixed)
  • display为inline-block、table-cell、table-caption、table、table-row、table-row-group、table-header-group、table-footer-group、inline-table、flow-root、flex或 inline-flex、grid或 inline-grid
  • overflow值不为visible的块元素
  • contain 值为layout、content 或 paint的元素
    多列容器(元素的column-count或 column-width 不为auto,包括 column-count为1)

三、BFC特性即应用场景

1、解决margin塌陷的问题

问题当父元素包裹着一个子元素且父元素没有边框的时候,当给子元素设置margin-top:100px,此时不应该看到的是子元素距离父元素顶部100px嘛?为什么是父元素距离body100px?
原因父元素与子元素之间且父元素没有边框,给子元素添加margin-top属性时,此时只是想让子元素的边框距离父元素边框有一段距离,而却出现了父元素的顶端距离body这个边框出现了位移,这就是margin-top塌陷的现象。

	.container{
		height: 300px;
		width: 300px;
		background-color: blue;
		/* overflow: hidden; */
	}
	.box {
		background: red;
		height: 100px;
		width: 100px;
		margin-top: 50px;
	}
	<div class="container">
		<div class="box">
		</div>
	</div>

在这里插入图片描述

解决方案:给父元素添加overflow:hidden触发BFC;

	.container{
		height: 300px;
		width: 300px;
		background-color: blue;
	    overflow: hidden; 
	}

在这里插入图片描述

2、避免外边距margin重叠(margin合并)

问题:两个兄弟块元素,一个设置下外边距100px,一个设置上外边距100px,此时它们不应该是相距200px才对嘛?为什么只相距了100px?
原因兄弟之间的元素,垂直方向的margin-bottom和margin-top会合并为单个边距,其大小为单个边距的最大值,如果值一样则值仅为其中一个。这就是外边距重叠现象。

	.box {
		background: red;
		height: 100px;
		width: 100px;
	}
	<div class="box" style="margin-bottom: 100px;">
	</div>
	<div class="box" style="margin-top: 100px;">
	</div>

在这里插入图片描述
解决办法每个元素放置不同的BFC中,通过overflow: hidden;触发BFC;

	.container {

		overflow: hidden;
	}
	.box {
		background: red;
		height: 100px;
		width: 100px;
	}
	<div class="container">
		<div class="box" style="margin-bottom: 100px;">
		</div>
	</div>
	<div class="container">
		<div class="box" style="margin-top: 100px;">
		</div>
	</div>

在这里插入图片描述

3、清除浮动

问题:如下代码,难道不应该看到的是一个黑色边框包裹这个一个红色方框,但是我们看到的是一个2px的高度和红色方块;

	.container{
		border: 1px solid;
	}
	.box {
		background: red;
		height: 100px;
		width: 100px;
		float: left;
	}
	<div class="container">
		<div class="box">
		</div>
	</div>

在这里插入图片描述

原因:这是因为给子元素添加了浮动,使它脱离了文档流;
解决方案:通过overflow:hidden触发BFC;

	.container{
		border: 1px solid;
		overflow: hidden;
	}

在这里插入图片描述

4、阻止元素被浮动元素覆盖

问题:红色方框覆盖蓝色方块;
原因:这是因为给红色方框添加了浮动,使它脱离了文档

	.box {
		background: red;
		height: 100px;
		width: 100px;
		float: left;
	}
	.box1 {
		background: blue;
		height: 300px;
		width: 300px;
	}
	<div class="box">
	</div>
	<div class="box1">
	</div>

在这里插入图片描述
解决方案:给正常的元素通过overflow:hidden触发BFC;即个box1添加;overflow:hidden;

	.box1 {
		background: blue;
		height: 300px;
		width: 300px;
		overflow:hidden;
	}

在这里插入图片描述


http://www.kler.cn/a/233796.html

相关文章:

  • 标准C++ 字符串
  • 【121. 买卖股票的最佳时机】——贪心算法/动态规划
  • 数据挖掘(九)
  • 某app最新版 vmp算法分析一
  • Unity学习笔记(4):人物和基本组件
  • 一文简单了解Android中的input流程
  • Android 11 webview webrtc无法使用问题
  • cool 框架 node 后端封装三方Api post请求函数
  • NLP_Bag-Of-Words(词袋模型)
  • 如何进行游戏服务器的负载均衡和扩展性设计?
  • VUE学习——事件参数
  • 每天一个数据分析题(一百五十六)
  • moduleID的使用
  • 【学习笔记】【内核】offsetof 的用法
  • 算法学习——LeetCode力扣二叉树篇1
  • c# 时间帮助类
  • 2.6:冒泡、简选、直插、快排,递归,宏
  • VMware虚拟机安装openEuler系统(一)(2024)
  • Idea里自定义封装数据警告解决 Spring Boot Configuration Annotation Processor not configured
  • Qt QML学习(一):Qt Quick 与 QML 简介
  • 【资料分享】基于单片机大气压监测报警系统电路方案设计、基于飞思卡尔的无人坚守点滴监控自动控制系统设计(程序,原理图,pcb,文档)
  • MySQL-SQL优化
  • JAVA设计模式之观察者模式详解
  • GPT原始论文:Improving Language Understanding by Generative Pre-Training论文翻译
  • Unity UGUI实现点击事件穿透
  • java多线程的四种创建方式、程序、线程、进程、并行、串行、Thread、Runnable、Callable、线程池技术