box-sizing属性是CSS3中引入的,有人解释为它可以指定用width属性与height属性分别指定的宽度值与高度值是否包含元素内部的补白区域,以及边框的宽度与高度。这句话有点绕,我理解为它是一种容器高宽的计算方法,具体是怎样的一种计算方法,和传统的计算方法又有什么区别,通过下面的例子我们可以很直观的了解到。
举例说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <!DOCTYPE html> <html> <head> <meta charset= "utf-8" > <title>box-sizing</title> <style type= "text/css" > div{ width : 50px ; height : 50px ; margin : 10px ; padding : 10px ; border : 10px solid #888 ; } #bs{ box-sizing: border-box; } </style> </head> <body> <div></div> <div id= "bs" ></div> </body> </html> |
运行结果:
从上图可以看出两者大小的区别非常明显,我们可以借助浏览器来查看两者是如何计算的。
上图这种是传统的计算方法,也就是上面第一个div的大小。
可以看出实际div的宽度为50+10*2+10*2=90px。因为我们给div指定的高宽是指的内容区的高宽,也就是图1-1中最里面的那个区域。
上图第二个div的实际计算大小,这里div的实际宽度为10+10*2+10*2=50px,这么一计算,我们就很明白了,原来在设置了box-sizing为border-box后,容器的高宽就是实际容器的高宽,而不是单纯指的是内容区的大小。也可以理解为,这时候的高宽计算方式把padding和border大小也算进来了。
box-sizing 属性的可选值如下:
值 | 描述 |
content-box | 默认值,元素的实际宽度或高度等于元素内容区的宽度或高度、内边距和边框的和。 |
border-box | 在元素的内容区内绘制内边距或边框,内边距或边框不会影响元素的实际宽度或高度。 |
inherit | 从父元素继承 box-sizing 属性的值。 |
【示例】下面通过一个示例来演示 box-sizing 属性的使用:
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 | <!DOCTYPE html> < html > < head > < style > div { width: 300px; height: 50px; margin-top: 5px; border: 10px solid red; padding: 5px; } .two { box-sizing: content-box; } .three { box-sizing: border-box; } </ style > </ head > < body > < div class = "one" >默认情况</ div > < div class = "two" >content-box</ div > < div class = "three" >border-box</ div > </ body > </ html > |
运行结果:
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程