精通css 高级web标准解决方案——可视化格式模型-盒模型

1-盒模型的两种标准:

IE :width 和 height属性 是包括padding和border在内的。

w3c:width 和 height 属性,就是单纯的内容的宽高,padding 是内容之外的附加值。

IE标准盒模型 w3c标准盒模型
精通css 高级web标准解决方案——可视化格式模型-盒模型 精通css 高级web标准解决方案——可视化格式模型-盒模型

我发现我以前总是记得有点混乱。现在绝对不会忘记了。box-sizing属性可以定义要使用哪种盒模型

解决这个问题分方法1:不要给元素添加具有指定宽度的内边距,尝试将内边距或者外边距添加到元素的父元素或者子元素。

方法2:待补充??

2-对box-sizing进一步了解:

box-sizing:content-box | border-box  (默认值为:content-box)

不具有继承性,适用于所有可以用属性width 和 height 的元素

content-box:padding和border不被包含在定义的width和height之内。对象的实际宽度等于设置的width值和border、padding之和,即 ( Element width = width + border + padding )此属性表现为标准模式下的盒模型。就是上面的w3c标准的盒模型。

border-box:padding和border被包含在定义的width和height之内。对象的实际宽度就等于设置的width值,即使定义有border和padding也不会改变对象的实际宽度,即 ( Element width = width )此属性表现为怪异模式下的盒模型。 同上面IE 标准的盒模型。

插入一下标准和怪异盒模型的实例代码和盒模型:

标准 怪异
.test1{
box-sizing:content-box;
width:200px;
padding:10px;
border:15px solid #eee;
}

精通css 高级web标准解决方案——可视化格式模型-盒模型

.test1{
box-sizing:border-box;
width:200px;
padding:10px;
border:15px solid #eee;
}

精通css 高级web标准解决方案——可视化格式模型-盒模型

box-sizing的兼容性如下:

精通css 高级web标准解决方案——可视化格式模型-盒模型

3-外边距叠加

概念:当两个或者是更多个垂直外边距相遇时,他们将形成一个外边距,这个外边距的高度等于两个发生叠加的外边距的高度重视的较大者。(当一个元素位于另一个元素上方时,第一个元素的底外边距会和第二个元素的顶外边距发生叠加。)

测试如下:

代码
<!DOCTYPE html>
<html>
<head>
<title>css bug 测试</title>
<meta charset = "utf-8">
<style type="text/css">
.box-top{
width: 50px;
height: 50px;
background-color: red;
margin: 30px;
}
.box-bottom{
width: 50px;
height: 50px;
background-color: green;
margin: 20px;
}
</style>
</head>
<body>
<div class="box-top"></div>
<div class="box-bottom"></div>
</body>
</html>
 图片结果

精通css 高级web标准解决方案——可视化格式模型-盒模型

精通css 高级web标准解决方案——可视化格式模型-盒模型

外边距的叠加问题在水平方向是没有问题的。

当两个元素为父子元素时,并且没有边框或者内边距将两个外边距分隔开,他们的顶和底外边距也会发生叠加。

如下例子所示:

代码
<!DOCTYPE html>
<html>
<head>
<title>css bug 测试</title>
<meta charset = "utf-8">
<style type="text/css">
.box-top{
width: 50px;
height: 50px;
background-color: red;
margin: 30px;
}
.box-bottom{
width: 30px;
height: 30px;
background-color: green;
margin-top: 20px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box-top">
<div class="box-bottom"></div>
</div> </body>
</html>
示例图1

精通css 高级web标准解决方案——可视化格式模型-盒模型

精通css 高级web标准解决方案——可视化格式模型-盒模型

示例图2

精通css 高级web标准解决方案——可视化格式模型-盒模型

精通css 高级web标准解决方案——可视化格式模型-盒模型

tips:之前在写代码的时候,会发现这样的问题。却不知道是什么问题。理所应当的认为第一个div是相对浏览器定位的,而第二个div是相对第一个的,因为它是它的子元素。但是变化div2的外边距却怎么也不对。查了资料才知道是外边距叠加。要解决这个问题的方法为:

触发block formatting context即可,触发的方法:
1. float不为none
2. overflow不为visible
3. display设为‘table-cell’, ‘table-caption’, 或‘inline-block’
4. position既不是static也不是relative
5. zoom:1, IE的hasLayout特性会建立一个新的block formatting context

(作者:张克军
链接:http://www.zhihu.com/question/19823139/answer/13079933
来源:知乎)

 
 
 

注:只有普通文档流中块框的垂直外边距才会叠加,行内框,浮动框和绝对定位框之间的外边距是不会叠加的!

上一篇:Android ActionBar下拉选项


下一篇:Code Signal_练习题_shapeArea