CSS宽度分离与box-sizing

10 篇文章 0 订阅

CSS宽度分离与box-sizing

本文章分为box-sizing和宽度分离两部分。熟悉box-sizing属性的童鞋可以直接空降到第二部分。

引言

估计大部分初入CSS的童鞋们或许会遇到一个莫名其妙的问题,当给盒子加了border或者padding之后盒子的width跟height是不是变大了? 其实这个时候问题就在于boxSizing。

第一部分

理解盒模型的朋友应该知道,一个盒子分为content-box,padding-box,border-box,margin-box(官方从来没有把margin-box计入css属性值里,所以这个可以不管)
在这里插入图片描述
而CSS属性里也正好有调整boxSizing的属性——box-sizing,它有三个值

  • content-box(默认值)
  • border-box
  • inherit(这个估计大家都懂)

当值为border-box时,总宽度 = width = 左右border + 左右padding + content,这时不管怎么设置border和padding,盒子的width都不会变,只有里面的content做自适应调整,垂直方向上的height同理。
在这里插入图片描述
当值为content-box时,总宽度 = 左右border + 左右padding + width,这就是文章开头提到的为什么盒子会变大的原因。其实box-sizing这个属性你可以这样理解: “让宽高作用于哪一层盒子”,前面提到一个盒子其实嵌套了四层盒子,宽高(width & height)作用于内容盒(content-box)还是边框盒(border-box),浏览器对总宽高的解析结果都不一样。
在这里插入图片描述

第二部分

现在我们讲讲不用box-sizing也能实现和border-box同样效果的“宽度分离大法”。
也就是当box-sizing为默认值时,怎么实现width = 总宽度,content自适应调整?
所谓宽度分离,就是把给盒子再外套一层盒子,在外层盒子单独设置宽高,或者说把原本属于内层盒子的宽高拎出来单独放在外层盒子上。结构如下:

<style>
.outer{
	width: 600px;
	height: 400px;
}
.inner{
	border: 5px solid #000;
	padding: 10px;
	/* 当然加上margin,总宽高还是不会变的,因为有外层的outer在束缚 */
}
</style>
<div class="outer">
	<div class="inner"></div>
</div>

点到这里,大家或许已经恍然大悟了。没错!由于外层盒子的宽高已经定下来了所以当内层盒子的border和padding不管怎么变,它们和content的总和都不会超过外层的盒子。从而达到了跟border-box值一样的效果。好了我讲完啦,希望对此类问题有所困惑的朋友们有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值