box-sizing 盒子模型

1,197 阅读3分钟

image.png

1. 前言

CSS的盒模型是CSS的基础,同时也是难点,这个问题经常在面试中会被问到,属于经典问题了。很多博客里讲得也很模糊不清,于是,我在这里重新整理一下。

可以认为每个html标签都是一个方块,然后这个方块又包着几个小方块,如同盒子一层层的包裹着,这就是所谓的盒模型。

2. box-sizing 的定义和语法

  • box-sizing 定义了某个元素以特定的方式去计算自身的总宽度和总高度 在CSS盒模型中,浏览器默认定义了元素为标准盒模型,对元素设置的 widthheight 会应用到元素内容区域。
    如果这个元素有任何的 borderpadding ,都将为该元素加上设置的 borderpadding ,这意味着当你调整一个元素的内容区域时,需要时刻注意该元素的边框和内边距

box-sizing 属性通过以下值进行调整:

  • content-box:标准盒模型(默认值)
box-sizing: content-box;
width = content width
height = content height

元素的大小,会随着borderpadding的变化进行绘制
  • border-box:IE盒模型
box-sizing: border-box;
width = content width + border + padding
height = content height + border + padding

元素的content,包含了 borderpadding
content的大小会随着borderpadding的增大减小

注:元素的大小包括:边距边框填充,和内容

3.box-sizing 使用场景

1.在form表单上的使用

image.png 在原生HTML标签中,元素会带有自身样式。
其中 input 都设置 widht: 100%,发现type为submit属性的 input 自身添加了 box-sizing: border-box;
该input与其他box-sizing的属性值不一样,导致元素宽度的不一致

2. 在div嵌套中使用

image.png 以上是 div 中包裹的 3个div,3个div 都添加了 box-sizing: border-box;
因此,只要 div 中的 padding 和 border 总宽度 或 总长度 不超过本身 div 的长度和宽度,就不会超出最大的div

image.png 一旦设置某个 div 的属性为 box-sizing: content-box;
此 div 的总高度则会加上 padding 以及 border,便会超出最大的 div

注:padding 和 border 都属于元素本身,不管是设置 content-box,还是 border-box
关于元素本身的事件都可以与之触发

结语

最后,对于新的web站点,你可能希望首先将box-sizing设置为border-box,如下所示:

* { box-sizing: border-box; }

这使得处理元素大小的工作变得容易得多,并且通常消除了在布局内容时可能遇到的许多陷阱。然而,在某些情况下,你应谨慎使用这个属性。例如: 你正在编写一个将由其他人使用的共享组件库,如果他们网站的其余部分没有设置此值,他们可能会发现很难使用你的组件库。

感谢

谢谢你读完本篇文章,希望对你能有所帮助,如有问题欢迎指正。

我是瑾江,如果觉得写得可以的话,请点个赞吧。

「点赞」+「在看」+「转发」 谢谢支持

往期好文

《Vue3+Ts+Element-PLus后台管理系统》

《GitHook 工具 —— husky(格式化代码)》

《浏览器线程-事件循环(Event Loop)》

《JavaScript事件委托》