也说border-box盒模型
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盒模型的更多相关文章
- 深入理解CSS盒模型
如果你在面试的时候面试官让你谈谈对盒模型的理解,你是不是不知从何谈起.这种看似简单的题其实是最不好答的. 下面本文章将会从以下几个方面谈谈盒模型. 基本概念:标准模型 和IE模型 CSS如何设置这两种 ...
- 浅谈CSS3 box-sizing 属性 有趣的盒模型
盒模型的组成大家肯定都懂,由里向外content,padding,border,margin. 盒模型是有两种标准的,一个是标准模型,一个是IE模型. 从上面两图不难看出在标准模型中,盒模型的宽高只是 ...
- 深入理解CSS盒模型(转)
转自:https://www.cnblogs.com/chengzp/p/cssbox.html 基本概念 盒模型的组成大家肯定都懂,由里向外content,padding,border,margin ...
- 深入理解CSS盒模型【转载】
下面本文章将会从以下几个方面谈谈盒模型. 基本概念:标准模型 和IE模型 CSS如何设置这两种模型 JS如何设置获取盒模型对应的宽和高 实例题(根据盒模型解释边距重叠) BFC(边距重叠解决方案) 基 ...
- CSS3盒模型温故
CSS有一种基础设计模式叫盒模型,定义了Web页面中的元素是如何看做盒子来解析的.每一个盒子有不同的展示界面,下面就来介绍盒模型,主要有一下几种盒模型:inline.inline-block.bloc ...
- HTML与盒模型
EC前端 - HTML教程 HTML与盒模型 HTML结构 <!doctype html> <html> <head> <meta charset=" ...
- IE盒模型和标准盒模型
标准盒模型和ie盒模型(怪异盒模型) w3c标准盒模型 width和height不包括padding和border ie盒模型 width和height包含padding和border ie8以上都是 ...
- 关于盒模型的外边距padding和内边距margin
边框border属性值 solid实线 dashed虚线 dotted点线 double双实线 /* 内边距 */padding:20px 30px 30px 30px;若有四个值代表 ...
- CSS3盒模型display:box;box-flex:3;
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- CSS3.0盒模型display:box;的使用
CSS3.0盒模型display:-webkit-box;的使用 box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布局应用就是布局的垂 ...
随机推荐
- InnoDB与MyISAM的区别
MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处 ...
- MES生产日报存储过程
USE [ScreenMonitor]GO/****** Object: StoredProcedure [dbo].[ImportProductForDay] Script Date: 04/11/ ...
- 数据库连接字符串ConnectionString 中的关键字值释义
ConnectionString 类似于 OLE DB 连接字符串,但并不相同.与 OLE DB 或 ADO不同,如果“Persist Security Info ”值设置为false(默认值),则返 ...
- hibernate-mapping的各种属性配置
先给出一份常见的持久化类配置文件大概熟悉一下 <strong><spanstyle="font-size: 18px;"><hibernate-map ...
- iOS开发笔记系列-基础5(分类和协议)
分类 在Objective-C中,除了通过新建子类的方式来向类添加新方法外,还可以通过分类的方式.分类提供了一种简单的方式,将类的定义模块化到相关方法的组或分类中,它还提供了扩展现有类定义的简便方式, ...
- Js Pattern - Namespace Pattern
bad code // BEFORE: 5 globals // Warning: antipattern // constructors function Parent() {} function ...
- Linux设备模型分析之kset(基于3.10.1内核)
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 内核版本:3.10.1 一.kset结构定义 kset结构体定义在include/linux/kobject.h ...
- 使用QQ账号的来发送邮件
第一步,看图操作如下: 打开QQ邮箱,在设置-帐户,然后再看下图示: 把:POP3/SMTP服务,IMAP/SMTP服务,Exchange服务,CardDAV/CalDAV服务都选择上,保存这样,便可 ...
- [AngularJS] New in Angular 1.3 - Performance Boost with debugInfoEnabled
By default, Angular provides a lot of debug information on the DOM that's only necessary for tools l ...
- ios开发——实用技术篇Swift篇&加速计和陀螺仪
加速计和陀螺仪 //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnim ...