盒模型與BFC
盒模型
基本概念
什么是 CSS 盒模型?相信大部分人都能答出这个问题来,那就是 标准模型 + IE 模型
标准模型:
IE 模型
很明显
- 在 标准盒子模型中,
width
和height
指的是内容区域的宽度和高度。增加内边距、边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸。 - IE 盒子模型中,
width
和height
指的是content
+border
+padding
CSS 如何设置这两种模型
- 标准模型:
box-sizeing: content-box;
- IE 模型:
box-sizeing: border-box;
JS 如何设置盒模型对应的宽和高
dom.style.width/height
: 只能取出内联样式的宽和高 eg:<div id="aa" style="width: 200px"></div>
dom.currentStyle.width/height
获取即时计算的样式,但是只有 IE 支持,要想支持其他浏览器,可以通过下面的方式window.getComputedStyle(dom).width
: 兼容性更好dom.getBoundingClientRect().width/height
: 这个较少用,主要是要来计算在页面中的绝对位置
边距重叠
什么是边距重叠呢?
边界重叠是指两个或多个盒子(可能相邻也可能嵌套)的相邻边界(其间没有任何非空内容、补白、边框)重合在一起而形成一个单一边界。
父子元素的边界重叠
<style>
.parent {
background: #e7a1c5;
//此處為 消除高度塌陷方法之一:padding-top:10px;
}
.parent .child {
background: #c8cdf5;
height: 100px;
margin-top: 10px;
}
</style>
<section class="parent">
<article class="child"></article>
</section>
解決辦法:在父類元素添加 padding,border,height,width等元素
以为期待的效果:
而实际上效果如下:
在这里父元素的高度不是 110px,而是 100px,在这里发生了高度坍塌。
原因是如果块元素的 margin-top
与它的第一个子元素的 margin-top
之间没有 border
、padding
、inline
content
、 clearance
来分隔,或者块元素的 margin-bottom 与它的最后一个子元素的 margin-bottom 之间没有 border
、padding
、inline
content
、height
、min-height
、 max-height
分隔,那么外边距会塌陷。子元素多余的外边距会被父元素的外边距截断。
兄弟元素的边界重叠
<style>
#margin {
background: #e7a1c5;
overflow: hidden;
width: 300px;
}
#margin > p {
background: #c8cdf5;
margin: 20px auto 30px;
}
</style>
<section id="margin">
<p>1</p>
<p>2</p>
<p>3</p>
</section>
可以看到 1 和 2,2 和 3 之间的间距不是 50px,发生了边距重叠是取了它们之间的最大值 30px。
空元素的边界重叠
假设有一个空元素,它有外边距,但是没有边框或填充。在这种情况下,上外边距与下外边距就碰到了一起,它们会发生合并:
BFC
解决上述问题的其中一个办法就是创建 BFC。BFC 的全称为 Block Formatting Context
,即块级格式化上下文。
- 处于同一个 BFC 中的元素相互影响,可能会发生 margin collapse;
- BFC 在页面上是一个独立的容器,容器里面的子元素不会影响到外面的元素,反之亦然;
- 计算 BFC 的高度时,考虑 BFC 所包含的所有元素,包括浮动元素也参与计算;
- 浮动盒的区域不会叠加到 BFC 上;
防止垂直 margin 重叠
父子元素的边界重叠得解决方案: 在父元素上加上 overflow:hidden;使其成为 BFC。
.parent {
background: #e7a1c5;
overflow: hidden;
}
兄弟元素的边界重叠,在第二个子元素创建一个 BFC 上下文:
<section id="margin">
<p>1</p>
<div style="overflow:hidden;">
<p>2</p>
</div>
<p>3</p>
</section>
清除内部浮动
<style>
#float {
background: #fec68b;
}
#float .float {
float: left;
}
</style>
<section id="float">
<div class="float">我是浮动元素</div>
</section>
父元素#float
的高度为 0,解决方案为为父元素#float
创建 BFC,这样浮动子元素的高度也会参与到父元素的高度计算:
#float {
background: #fec68b;
overflow: hidden; /*这里也可以用float:left*/
}
自适应两栏布局
<section id="layout">
<style>
#layout {
background: red;
}
#layout .left {
float: left;
width: 100px;
height: 100px;
background: pink;
}
#layout .right {
height: 110px;
background: #ccc;
}
</style>
<!--左边宽度固定,右边自适应-->
<div class="left">左</div>
<div class="right">右</div>
</section>
在这里设置右边的高度高于左边,可以看到左边超出的部分跑到右边去了,这是由于由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样导致的。
解决方案为给右侧元素创建一个 BFC,原理是 BFC 不会与 float 元素发生重叠。
#layout .right {
height: 110px;
background: #ccc;
overflow: auto;
}
参考 边距重叠与 BFC
內容轉載,侵權必刪
盒模型與BFC的更多相关文章
- 神奇的盒模型(BFC)
上一篇我提到每一个元素都有自己的display属性,其属性值可以改变.其改变的方式,可以利用神奇的css盒模型(BFC). 盒模型,是css可视化格式化系统的基础,可以用于元素定位和网页布局.一个盒模 ...
- 十分钟复习CSS盒模型与BFC
css盒模型与BFC 本文为收集整理总结网上资源 旨在系统复习css盒模型与bfc 节省复习时间 阅读10分钟 什么是盒模型 每一个文档中,每个元素都被表示为一个矩形的盒子,它都会具有内容区.padd ...
- 面试 02-CSS盒模型及BFC
02-CSS盒模型及BFC #题目:谈一谈你对CSS盒模型的认识 专业的面试,一定会问 CSS 盒模型.对于这个题目,我们要回答一下几个方面: (1)基本概念:content.padding.marg ...
- 【从0到1学Web前端】CSS定位问题一(盒模型,浮动,BFC) 分类: HTML+CSS 2015-05-27 22:24 813人阅读 评论(1) 收藏
引子: 在谈到css定位问题的时候先来看一个小问题: 已知宽度(假如:100px)div框,水平居中,左右两百年的分别使用div框填充.且左右div自适应. 效果如下图: 这个问题的难点主要是浏览器宽 ...
- css盒模型与bfc与布局与垂直水平居中与css设计模式等
一.css盒子与布局相关 盒子内部的布局 盒子之间的布局visual formatting 脱离正常流normal flow的盒子的布局 absolute布局上下文下的布局 float布局上下文下的布 ...
- 前端面试必备技巧(二)css盒模型及BFC
CSS盒模型 基本概念:标准模型+IE模型及区别 CSS如何设置这两种模型? JS如何设置获取盒模型对应的宽和高? 实例题(根据盒模型解释边距重叠) BFC边距重叠解决方案 (1)BFC的基本概念:b ...
- css盒模型-BFC
BFC(边距重叠解决方案) 1.BFC的基本概念:块级格式化上下文 2.BFC的原理(说白了就是BFC的渲染规则): 这个规则是什么呢?我觉得大家能说出4点就够了 第一个就是BFC可以解决这个元素的垂 ...
- css盒模型:BFC、IFC边距重叠解决方案
BFC:块级格式化上下文 IFC:行内格式化上下文 实例如下: <div class="out" style="background: red;"> ...
- CSS盒模型的深度思考及BFC
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 题目:谈一谈你对CSS盒模型的认识 专业的面试,一定会问 CSS 盒模型 ...
随机推荐
- 深入浅出SharePoint2010——请假系统实战
一.需求分析文档 二.请假系统无代码解决方案 2.1 数据框架设计 2.2 权限设计 2.3 表单设计 2.4 工作流设计 2.5 门户主页设计 三.请假系统第三方解决方案(Nintex) 四.请假系 ...
- 如何实现本机Windows连接虚拟机中的CentOS
1.确定CentOS的IP地址,命令为 ifconfig,由此可知,LinuxIP地址为 192.168.85.128 2.WIndows的IP地址为192.168.16.1, 3.保证CentOS和 ...
- ssh整合之Session延迟加载问题的解决
问题描述:在使用Hibernate和Struts是经常会遇到如下BUG: org.apache.struts2.json.JSONException: org.apache.struts2.json. ...
- Angular不同版本对应的Bootstrap组件
AngularJS 1.x版本对应的 bootstrap组件库是ui-bootstrap; http://www.cnblogs.com/pilixiami/p/5597634.html Angula ...
- LVS (Linux Virtual Server) 思维导图笔记
- 20165302 预备作业3 Linux安装及学习
linux系统安装 我在安装VirtualBox时出现了一些小问题,如图 我的电脑只能设置32-bit的Ubuntu版本,但教程上说要选用64-bit的,我通过百度查询得知要进行BIOS设置,设置好后 ...
- Spring(五)之Bean定义继承和依赖注入
一.Bean定义继承 bean定义可以包含许多配置信息,包括构造函数参数,属性值和特定于容器的信息,例如初始化方法,静态工厂方法名称等. 子bean定义从父定义继承配置数据.子定义可以根据需要覆盖某些 ...
- PHP面试系列 之框架(二)---- 常见框架的特性
题:PHP框架有哪些,你用过哪些?各自的优缺点是什么? 考点: (1)PHP框架的差异和优缺点 1.Yaf框架 使用PHP扩展的形式写的一个PHP框架,也就是以C语言为底层编写的,性能上要比PHP代码 ...
- 虚拟机和主机文件实时同步 -- winsshfs的快速入手
之前在公司使用mac ,并且通过mac下的osfuse和sshfs连接,直接将虚拟机的文件目录同步到了本地,并且可以进行实时操作修改,对于写项目,确实是省了很大一部分上传的精力. 于是在自己的win下 ...
- nginx中文文档
http://www.nginx.cn/doc/ LNMP :https://lnmp.org/faq/lnmp-vhost-add-howto.html 配置详解 配置详解2