CSS 盒模型、解决方案、BFC 原理讲解--摘抄
PS:内容比较基础,目的只是覆盖面试知识点,大佬可以
history.back(-1)
W3C 标准盒模型 & IE 怪异盒模型
页面上显示的每个元素(包括内联元素)都可以看作一个盒子,即盒模型( box model )
盒模型由 4 部分组成,从内到外分别是:content padding border margin
W3C 标准盒模型一个元素的宽度(高度以此类推)应该这样计算:
|
1 2 3 |
一个元素的宽度 = content 盒子总宽度 = margin-left + border-left + padding-left + width + padding-right + border-right + margin-right |
而IE 怪异盒模型一个元素的宽度(高度以此类推)却是这样计算的:
|
1 2 3 |
一个元素的宽度 = content + padding + border 盒子总宽度 = margin-left + width + margin-right |
解决方案 box-sizing
|
1 2 3 4 5 |
// W3C 标准盒模型(浏览器默认) box-sizing: content-box; // IE 怪异盒模型 box-sizing: border-box; |
当我们设置 box-sizing: border-box; 时,border 和 padding 就被包含在了宽高之内,和 IE 盒模型是一样的。
所以,为了避免你同一份 css 在不同浏览器下表现不同,最好加上:
|
1 2 3 4 5 |
*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } |
JS 如何获取盒模型对应的宽和高
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<style> * { margin: 0; padding: 0; } #box { width: 100px; height: 100px; padding: 50px; border: 5px solid red; margin: 50px; } </style> <div id="box" style=""></div> <script> let box = document.getElementById('box') // 只能取到内联样式的宽高 console.log('style:' + box.style.width) // 100px // 内联样式和外联样式的宽高都能取到,但只有 IE 支持 console.log('currentStyle:' + box.currentStyle.width) // 100px // 内联样式和外联样式的宽高都能取到,几乎所有主流浏览器都支持 console.log('getComputedStyle:' + getComputedStyle(box).width) // 100px // 内联样式和外联样式的宽高都能取到,几乎所有主流浏览器都支持,取到的是盒子总宽度 console.log('getBoundingClientRect:' + box.getBoundingClientRect().width) // 210 </script> |
BFC
BFC:块级元素格式化上下文
IFC:内联元素格式化上下文(面试不常考)
BFC 原理
在 BFC 的垂直方向上,边距会发生重叠
BFC 区域不会与 浮动区域重叠
BFC 在页面上是一个独立的容器,与其他元素互不影响
计算 BFC 高度时,浮动元素也会参与计算
如何创建 BFC
float值不为none,只要设置了浮动,当前元素就创建了一个 BFCposition值不为static,只要设置了定位,当前元素就创建了一个 BFCdisplay值不为默认,只要设置了display,当前元素就创建了一个 BFCoverflow值不为visible,只要设置了overflow,当前元素就创建了一个 BFC
|
1 |
overflow: hidden; |
BFC 使用场景
解决边距重叠问题
当元素都设置了 margin 边距时,margin 将取最大值。为了不让边距重叠,可以给子元素加一个父元素,并设置该父元素为 BFC
|
1 2 3 4 5 6 7 8 9 |
<div class="box" id="box"> <p>Lorem ipsum dolor sit.</p> <div style="overflow: hidden;"> <p>Lorem ipsum dolor sit.</p> </div> <p>Lorem ipsum dolor sit.</p> </div> |
侵占浮动元素的位置
设置非浮动元素为 BFC 即可
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<style> .one { float: left; width: 100px; height: 100px; background-color: pink; } .two { height: 200px; background-color: red; /* 设置 BFC */ overflow: hidden; } </style> <div class="one"></div> <div class="two"></div> |
清除浮动
BFC 原理第 4 条:计算 BFC 高度时,浮动元素也会参与计算
当然,清除浮动还有其他最佳实践,这里只是分析场景。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<style> .one { background-color: pink; /* 设置 BFC */ overflow: hidden; } .two { float: left; } </style> <div class="one"> <div class="two">hello world</div> </div> |
CSS 盒模型、解决方案、BFC 原理讲解--摘抄的更多相关文章
- 十分钟复习CSS盒模型与BFC
css盒模型与BFC 本文为收集整理总结网上资源 旨在系统复习css盒模型与bfc 节省复习时间 阅读10分钟 什么是盒模型 每一个文档中,每个元素都被表示为一个矩形的盒子,它都会具有内容区.padd ...
- 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;"> ...
- 神奇的盒模型(BFC)
上一篇我提到每一个元素都有自己的display属性,其属性值可以改变.其改变的方式,可以利用神奇的css盒模型(BFC). 盒模型,是css可视化格式化系统的基础,可以用于元素定位和网页布局.一个盒模 ...
- CSS盒模型的深度思考及BFC
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 题目:谈一谈你对CSS盒模型的认识 专业的面试,一定会问 CSS 盒模型 ...
- 面试 02-CSS盒模型及BFC
02-CSS盒模型及BFC #题目:谈一谈你对CSS盒模型的认识 专业的面试,一定会问 CSS 盒模型.对于这个题目,我们要回答一下几个方面: (1)基本概念:content.padding.marg ...
- 面试汇总——说一下CSS盒模型
本文是面试汇总分支——说一下CSS盒模型. 基本概念:W3C标准盒模型和IE盒模型 CSS如何设置这两种模型 JS如何获取盒模型对应的宽和高 根据盒模型解释边距重叠 BFC(边距重叠解决方案) 一. ...
随机推荐
- Bootstrap历练实例:标签修饰
您可以使用修饰的 class label-default.label-primary.label-success.label-info.label-warning.label-danger 来改变标签 ...
- tcp 高性能服务, netty,mqtt
1. io 线程不要有比较长的服务. 全部异步化. [1] netty 权威指南上只是说业务复杂时派发到业务线程池种. 共用的线程池最好都轻量. 多层线程池后, 下层的可以进行隔离. 这个是 mqtt ...
- SwaggerUI日常使用
最近公司项目集成springFox,记录一些swaggerUI日常使用,包括数组,文件,默认值,允许值,参数/结果类注解,响应码..等等. 一.参数注解: 单参数:@ApiImplicitParam ...
- C#基础-数组-ArrayList
数组ArrayList using System.Collections; //表示引入集合的命名空间 数组ArrayList容量本身是不固定的,根据存储的数据动态变化 // 声明一个ArrayLis ...
- 快速排序和快速选择(quickSort and quickSelect)算法
排序算法:快速排序(quicksort)递归与非递归算法 TopK问题:快速选择(quickSelect)算法 import java.util.*; import java.lang.*; publ ...
- LeetCode(152) Maximum Product Subarray
题目 Find the contiguous subarray within an array (containing at least one number) which has the large ...
- Divisibility by 25 CodeForces - 988E
You are given an integer nn from 11 to 10181018 without leading zeroes. In one move you can swap any ...
- NOIP 2017 小凯的疑惑
# NOIP 2017 小凯的疑惑 思路 a,b 互质 求最大不能表示出来的数k 则k与 a,b 互质 这里有一个结论:(网上有证明)不过我是打表找的规律 若 x,y(设x<y) 互质 则 : ...
- Java构造器(construtor)与垃圾收集器(GB)
在Java中,程序员会在乎内存中的两块空间. 堆(heap)和栈(stack). 当java虚拟机启动时, 它会从底层的操作系统取得一块内存, 并且以此块内存来执行java程序. 在Java中, 实例 ...
- Python之多线程与多进程(一)
多线程 多线程是程序在同样的上下文中同时运行多条线程的能力.这些线程共享同一个进程的资源,可以在并发模式(单核处理器)或并行模式(多核处理器)下执行多个任务 多线程有以下几个优点: 持续响应:在单线程 ...