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. RabbitMQ 学习资料

    https://www.rabbitmq.com/getstarted.html http://www.cnblogs.com/luxiaoxun/p/3918054.html http://back ...

  2. SQL Server 游标的应用

    ----------------SQL游标应用----------------- 今天由于业务需求,需要在存储过程中实现有一个表的主键去匹配在另一个表中作为外键所对应的数值 ,若在C#中则非常简单只需 ...

  3. Python学习笔记5(函数)

    [摘要]本文详细介绍python中的函数,以及与之相关的参数和作用域的概念,并介绍递归的概念以及在程序中的应用. 函数定义 定义函数要用函数定义语句def.如下: def hello(name): r ...

  4. linux centos 下ssh的连接

    参考链接 虚拟机下CentOS7开启SSH连接 记录 我用finalssh连接virtualbox里的centos,发现报出java.net.UnknownHostException 一开始我以为是s ...

  5. python 取余运算

    python中取余运算逻辑如下: 如果a 与d 是整数,d 非零,那么余数 r 满足这样的关系: a = qd + r , q 为整数,且0 ≤ |r| < |d|. 经过测试可发现,pytho ...

  6. py文件转exe时包含paramiko模块出错解决方法

    问题描述:python代码中包含paramiko模块的远程登录ssh,在用pyInstaller转为exe时报错, 报错提示为“No handlers could be found for logge ...

  7. 03009_HttpServletResponse

    1.HttpServletResponse概述 (1)我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和 ...

  8. Android 资源文件local.properties使用以及Gradle文件中的值、Manifests文件中的值

    这篇也是因为Gradle存储密钥问题一路填坑总结的,期初连.properties创建都有疑问 因为当时是在Android下查看新建的properties一直没法看到 因为Gradle Scripts是 ...

  9. 【NOIP2016】愤怒的小鸟 搜索

    题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0)(0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟,小 ...

  10. LiveScript 流程控制、循环以及列表推导式

    The LiveScript Book     The LiveScript Book Generators and Yield 你可以在你的 LiveScript 代码中使用 Ecmascript ...