CSS盒子模型使用width(宽)和height(高)定义内容区域的大小,但是很多用户误以为width属性表示整个元素的宽度,height属性表示整个元素的高度,包括IE老版本的浏览器都这样认为。
【示例1】下面示例定义两个并列显示的div元素,设置每个div的width为50%,显示效果如图3所示。
<style type="text/css">
div {/*定义div元素公共属性 */
float: left; /*向左浮动,实现并列显示*/
background-image: url(images/1.jpg); /* 定义背景图像 */
background-color: #CC99CC; /* 定义背景色 */
font-size: 32px; /* 定义div内显示的字体大小 */
color: #FF0000; /* 定义div内显示的字体颜色 */
text-align: center; /* 定义div内显示的字体居中显示 */
height: 540px; /* 定义高度*/}
#box1 {/*定义第1个div元素属性*/
width: 50%; /* 占据窗口一半的宽度 */ }
#box2 {/*定义第2个div元素属性*/
width: 50%; /* 占据窗口一半的宽度 */ }
</style>
<div id="box1">左边元素</div>
<div id="box2">右边元素</div>

图3 定义元素的大小
【示例2】下面示例以上例为基础,设计两个div元素并列显示,同时设置元素间留出一点空隙,以便区分不同元素。
<style type="text/css">
div {/*定义div元素公共属性,具体声明与上面示例代码相同,就不再重复注释 */
float:left;
background-image:url(images/1.jpg);
background-color:#CC99CC;
font-size:32px;
color:#FF0000;
text-align:center;
height:540px;}
#box1 {/* 定义第1个div元素属性 */
width:50%;
margin-right:1px; /* 定义右边界为1像素宽 */}
#box2 {/* 定义第2个div元素属性 */
width:50%;
margin-left:1px; /* 定义左边界为1像素宽*/}
</style>
<div id="box1">左边元素</div>
<div id="box2">右边元素</div>
在浏览器中预览,可以发现第二个div元素错位显示,如图4所示。这是因为当左右两个div的width属性都设置为50%时,div内容本身就会挤满浏览器窗口,由于margin属性不包含在width属性之内,所以两个div就无法同时显示在一行内。

图4 错行显示效果
解决方法:可以设置width属性为49%或再小点。但是当空隙设置较大时,通过缩减百分比还是存在一定的风险或局限性。此时,最好的解决办法是设置width为固定值,不过这样会使页面布局失去灵活性。
【拓展】
用户可以使用三种方法实现在块元素周围生成空隙。第一种是只为元素添加补白,第二种是只添加边界,第三种是既增加补白,又增加边界。
如果元素定义了背景,就不能使用补白设计间距,因为背景会扩展到补白区域内,从而使空隙被背景遮盖而无法显示出来。
根据CSS盒模型规则,可以给出一个简单的盒模型尺寸计算公式:
- 元素的总宽度=左边界 + 左边框 + 左补白 + 宽 + 右补白 + 右边框 + 右边界
- 元素的总高度=上边界 + 上边框 + 上补白 + 高 + 下补白 + 下边框 + 下边界
例如,假设一个元素的宽度为200px,左右边界为50px,左右补白为50px,边框为20px。则该元素在页面中实际占据宽度为:
50px + 20px + 50px + 200px + 50px + 20px + 50px = 440px。
但由于IE早期版本(5.x及以下版本)浏览器对于盒模型的解释使用一种非标准规则,它认为元素的宽度应为内容宽度、补白宽度和边界宽度的总和,用公式表示为:
width=border-left + padding-left + content-width + padding-right + border-fight height= border-top + padding-top + content-height + padding-bottom + border-bottom
因此,在IE早期版本(5.x及以下版本)浏览器中,元素在页面中所占据的实际大小为:
- 元素的总宽度=左边界 + 宽 + 右边界
- 元素的总高度=上边界 + 高 + 下边界
因此,在网页布局时,遇到与宽度或高度相关问题,设计师一定要对盒模型中的margin、padding和border等属性进行综合考虑,只有这样才能设计出满意的布局,避免出现错位、错行等现象。
【注意】
通过下面4个属性灵活控制CSS盒模型的大小,这些属性在网页弹性布局中非常有用。
- min-width:设置对象的最小宽度。
- max-width:设置对象的最大宽度。
- min-height:设置对象的最小高度。
- max-height:设置对象的最大高度。