CSS3中的box-sizing属性

智码涟漪
• 阅读 2759

CSS3中的box-sizing属性

box-sizing属性是css3中新添加的属性,用来替换原来的css盒子模型,box-sizing属性值的不同,元素的高度和宽度的计算方法也不同。

/* box-sizing的三个属性值,我们只针对前两个说明 */
box-sizing: content-box;
box-sizing: border-box;
box-sizing: padding-box;

在默认情况下,设置的widthheight属性都是指元素内容(content box)的高度和宽度,如果这个元素设置了borderpadding的话,那么整个元素的高度和宽度就是:

totalWidth = border-left + padding-left + width + padding-right + border-right
totalHeight = border-top + padding-top + height + padding-bottom + border-bottom

所以,这个在做相应式设计的时候还是比较复杂的,现在,有了box-sizing属性,就可以根据不同的属性值计算元素的高度和宽度。

  • content-box:这是默认情况,根据这个属性值的名字也能大概猜出会是什么情况,整个元素的高度和宽度其实就是上面的两个公式
  • border-box:这种情况下,你设置的widthheight属性值就是针对整个元素,包括了border,padding,和元素内容。

简单的例子

CSS
    .box {
        width: 150px;
        height: 150px;
        padding: 50px;
        border: 5px solid blue;
        background-color: orange;
    }
    .box1 {
        box-sizing: content-box;
    }
    .box2 {
        box-sizing: border-box;
    }
HTML
<div class="box box1">
    content-box
</div>
<div class="box box2">
    border-box
</div>

代码中,我们对两个div设置了相同的height、width、border和padding,可是现实效果却完全不同:

CSS3中的box-sizing属性

我们仔细分析下,两个div不同的地方在于box-sizing属性,第一个是content-box,第二个是border-box,针对第一个div,

CSS3中的box-sizing属性

CSS3中的box-sizing属性

我们发现,整个元素的高度和宽度是260x260,而元素的内容的高度和宽度是150x150,正好是我们想要的,对于260这个大小是怎么来的,我们不妨计算一下:

5+50+150+50+5=260  // 高度
5+50+150+50+5=260  // 宽度

正好是260,符合最上面的两个公式,所以最后元素的尺寸是260x260,并不是我们设置的150x150

对于第二个div:

CSS3中的box-sizing属性

CSS3中的box-sizing属性

很明显可以看到,第二个div里面的内容已经被挤了换行了,这个div的真实的高度和宽度和我们设置的一样,可以它的内容部分的尺寸只有40x40,远小于150,可以看到,这就是content-boxborder-box的区别了,再来计算一下:

150 = 5+50+40+50+5 // 高度
150 = 5+50+40+50+5 // 宽度

可知,整个元素的高度其实是包括了border、padding和内容的高度,宽度也是如此。

浏览器的兼容性

  • 桌面端
    CSS3中的box-sizing属性
  • 手机端
    CSS3中的box-sizing属性

可以看到,不管是手机端还是桌面端大部分都是不支持padding-box的,所以建议实际开发中避免使用padding-box

跟多详细内容请参考:https://developer.mozilla.org...

点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
秃头王路飞 秃头王路飞
3年前
总结前端元素的各种高度(上)
HTMLElement.clientHeight只读属性Element.clientHeight对于没有定义CSS或者内联布局盒子的元素为0;否则,它是元素内部的高度(以像素为单位),包含内边距,但不包括边框、外边距和水平
九路 九路
5年前
一篇文章带你了解CSS 渐变知识
CSS3渐变使您能够是你的背景颜色在两个或多个颜色之间平滑过渡。早些时候,你必须使用图像实现这些效果。然而,通过使用CSS3渐变可以减少下载时间和带宽的使用.此外,缩放的元素在缩放时看起来更好,因为渐变是由浏览器生成的。一、浏览器支持表中的数字指定完全支持该属性的第一个浏览器版本。(来源于百度)数字后面的w
菜园前端 菜园前端
2年前
你真的了解的CSS3盒模型和CSS3特性知识吗
原文链接:什么是CSS3?CSS3是CSS一个新的标准,直接理解为是CSS的升级版,里面新增了很多样式(特性)。CSS3盒子模型:::warningCSS3盒子模型必须要掌握,否则你在实际开发中遇到样式错乱很难排查问题。:::旧版的IE浏览器与其它浏览器解
Python进阶者 Python进阶者
4年前
手把手教你使用CSS3为文本和元素实现添加阴影效果
使用CSS3,你可以为文本和元素添加阴影。一、浏览器支持表中的数字指定完全支持该属性的第一个浏览器版本。数字后面的webkit或者moz使用时需要指定前缀。|属性|Chrome|Firefox|Safari|Opera|IE|||||||||text
Wesley13 Wesley13
4年前
CSS扩展语言
CSS没有变量?不要诬蔑我们大CSS好不?就像ES一样,你说JS没有模块,ES6给你整一个出来,而在这之前就已经有相关的库出来了。CSS也一样,你说CSS没有变量,CSS3就给你一个var(),变量你值得拥有!//语法//<customprepertyname自定义属性名//<declarationvalue
Stella981 Stella981
4年前
JavaScript Prototype
定义和用法prototype属性使您有能力向对象添加属性和方法。实例在本例中,将展示如何使用prototype属性来向对象添加属性:<scripttype"text/javascript"functionemployee(name,job,born){this.n
Wesley13 Wesley13
4年前
CSS实现背景色渐变
一、使用CSS3属性/ for firefox /backgroundimage: mozlineargradient(top,fefefe,ebebeb);/ for webkit core /backgroundimage: webkitgradient(linear,0 0,0 100
Wesley13 Wesley13
4年前
HTML其他概念
(一)WEB初识【1】浏览器五大主流浏览器开发团队或浏览器内核简称CSS3特定属性(新属性加前缀)Chromewebkit\webkittransformSafariwebkitIEmsFirefoxmozOperao浏览器内核(渲染内核和js内核,前者渲染代码,计算显示方式,进而读取
Wesley13 Wesley13
4年前
CSS3 文本效果
CSS3文本效果CSS3中包含几个新的文本特征。在本章中您将了解以下文本属性:textshadowwordwrap浏览器支持!(http://static.oschina.net/uploads/space/2016/0123/124344_Ps
Stella981 Stella981
4年前
CSS 分类 (Classification)
★★CSS分类属性(Classification)★★⑴CSS分类属性允许你控制如何显示元素,设置图像显示于另一元素中的何处,相对于其正常位置来定位元素,使用绝对值来定位元素,以及元素的可见度。⑵下面是常用的属性以及描述:!(https://oscimg.oschina.net/oscnet/00cb565