CSS盒子模型和IE浏览器
CSS盒模型图解
下面是一幅关于应用了CSS的元素是如何显示它的尺寸的图示。

在本篇文章中,所有的浏览器在计算盒模型总宽度时处理margin属性的方式都是一致的,所以我们将更多的精力放在padding和border属性上。
W3C盒模型
首先看一下《 the W3C box model》,这里所写出的标准,如果没问题的话,是应该被所有标准的现代浏览器及IE6和它的后续版本所遵循的。 在W3C盒模型中,一个块级元素的总宽度按照如下方程式计算:
总宽度 = margin-left + border-left + padding-left + width + padding-right + border-right + margin-right
对于高度也使用同样的计算方法。
IE盒模型
IE盒模型的计算方式:填充(padding)和边框(border) 不被包括在计算的范围内。
总宽度 = margin-left + width + margin-right
这就意味着元素一旦拥有横向的填充和/或边框,实际的内容区域(content area)就要扩大来创造出他们占据的空间。
关于IE的版本
IE5.5及更早的版本使用的是IE盒模型。IE6及更新的版本在标准兼容模式下使用的是W3C标准盒模型。只要为文档设置一个DOCTYPE,就会使得IE遵循标准兼容模式的方式工作。此盒模型问题只会出现在IE5.5及其更早的版本中。
解决问题
现在确定了IE6及后续版本都会遵循标准兼容模式, 唯一要关注的事情就是如何令IE5.5及更早版本中的网页和其在现代的浏览器中的呈现效果是一致的。以下列出了4种方法。
- 避免导致这个问题的情景
- 插入额外的标记
- 使用条件注释判断语句
- 使用CSS Hacks
1. 避免导致这个问题的情景
避免为一个元素同时设置width和padding值或者width和border值,再或者width同时和它们两个值。者确保了所有的浏览器都会一样的去计算元素的总宽度,而不用考虑它们使用哪种盒模型方式。
2. 插入额外的标记
拿一个例子来说明,下面的HTML用来定义一个新闻列表:
<div id="news">
<h2>News</h2>
<ul>
<li>
<h3>News article 1</h3>
<p>Lorem ipsum dolor sit amet</p>
</li>
<li>
<h3>News article 2</h3>
<p>Lorem ipsum dolor sit amet</p>
</li>
</ul>
</div>
为了得到一个250像素宽的列表,且应用1像素的边框和10像素的填充,会用到这样的CSS:
#news {
padding: 10px;
border: 1px solid #000;
width: 228px;
}
在符合标准的浏览器中,总宽度为250px(1px border-left + 10px padding-left + 228px width + 10px padding-right + 1px border-right)。在IE5.5及更早的版本中,总宽度只是228px,因为它并未计算边框和填充的值。
那么如何避免这个问题呢? 让我假设新闻列表在另一个容器里,比如它在侧边栏(sidebar)里:
<div id="sidebar">
<div id="news">
...
</div>
</div>
如果是这样,可以为父容器(sidebar)设置宽度来达到效果:
#sidebar {width:250px}
#news {
padding:10px;
border:1px solid;
}
如果情况不允许,可是使用插入额外标记这个方法。还是上述的例子,在#news里面插入一个标记:
<div id="news">
<div>
<h2>News</h2>
<ul>
...
</ul>
</div>
</div>
使用如下CSS:
#news {width:250px}
#news div {
padding:10px;
border:1px solid;
}
3. 使用条件注释判断语句
如果没有合适的父容器来控制宽度,也不能通过添加标记来解决问题,那针对IE5.*/Win我们需要设置一个不同的width值了。
最安全的方式就是使用条件注释判断语句,这些内容只能在IE/Win中被解析,下面的代码只有在IE6以下的版本中被执行:
<!--[if lt IE 6]>
<style type="text/css">
#news {width: 250px;}
</style>
<![endif]-->
如果采用这种方式,建议将全部的针对IE5.*/Win的代码全部转移到一个单独的CSS文件中来加载它:
<!--[if lt IE 6>
<link rel="stylesheet" type="text/css" href="/css/ie5.css">
<![endif]-->
4.使用CSS Hacks
#news {
padding: 10px;
border: 1px solid;
width: 250px;
width:228px;
}
所有的浏览器都会看到并理解"width:250px",但IE5.*/Win不会读取下面的一行,width:228px,但这行会被其它浏览器解析。所以最后,IE5.*/Win得到width值是250px,其它浏览器得到的width值是228px。这样保证在全部的浏览器中新闻列表的总宽度一致。
转载自:http://www.osmn00.com/translation/213.html
CSS盒子模型和IE浏览器的更多相关文章
- 关于css盒子模型和BFC的理解
CSS盒子模型 包含元素内容(content).内边距(padding).边框(border).外边距(margin) 一般元素总宽度 = element的width+padding的左右边距+mar ...
- 标准W3C盒子模型和IE盒子模型
标准W3C盒子模型和IE盒子模型 CSS盒子模型:网页设计中CSS技术所使用的一种思维模型. CSS盒子模型组成:外边距(margin).边框(border).内边距(padding).内容(co ...
- 标准W3C盒子模型和IE盒子模型CSS布局经典盒子模型(转)
盒子模型是css中一个重要的概念,理解了盒子模型才能更好的排版.其实盒子模型有两种,分别是 ie 盒子模型和标准 w3c 盒子模型.他们对盒子模型的解释各不相同,先来看看我们熟知的标准盒子模型: 从上 ...
- CSS中盒子模型和position(一)
今天遇到几个css中的重要的知识点,记得这些都是以前看过的:margin.padding.border和position.可是用起来还是有很多的问题,以前自己看过去总是懒得记录,等到用起来了都不知道自 ...
- CSS盒模型和margin重叠
在 CSS 中,width 和 height 指的是内容区域的宽度和高度.增加内边距.边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸.(div的实际占用尺寸变打了) 但: 一旦为页面设置 ...
- IE盒子模型和W3C盒子模型
IE盒模型出现在ie5.5以下的版本当中,ie6以上就实行W3C盒模型. box-sizing有两个属性,border-box和content-box. border-box对应传统的盒子模型,即ie ...
- 标准盒子模型和IE盒子模型
标准盒子模型 = margin + border + padding + content (content = width | height) IE盒子模型 = margin + content ( ...
- w3C盒子模型和IE的盒子模型
W3C 盒子模型的范围包括 margin.border.padding.content,并且 content 部分不包含其他部分IE 盒子模型的范围也包括 margin.border.padding. ...
- 简要说明盒子模型和flex布局
盒子模型:可以看做是一个盒子,包括外边距.边框.内边距.实际内容. flex布局:弹性布局,灵活性好. 当给元素设置display:flex时,它就是flex容器,它的所有子元素自动成为容器成员,称为 ...
随机推荐
- bignum 大数模板
今天无意间看到一个很好的大数模板,能算加.减.乘.除等基本运算,但操作减法的时候只能大数减小数,也不支持负数,如果是两个负数的话去掉符号相加之后再取反就可以了,一正一负比较绝对值大小,然后相减.我借用 ...
- Gitweb 安装与配置
gitweb 可以通过搭建git服务器将代码保存在git服务器上,多个开发者可以从服务器上clone代码,也可以各自维护一份本地代码,在本地更新之后可以提交到git服务器上,提高开发效率. g ...
- kafka - topic
http://www.cnblogs.com/yurunmiao/p/5550906.html http://www.cnblogs.com/chushiyaoyue/p/5695826.html
- sql cast()和convert()
19.CAST()函数和CONVERT()函数 CAST()函数可以将某种数据类型的表达式转化为另一种数据类型 CONVERT()函数也可以将制定的数据类型转换为另一种数据类型 19.1 CAST() ...
- Sqoop安装配置及数据导入导出
前置条件 已经成功安装配置Hadoop和Mysql数据库服务器,如果将数据导入或从Hbase导出,还应该已经成功安装配置Hbase. 下载sqoop和Mysql的JDBC驱动 sqoop-1.2.0- ...
- Office 多版本共存
1 32位共存 假如已经安装了Office 2003(必定是32位的),那么安装 32位Office 2010 时会出现如下错误: 图1.1 解决办法: 1.将下述三个注册表项导出到文件2003A.r ...
- 30-Razor语法基础
以往开发ASP.NET Web Form时,在ASPX页面上都会出现许多夹杂C#/VB.NET与HTML的情况,而先前使用<%...%>这种传统圆角括号的表示法会让HTML标签与ASP.N ...
- Ubuntu 修复windows启动项
打开终端输入命令sudo gedit /etc/default/grub修改GRUB_TIMEOUT="10"然后在终端中输入sudo update-grubupdate 命令会自 ...
- HTML5自学笔记[ 11 ]canvas绘图基础1
html5新增<canvas>标签用于绘制图像,默认宽高是300*150,canvas的宽高需要在这里设置,在css中设置会有问题:设置的形状,如矩形,会等比缩放,而非设置的宽高. 在不支 ...
- ubuntu安装bower失败的解决方法
1.安装nodejs 2.安装npm 3.安装bower 最开始使用 npm install bower -g / sudo npm install bower -g 安装bower后 命令行输入bo ...