css 盒子模型详解

简介: css 盒子模型详解

目录


box-sizing盒子模型

content-box

border-box

盒子水平方向的布局

margin-right会自动调整

margin-right设置auto或定值

magin-left设置定值

设置magin-left为auto

同时设置magin-left和magin-right为auto

同时设置width、magin-left和magin-right为auto

水平布局总结


box-sizing盒子模型



box-sizing就是用于设置div的盒子模型的。


默认为content-box,还有一个常见设置为border-box。


content-box



默认的盒子模型是什么样的呢?


盒子主要由三部分(内容区,内边距padding,边框border)组成。


在默认的盒子下我们设置的width只是内容区的部分。


我们试试,先设置一个盒子width为100px,再给它一个边框为20px,padding也为20px。

<style>
  #box {
    width: 100px;
    height: 100px;
    padding: 20px;
    border: 20px lightblue solid;
    background-color: aqua;
  }
</style>
<body>
  <div id="box"></div>
</body>

我们可以鼠标选中发现整个盒子我们只是设置了内容区width为100px。

整个盒子实际上占据了水平方向上的180px。获取这个宽度的方式是offsetWidth,这才是真正盒子的可视宽度。

image.png

我们想要真正宽100px的盒子,可能得设置width为20px。

<style>
  #box {
    width: 20px;
    height: 20px;
    padding: 20px;
    border: 20px lightblue solid;
    background-color: aqua;
  }
</style>

image.png

border-box


我们意识到每次得去计算width的值过于麻烦了,我们就不能直接让盒子固定为100px吗。

border-box就可以将width作为盒子真正占据宽度,内容区将会帮我们自动计算。

<style>
  #box {
    width: 100px;
    height: 100px;
    padding: 20px;
    border: 20px lightblue solid;
    background-color: aqua;
    box-sizing: border-box;
  }
</style>

我们设置的width为100px,此时指的就不是内容区了,指的应该是内容区+padding+border,而这个值此时与offsetWidth相等。

它会自动调整内容区的宽,达到内容区与padding和border相加后为100px。

image.png

要注意计算出来的内容区最小为0,也就是这个盒子会被padding和border限制了大小,就算将width设置为50px,盒子最小也会占据80px


盒子水平方向的布局



学会盒子模型了,对于内容区、padding、border的控制,想必你已经可以拿捏了,但是一个盒子布局时,还存在一个属性会对它的布局产生影响,就是margin。


我们拿盒子水平方向的布局说,水平方向上,它的占据宽度如下。


margin-left+border-left+padding-left+内容区(默认盒子模型就是width)+padding-right+border-right+margin-right = 父元素的内容区宽度

<style>
  #outer {
    width: 500px;
    height: 100px;
    background-color: red;
  }
  #box {
    width: 100px;
    height: 100px;
    background-color: aqua;
  }
</style>
<body>
  <div id="outer">
    <div id="box"></div>
  </div>
</body>

如果我们不设置width,width的默认值是auto,所以0+0+0+auto+0+0+0=500,width会自动调整成500,占据整个父级的内容区宽度。


但是我们这里设置了width为定值100px,0+0+0+100+0+0+0=500,我们可以看到等式不成立,咋整?


margin-right会自动调整



等式不成立,浏览器会自动调整margin-right的值为400使等式成立。


这也正是块级元素即便设置了width没有达到父级内容区宽度仍然占据一行的原因。


虽然计算样式上没有标出来,但是dom上的颜色区域会告诉你占据了400px。

image.png

margin-right设置auto或定值



我们可以将margin-right设置为auto,会发现效果是一样的,只不过是把值标出来在计算样式上,给你了。


实际中,如果width固定了,margin-right虽然没有设置auto仍然会自动调整,此时我们可以将默认的margin-right看作auto,这样方便理解,注意只能看作,除非你真的设置了auto

image.png

就算将它设置为定值,它也会被调整。

可以看到我设置margin-right为20px,计算样式显示20px,可是在dom上显示的区域仍然是400。

image.png

magin-left设置定值


如果我们设置margin-left为定值20px,同样还是会去调整margin-right使等式成立。

image.png

设置magin-left为auto



终于,当我们设置magin-left为auto之后,调整的活给了magin-left。


因为magin-right只是没人干调整的活的时候才出手的,它默认值是0并不是auto。


当设置magin-left为auto,等式成为auto+0+0+100+0+0+0=500.

image.png

同时设置magin-left和magin-right为auto


这时,两个人同时调整,活就被平摊了,一边调整一半,会发现居中了!

这也就是为啥 margin: 0 auto 可以设置水平居中的原因。

image.png

同时设置width、magin-left和magin-right为auto



width的优先级还是高一些,如果设置了,就会自动magin-left和magin-right的auto就自动忽略不计,全都为0,width会自动调整占满内容区。


注意,以上都是在padding、border为0的基础上,如果padding、border有值的话注意在等式中的计算要考虑它们。


水平布局总结



margin-left+border-left+padding-left+内容区(默认盒子模型就是width)+padding-right+border-right+margin-right = 父元素的内容区宽度。

width设置auto的话会调整width使等式成立。

如果没有任何一个值为auto,则自动调整margin-right使等式成立。

margin-left也可以设置auto被作为等式成立的调整依据。

同时设置magin-left和magin-right为auto,会一边占据一半的调整宽度。

同时设置width、magin-left和magin-right为auto,magin-left和magin-right将变为0,只有width被作为等式成立的调整依据。


相关文章
|
27天前
|
前端开发
如何设置 CSS 盒子模型的边框样式?
CSS盒子模型的边框样式可以通过`border`属性设置,包括边框宽度、样式和颜色。例如:`border: 2px solid red;` 设置了2像素宽的红色实线边框。也可分别设置四边,如`border-top`、`border-right`等。
|
27天前
|
前端开发 开发者
css两种盒子模型
在CSS中,有两种盒子模型:标准盒子模型和IE盒子模型(怪异盒子模型)。标准盒子模型中,`width`和`height`仅指内容区的尺寸,总宽度和高度还包括内边距、边框和外边距。IE盒子模型中,`width`和`height`包括内容区、内边距和边框,总宽度和高度仅加外边距。通过`box-sizing`属性可以切换这两种模型,`box-sizing: content-box;`表示标准盒子模型,`box-sizing: border-box;`表示IE盒子模型。
|
27天前
|
前端开发 容器
给 CSS 盒子模型添加边框时,需要注意什么?
在给CSS盒子模型添加边框时,需要注意边框的宽度、样式和颜色,以及它如何影响盒子的总尺寸和布局。边框会增加盒子的总宽度和高度,可能需要调整其他属性以保持布局的完整性。
|
2月前
|
前端开发
CSS属性:盒子模型
CSS属性:盒子模型
33 0
|
8天前
|
前端开发
CSS 盒子模型
CSS 盒子模型
18 4
|
1月前
|
前端开发
彻底搞懂css盒子模型
【10月更文挑战第1天】
54 9
|
3月前
|
前端开发 开发者
【前端大揭秘】CSS盒子模型的爱恨情仇:一场关于标准与IE模型的精彩对决!
【8月更文挑战第26天】本文深入探讨CSS中的两大盒子模型——标准盒模型与IE盒模型。通过理论解析与实例代码,清晰展示了两种模型下元素尺寸的构成方式及其应用场景。标准盒模型适合精确控制内容区尺寸,而IE盒模型在处理固定宽度元素时更为直观。掌握这些知识将帮助前端开发者在实际项目中做出更优的设计决策,提升网页布局的质量与美观性。
34 1
|
3月前
|
前端开发
HTML+CSS基础知识(2)选择器的使用、盒子模型的讲解、列表的使用
该博客文章详细介绍了HTML和CSS的基础知识,包括CSS样式的应用方式、语法规则、选择器的使用、盒子模型、内边距、外边距、元素的显示类型以及overflow属性处理溢出内容的方法,并通过代码示例和测试结果截图展示了这些知识点在网页设计中的应用。
HTML+CSS基础知识(2)选择器的使用、盒子模型的讲解、列表的使用
|
5月前
|
前端开发 开发者
CSS盒子模型(如果想知道CSS有关盒子模型的知识点,那么只看这一篇就足够了!)
CSS盒子模型(如果想知道CSS有关盒子模型的知识点,那么只看这一篇就足够了!)
|
4月前
|
前端开发
CSS:盒子模型
CSS:盒子模型