深入理解CSS系列(一):理解CSS的盒子模型

接触前端也有好几个年头了,但是,讲实话,对于CSS的理解真的是不敢恭维,相信很多同行也有类似的感受吧!这是为什么呢?因为我们都认为CSS太简单了,没有必要深入学习,果真如此?其实,只不过是自己图样图森破罢了。如果真的那么简单,为什么经常会遇到一些奇怪的样式问题,而要折腾好长时间呢?就是因为无从下手,终究还是基础不扎实啊!最近打算深入的学习一下CSS,以便遇到问题时,才知道如何下手,从而迅速的对症下药。“深入理解”只是相对于我个人而言的哈,如果有大神觉得不够深入,请不喜勿喷。这是深入理解CSS的第一篇,主要介绍CSS的盒子模型

什么是盒子模型

说起盒子模型,作为前端开发的我们,相信大家都有了解过的 。这里套用mdn官网的解释:

在一个文档中,每个元素都被表示为一个矩形的盒子。确定这些盒子的尺寸, 属性 --- 像它的颜色,背景,边框方面 --- 和位置是渲染引擎的目标。

CSS中,使用标准盒模型描述这些矩形盒子中的每一个。这个模型描述了元素所占空间的内容。每个盒子有四个边:外边距边, 边框边, 内填充边与内容边。

官方语言总是那么的晦涩难懂,那我接用chrome的控制台的截图来说明吧:

最外面橙色的就是外边距区域(margin area ),往里黄色的是边框区域(border area),再往里的绿色的是内边距区域(padding area ),最里面绿色的就是内容区域(content area)了。

盒子模型的作用

好吧,盒子模型的概念好像没有什么好说的,就上面那张图片罢了。下面一起来看看盒子模型对我们布局有什么影响。举个栗子,假如想设置一个元素的大小为200px,如果写了如下的代码:

<style>
  .box {
    width: 200px;
    height: 100px;
    padding: 20px;
  }
</style>
<div class="box">
  盒子模型
</div>

结果,你在审查元素时,发现这个元素的大小变成了240px,而不是200px了。

这是为什么呢?因为默认情况下,设置widthheight 等作用对象是内容区域,所以设置的width: 200px仅仅是内容区域的宽度,加上左右内边距大小,导致了元素的整体尺寸变大了。这和我们对现实世界的中盒子的认识有差异的。比如,你我们说房子的面积,并不单单指可用面积,还要包括墙壁厚度、阳台、电梯之类的空间的。

盒子模型和box-sizing

为了把CSS和现实世界对应起来,这时候box-sizing就要用上场了。box-sizing是用来设置widthheight的作用对象的。有三个值,分别是content-boxpaading-boxborder-box, 默认值是content-box。可能有人会问,为什么没有margin-box啊?具体原因就不知道了,可以参考张鑫旭老师在《CSS世界》一书中提到了两个原因:

  • margin-box本身没有多大的价值
  • margin的规范会冲突。因为margin规范写着“ margin的背景永远是透明的 ”,如果来个margin-box,那background怎么办?

至于为什么没有margin-box就简单的提一下,有兴趣的朋友可以自己去查一下。

最佳实践

为了布局上的方便,一些专家建议我们将所有的元素都设置为box-sizing: border-box,具体原因可以参考这篇文章: International box-sizing Awareness Day

如果不考虑低版本浏览器的话,可以用下面的代码:

*,
*:before,
*:after {
  box-sizing: border-box;
}

后来,又有专家建议用的继承的方法,如下:

html {
  box-sizing: border-box;
}

*,
*::before,
*::after {
  box-sizing: inherit;
}

这种方法被称为最佳实践,具体原因就不说了,参考这里:Inheriting box-sizing Probably Slightly Better Best-Practice# Inheriting box-sizing Probably Slightly Better Best-Practice

既然是专家推荐 ,那我们以后可以把第二种方法的段代码放到reset.css里面的。

好吧,先写这么多了,太久没有撸字,感觉写一个字也很痛苦呀。

这是深入理解CSS的第一篇,讲真,我自己也承认写得一点也不深入,这也不能怪我呢,因为太久没有写过博文,真的很难静心来好好写,那就以个简单的知识点作为开头吧。

有问题的欢迎在讨论区交流哈~

原文地址:https://www.cnblogs.com/yugege/p/9260563.html

时间: 2024-07-31 03:27:16

深入理解CSS系列(一):理解CSS的盒子模型的相关文章

我给女朋友讲编程CSS系列(1) –添加CSS样式的3种方式及样式表的优先权

如果说,原生态就是美,那么,我们就没有必要穿衣打扮. 网页是什么? 说白了,网页就是一堆[html标签]有序的搭配,让[CSS属性值]整整容,请[Javascript语言]处理一下事件. 一个人的整容效果,很大程度上取决于Ta本人,也就是原材料,对网页来说,原材料就是html标签,因此设计优秀的html标签结构十分重要. 整容医生的作用也至关重要,割双眼皮,整容医生的基本功,不同医生割出来的效果不同. 作为一个网页设计师,我们是不是应该追求完美,尽最大努力,让网页漂亮一些. 我知道,我们往往自称

CSS基础学习十五:盒子模型补充之外边距合并

今天继续接着CSS盒子模型补充,CSS基础学习十三:盒子模型和CSS基础学习十四:盒子模型补充之display属 性设置都是介绍了盒子模型中的内容概括.开始今天的主题:外边距合并. 外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合 并的外边距的高度中的较大者. (1)外边距合并 外边距合并叠加是一个相当简单的概念.但是,在实践中对网页进行布局时,它会造成许多混淆.简单地说,外 边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的

CSS中的间距设置与盒子模型

CSS间距 内补白 外补白 盒子模型 CSS间距 很多时候我们为了美观,需要对内容进行留白设置,这时候就需要设置间距了. 内补白 设置元素的内间距 padding: 检索或设置对象四边的内部边距 padding:10px; 上下及两边设置 padding:5px 10px; 由上边界开始,顺时针设置 padding:10px 20px 30px 40px 单边设置 padding-top: 检索或设置对象顶边的内部边距 padding-right: 检索或设置对象右边的内部边距 padding-

css知多少(7)——盒子模型

1. 引言 从这一节开始,我们就进入本系列的第三部分--css呈现.本部分将描述css在页面的几种布局和呈现的特性.包括两类:文字.块. 第一类--文字.这部分相对比较简单一些,例如设置字号.字体.颜色.背景色.是否加粗等.重点的地方在于设置字体.设置行高.文字相关的距离都用相对值,这些东西在<css知多少(4)--解读浏览器默认样式>那一节已经说过了.另外还有一个重点,就是web端最流行的字体库fontAwesome,关于它我之前有一篇文章专门讲过,请参见<请用fontAwesome代

CSS box-flex属性,然后弹性盒子模型简介

一.here we go 看到大神写的关于box-flex的介绍,忍不住收了,大神介绍的很详细,新技能get! 二.box-flex属性(和谐版) 有道桌面词典显示,"flex"一词中文有"收缩"之意.不过,从此属性实际上产生的效果来看,无论怎样用"收缩"一词解释都显得很牵强.所以,这 里,直接抛开字面意思,我们可以将"box-flex"理解为"房子-分配".box为"盒子"的意思,我们

CSS基础学习十四:盒子模型补充之display属性设置

我在CSS基础学习十三:盒子模型的i博文只是阐释了CSS盒子模型,并没有过多的使用实例来演示.这篇博文 就来做一些盒子模型知识的补充.这一部分对于网页总体布局还是蛮重要的,过去大多数使用HTML中的table元素和 框架标签来进行网页的整体布局,现在我们使用最多的是DIV+CSS网页布局.所以一定要掌握好盒子模型,记住 content,border,padding和margin各自在盒子中的作用和使用方式. 先来看一个完整元素的盒子模型实例: <!DOCTYPE html PUBLIC "

深入理解JavaScript系列+ 深入理解javascript之执行上下文

http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html http://blog.csdn.net/hi_kevin/article/details/37761919    深入理解javascript之执行上下文(execution context)

第七天-css基础(行高,盒子模型,边距)

摘要: 基础知识-css第七天,昨天因为同学的婚礼,所以没有整理,今天继续,今天是css基础的最后一天,知识点不多也不难,主要是后期多练习,巩固前面学习的知识.还有2个案例的时候视频,下周学习.下周也要开启js基础的模式,敬请期待吧-- line-height 行高 行高是基线与基线的距离(浏览器默认字体16px) 行高=文字高度+上下边距 单行文字垂直居中 设置容器高度和line-height值相等 多行文字垂直居中 1.高度固定容器:自己设置上下padding值相等就ok了 2.高度未知容器

CSS学习笔记(float和盒子模型)

1.当元素或者是它的包裹层设置了绝对定位或者是浮动,那么margin:0 auto;自动居中的效果就不会实现. 2.盒子模型的三位立体结构图中从第一层到第五层依次为:border.content+padding.background-image.background-color.margin. 3. 设置了浮动属性(float)的元素: 1.会向指定方向(left或right)一直移动,直到容器边缘: 2.处于标准文档流中: 3.若不设置宽高,则以内容的宽高为准: 4.仅对紧邻的后续元素造成影响

2015年7月9日 CSS第二课(浮动、盒子模型、绝对定位和相对定位)

list-style-type:none是指不显示项目符号 1.块级元素的特点:       常用的块级元素有:body,ul li,ol li,h1-6,div,hr,p,table……等 (1)块级元素里面的内容,或者背景图片,默认显示在块的左上角 (2)块级元素,默认情况下,单独占满一行. 常用的块级元素:div.p.h1-h6.hr.ul li.ol li.table.body... 2.浮动:float 作用:通过漂浮,让块级元素实现并排 float:left 或 right 注意:如