border-box是css3的一个新属性,使用这个属性,和以往的content-box比起来,会有诸多便利之处,bootstrap3也使用的是这个border-box,甚至很多人认为,border-box才是我们真正所需要的盒模型。或许,这也是W3C为何加入这个属性的原因之一吧。

border-box与content-box有什么不同?我们先来demo一下,一探究竟。

#box1{
box-sizing: border-box;
width: 200px;
height: 150px;
padding: 10px;
border: 4px dashed orange;
background-color: gray;
margin-bottom: 20px;
}
#box2{
box-sizing: content-box;/*其实也可以不写这句,因为默认为content-box*/
width: 200px;
height: 150px;
padding: 10px;
border: 4px dashed orange;
background-color: gray;
}

ok.来看一下效果:



嗯,这就是border-box;w3schools中对这个属性的描述:



使用这个属性,再也不会因为修改border和padding而使修改布局大动干戈了。

最佳化实践

接下来就是如何在项目中使用这个属性了。借用一篇博客,http://www.paulirish.com/2012/box-sizing-border-box-ftw/

这篇博客中描述了如何更好的使用这个属性。在此之前,我都是这样用的:

/*更改盒模型为border-box*/
*, *:before, *:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}

嗯,或许你也是这样用的。* 选择器效率也不错,只要你不这样使用 .foo > * 。看了这篇文章过后我才发现,特么的原来我这样使用是有问题的。因为我强制全局所有的使用这个规范,这导致对组件十分不友好!

看看前辈是如何使用:

/* apply a natural box layout model to all elements, but allowing components to change */
html {
box-sizing: border-box;
}
*, *:before, *:after {
box-sizing: inherit;
}

不错,使用了继承!而且没有使用浏览器前缀!因为现代浏览器,IE8+都是支持这个属性的。在不需要做兼容时,这里也就是IE8及其以上时,去掉前缀吧, 使用inherit吧。

inherit的IE6 IE7 IE8(Q) 不支持 CSS 特性的 'inherit' 值及 IE8(S) Opera 对此特性值的支持缺陷 http://www.w3help.org/zh-cn/causes/RA8001

给出一张兼容性的图片,也可以直接访问html5please.com



IE67我们使用那个.htc文件,最好使用IE条件注释来引入,毕竟15k的大小呢(不建议让无辜的现代浏览器用户来为这15k买单)。


<!--[if lte IE7]>
<link rel="stylesheet" href="css/ie--box-border.css">
<![endif]-->
* {
behavior: url(css/boxsizing.htc);
}
*, *:before, *:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}

由于inherit属性在IE6、7以及IE8的混杂模式下是不被支持的,所以又回到了从前。

嗯,就这样,兼容IE6+了,就算在中国这么严峻的形势下,也可happy的使用了。

反思

不假思索,不加思考的就这样用了border-box真的好么?border-box不会破坏本层级的布局,但是当我们改变一个盒子的表现时,我们会发现,所有的嵌套元素发生了一些改变,尽管我们并没有对嵌套元素做什么。这样,可能又会引入一些新的不可预知的问题,或许这些问题会导致布局比以往变得更加复杂!

到底该使用哪个?君请随意,适合自己的永远是最好的!

也说border-box盒模型的更多相关文章

  1. 深入理解CSS盒模型

    如果你在面试的时候面试官让你谈谈对盒模型的理解,你是不是不知从何谈起.这种看似简单的题其实是最不好答的. 下面本文章将会从以下几个方面谈谈盒模型. 基本概念:标准模型 和IE模型 CSS如何设置这两种 ...

  2. 浅谈CSS3 box-sizing 属性 有趣的盒模型

    盒模型的组成大家肯定都懂,由里向外content,padding,border,margin. 盒模型是有两种标准的,一个是标准模型,一个是IE模型. 从上面两图不难看出在标准模型中,盒模型的宽高只是 ...

  3. 深入理解CSS盒模型(转)

    转自:https://www.cnblogs.com/chengzp/p/cssbox.html 基本概念 盒模型的组成大家肯定都懂,由里向外content,padding,border,margin ...

  4. 深入理解CSS盒模型【转载】

    下面本文章将会从以下几个方面谈谈盒模型. 基本概念:标准模型 和IE模型 CSS如何设置这两种模型 JS如何设置获取盒模型对应的宽和高 实例题(根据盒模型解释边距重叠) BFC(边距重叠解决方案) 基 ...

  5. CSS3盒模型温故

    CSS有一种基础设计模式叫盒模型,定义了Web页面中的元素是如何看做盒子来解析的.每一个盒子有不同的展示界面,下面就来介绍盒模型,主要有一下几种盒模型:inline.inline-block.bloc ...

  6. HTML与盒模型

    EC前端 - HTML教程 HTML与盒模型 HTML结构 <!doctype html> <html> <head> <meta charset=" ...

  7. IE盒模型和标准盒模型

    标准盒模型和ie盒模型(怪异盒模型) w3c标准盒模型 width和height不包括padding和border ie盒模型 width和height包含padding和border ie8以上都是 ...

  8. 关于盒模型的外边距padding和内边距margin

    边框border属性值  solid实线   dashed虚线   dotted点线   double双实线 /* 内边距 */padding:20px 30px 30px 30px;若有四个值代表  ...

  9. CSS3盒模型display:box;box-flex:3;

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  10. CSS3.0盒模型display:box;的使用

    CSS3.0盒模型display:-webkit-box;的使用 box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布局应用就是布局的垂 ...

随机推荐

  1. oracle对序列的操作

    select t.*, t.rowid from tbl_type t order by t.id desc Select SEQ_TBL_TYPE_ID.NextVal From Dual; ; ; ...

  2. linux使用getopt解析参数

    getopt是linux下解析命令行参数的api.以linux内核代码的一个例子来说明:   static void cmdline(int argc, char *argv[]){    int o ...

  3. 普通Jquery的ajax判断重复和formvalidator的ajaxValidator区别

    示例:1.ajax版: $("#txtTitle").blur(function () {                 $.ajax({                     ...

  4. ALV的报表对用户定义格式的控制(ALV I_SAVE)

    很多ALV的报表都需要手动的进行设置格式以使数据看上去更有意义和条理,如果每次进来都重新操作一遍是很烦人的,所以SAP有提供了一个保存格式的功能,保存格式可以是 '缺省设置' 和 '特定用户' 两种 ...

  5. Codeforces Round #326 (Div. 2) B. Duff in Love 分解质因数

    B. Duff in Love Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/588/proble ...

  6. Codeforces Gym 100342C Problem C. Painting Cottages 暴力

    Problem C. Painting CottagesTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1 ...

  7. 转自邓凡平 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第七章 深入理解Wi-Fi P2P部分节选

    本章主要内容: 介绍Wi-Fi P2P相关知识: 介绍Android中WifiP2pService.wpa_supplicant的相关代码. 7.1  概述 承接第6章介绍的WSC,本章将继续介绍Wi ...

  8. centos6.x已经安装的系统添加图形界面

    yum groupinstall "X Window System" yum groupinstall GNOME Desktop Environment

  9. cocos2d-x 资源路径研究

    调用cc.FileUtils:getInstance():addSearchResolutionsOrder("src"); 加入�一个搜索路径,就能够直接载入src文件夹下的资源 ...

  10. iOS开发——语法篇&swift经典语法总结

    swift经典语法总结 1:函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如果有参数和返回值直接写在两个括号里就可以了 1.2 参数需 ...