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(边距重叠解决方案) 一. ...
随机推荐
- 测试 code style
c++ #include <iostream> int main(int argc, char *argv[]) { /* An annoying "Hello World&qu ...
- NOIP2016 toy
题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉 ...
- Springboot @Autowired 无法注入问题
特别提醒:一定要注意文件结构 WebappApplication 一定要在包的最外层,否则Spring无法对所有的类进行托管,会造成@Autowired 无法注入. 1. 添加工具类获取在 Sprin ...
- vue使用原生js实现滚动页面跟踪导航高亮
需要使用vue做一个专题页面. 滚动页面指定区域导航高亮. BetterScroll:可能是目前最好用的移动端滚动插件 如何自定义CSS滚动条的样式? 监听滚动页面事件,对比当前页面的位置与元素的位置 ...
- 【java】类成员的访问限制关系
- HashMap存储原理
1. HashMap概述 HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. ...
- solr配置中文分词器
配置IK分词器 在/opt/solr-7.7.1/server/solr-webapp/webapp/WEB-INF/lib目录中加入IK分词器的jar包 在/opt/solr-7.7.1/serve ...
- Windows7_64位 NVIDIA 卡 OpenCl环境配置
序 最近做一个项目需要用到OpenCL,由于之前没有接触过,所以在环境配置第一关就遇到了一些问题,查阅很多资料才配置完成,现在记录如下,希望给一些童鞋一些帮助. 整个步骤也很简单: 了解系统配置,选择 ...
- Gym - 100781G Goblin Garden Guards (扫描线)
题意: n 只哥布林,每只哥布林都有一个位置坐标. m 个炮台,每个炮台都有一个位置坐标和一个攻击半径. 如果一个哥布林在任何一个炮台的攻击范围内,都会被杀死. 求最后没有被杀死的哥布林的数量. 这题 ...
- 制作iso文件
genisoimage -o fusionstor-yi-2017-03-08.iso(镜像名称) -v -cache-inodes -joliet-long -R -J -T -V ZS -c ...