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 原理

  1. 在 BFC 的垂直方向上,边距会发生重叠

  2. BFC 区域不会与 浮动区域重叠

  3. BFC 在页面上是一个独立的容器,与其他元素互不影响

  4. 计算 BFC 高度时,浮动元素也会参与计算

如何创建 BFC

  1. float 值不为 none,只要设置了浮动,当前元素就创建了一个 BFC

  2. position值不为static,只要设置了定位,当前元素就创建了一个 BFC

  3. display 值不为默认,只要设置了display,当前元素就创建了一个 BFC

  4. overflow 值不为 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 原理讲解--摘抄的更多相关文章

  1. 十分钟复习CSS盒模型与BFC

    css盒模型与BFC 本文为收集整理总结网上资源 旨在系统复习css盒模型与bfc 节省复习时间 阅读10分钟 什么是盒模型 每一个文档中,每个元素都被表示为一个矩形的盒子,它都会具有内容区.padd ...

  2. css盒模型与bfc与布局与垂直水平居中与css设计模式等

    一.css盒子与布局相关 盒子内部的布局 盒子之间的布局visual formatting 脱离正常流normal flow的盒子的布局 absolute布局上下文下的布局 float布局上下文下的布 ...

  3. 前端面试必备技巧(二)css盒模型及BFC

    CSS盒模型 基本概念:标准模型+IE模型及区别 CSS如何设置这两种模型? JS如何设置获取盒模型对应的宽和高? 实例题(根据盒模型解释边距重叠) BFC边距重叠解决方案 (1)BFC的基本概念:b ...

  4. css盒模型-BFC

    BFC(边距重叠解决方案) 1.BFC的基本概念:块级格式化上下文 2.BFC的原理(说白了就是BFC的渲染规则): 这个规则是什么呢?我觉得大家能说出4点就够了 第一个就是BFC可以解决这个元素的垂 ...

  5. css盒模型:BFC、IFC边距重叠解决方案

    BFC:块级格式化上下文 IFC:行内格式化上下文 实例如下: <div class="out" style="background: red;"> ...

  6. 神奇的盒模型(BFC)

    上一篇我提到每一个元素都有自己的display属性,其属性值可以改变.其改变的方式,可以利用神奇的css盒模型(BFC). 盒模型,是css可视化格式化系统的基础,可以用于元素定位和网页布局.一个盒模 ...

  7. CSS盒模型的深度思考及BFC

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 题目:谈一谈你对CSS盒模型的认识 专业的面试,一定会问 CSS 盒模型 ...

  8. 面试 02-CSS盒模型及BFC

    02-CSS盒模型及BFC #题目:谈一谈你对CSS盒模型的认识 专业的面试,一定会问 CSS 盒模型.对于这个题目,我们要回答一下几个方面: (1)基本概念:content.padding.marg ...

  9. 面试汇总——说一下CSS盒模型

    本文是面试汇总分支——说一下CSS盒模型. 基本概念:W3C标准盒模型和IE盒模型 CSS如何设置这两种模型 JS如何获取盒模型对应的宽和高 根据盒模型解释边距重叠 BFC(边距重叠解决方案) 一. ...

随机推荐

  1. 测试 code style

    c++ #include <iostream> int main(int argc, char *argv[]) { /* An annoying "Hello World&qu ...

  2. NOIP2016 toy

    题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉 ...

  3. Springboot @Autowired 无法注入问题

    特别提醒:一定要注意文件结构 WebappApplication 一定要在包的最外层,否则Spring无法对所有的类进行托管,会造成@Autowired 无法注入. 1. 添加工具类获取在 Sprin ...

  4. vue使用原生js实现滚动页面跟踪导航高亮

    需要使用vue做一个专题页面. 滚动页面指定区域导航高亮. BetterScroll:可能是目前最好用的移动端滚动插件 如何自定义CSS滚动条的样式? 监听滚动页面事件,对比当前页面的位置与元素的位置 ...

  5. 【java】类成员的访问限制关系

  6. HashMap存储原理

    1.    HashMap概述 HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. ...

  7. solr配置中文分词器

    配置IK分词器 在/opt/solr-7.7.1/server/solr-webapp/webapp/WEB-INF/lib目录中加入IK分词器的jar包 在/opt/solr-7.7.1/serve ...

  8. Windows7_64位 NVIDIA 卡 OpenCl环境配置

    序 最近做一个项目需要用到OpenCL,由于之前没有接触过,所以在环境配置第一关就遇到了一些问题,查阅很多资料才配置完成,现在记录如下,希望给一些童鞋一些帮助. 整个步骤也很简单: 了解系统配置,选择 ...

  9. Gym - 100781G Goblin Garden Guards (扫描线)

    题意: n 只哥布林,每只哥布林都有一个位置坐标. m 个炮台,每个炮台都有一个位置坐标和一个攻击半径. 如果一个哥布林在任何一个炮台的攻击范围内,都会被杀死. 求最后没有被杀死的哥布林的数量. 这题 ...

  10. 制作iso文件

     genisoimage -o fusionstor-yi-2017-03-08.iso(镜像名称) -v -cache-inodes -joliet-long -R -J -T -V ZS  -c  ...