IT兄弟连 HTML5教程 DIV+CSS的兼容性问题
使用DIV+CSS布局网页其实是很容易的事情,但各种浏览器之间的不兼容性问题,加大了页面布局的难度,给程序员带来很多不便,于是需要花费更多的时间在调试各种浏览器的兼容性上。因为部分CSS属性在不同的浏览器之间解析的结果会有差异,这是由于个别浏览器的开发商对一些CSS属性的解析没有按W3C的标准设计。这也是初学者常常会认为布局难以理解的原因。逃避不是解决问题的办法,因为每种浏览器都会有它的使用人群,一个好的网站布局需要在所有浏览器上都可以看到相同的界面。就算不能调试成各种浏览器显示得完全一样,也要保证大致相同。
可以使用的浏览器虽然有很多种,但通常在进行页面布局调试时将其划分为IE和非IE两类。主要原因是微软公司的IE浏览器没有按W3C的标准设计,而非IE的浏览器几乎都是符合W3C标准的,像Safari和Firefox等浏览器对CSS的解析相差无几。另外,更令人烦恼的是IE还有多种版本(IE 5、IE 6、IE 7、IE 8等),对CSS的解析也存在着很多差异。虽然针对IE的兼容性调试很费时,但还是要多花费一些精力在它上面,毕竟IE浏览器占有很大的市场份额。但目前IE 5的使用人群少到可以不去考虑它了,一般IE浏览器的兼容性只针对IE 6、IE 7和IE 8就可以了,IE的每个新版本的出现都在向标准化迈进,非IE的浏览器使用Firefox浏览器为代表即可。DIV+CSS进行页面布局时需要处理的兼容性问题有很多,本节只能给出部分常见的兼容性问题的解决方案。
1 不同浏览器解释盒子模型的差异
盒子模型是CSS中一个重要的概念,理解了盒子模型才能更好地排版。不同浏览器对盒子模型的解释各不相同。其实盒子模型有两种,分别是IE盒子模型(IE系列浏览器)和标准W3C盒子模型(非IE浏览器),如图1所示。
图1 盒子模型
从图1(左)可以看到标准W3C盒子模型的范围包括margin、border、padding、内容区,并且内容区部分不包含其他部分。而从图1(右)可以看到,IE盒子模型的范围也包括margin、border、padding、内容区,和标准W3C盒子模型不同的是,IE盒子模型的内容区部分包含了border和padding。例如,一个盒子模型的margin为20px,border为1px,padding为10px,内容的宽为200px、高为50px。代码如下所示:
如果用标准W3C盒子模型解释,如图2所示,那么这个盒子模型需要占据的位置(包含外边距margin)和盒子模型的实际大小(不包含外边距margin)如下。
图2 标准W3C盒子模型解释
盒子占据的位置:
宽度 = margin*2 + border*2 + padding*2 + 内容的width = 20*2 + 1*2 + 10*2 +200 = 262px
高度 = margin*2 + border*2 + padding*2 + 内容的height = 20*2 + 1*2 +10*2 + 50 = 112px
盒子的实际大小:
宽度 = border*2 + padding*2 + 内容的.width = 1*2+10*2+200=222px
高度 = border*2 + padding*2 + 内容的.height = 1*2+10*2+50=72px;
如果用IE盒子模型解释,如图3所示,那么这个盒子需要占据的位置(包含外边距margin)和盒子模型的实际大小(不包含外边距margin)如下。
图3 IE盒子模型解释
盒子占据的位置:
宽度 = margin*2 +内容的.width = 20*2+200=240px
高度 = margin*2 + 内容的.height = 20*2+50=90px
盒子的实际大小:
宽度 = 内容的.width = 200px
高度 = 内容的.height = 50px
2 设置浏览器去遵循W3C标准
之前介绍让我们知道了不同浏览器对盒子模型的解释是有所差异的,那么应该选择哪种盒子模型呢?答案一定是“标准W3C盒子模型”。怎样才算是选择了“标准W3C盒子模型”呢?只要能让IE浏览器也按“标准W3C盒子模型”去解析页面即可。当然不只是盒子模型可以让IE浏览器按标准的W3C规范去解析,整个页面的CSS都可以让IE浏览器按标准的W3C规范去解析。那么应该怎样去做呢?其实很容易,就是在网页的顶部加上DOCTYPE声明。如果不加DOCTYPE声明,那么各个浏览器会根据自己的行为去理解网页。例如,IE浏览器会采用IE盒子模型去解释你的盒子,而Firefox浏览器会采用标准W3C盒子模型去解释你的盒子,所以网页在不同的浏览器中显示得就不一样。反之,如果加上了DOCTYPE声明,那么所有浏览器都会采用标准W3C盒子模型去解释你的盒子,网页就能在各个浏览器中显示一致了。
DOCTYPE定义当前文档的基本类型,即文档类型定义(DTD),用于告诉浏览器打开页面时应遵循什么规则。要建立符合标准的网页,DOCTYPE声明是必不可少的组成部分。DOCTYPE的声明及声明位置如图3所示。
图3 DOCTYPE声明及声明位置
其实DOCTYPE只是一组机器可读的规范,虽然中间包含了文件的URL,但浏览器不会去读取这些文件,仅用于识别,然后决定以什么样的规范去执行页面中的代码。开始制作符合标准的站点时,第一件事情就是声明符合自己需要的DOCTYPE。而XHTML 1.0提供了三种DTD声明可供选择,分别为:过渡的(Transitional)、严格的(Strict),以及专门针对框架页面设计使用的DTD(Frameset)。这里笔者推荐DOCTYPE声明是过渡的DTD,这也是最常用的DOCTYPE声明,声明代码如下所示:
XHTML 1.0提供的这种过渡的DTD,其要求是非常宽松的,它允许你继续使用HTML 4.01的标识,但是要符合XHTML的写法。笔者推荐使用最新的、简便的DOCTYPE声明方法,只需几个字符即可,代码如下所示:
虽然声明DOCTYPE解决了大部分问题,但还是会有个别的标记和样式不能兼容;或是不去声明DOCTYPE,我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,使得在不同的浏览器中也能得到我们想要的页面效果。
IT兄弟连 HTML5教程 DIV+CSS的兼容性问题的更多相关文章
- IT兄弟连 HTML5教程 DIV+CSS网页标准化布局 小结及习题
小结 DIV+CSS布局页面的优势:表现和内容相分离.代码简洁,提高页面浏览速度.易于维护和改版.提高搜索引擎对网页的索引效率.每个HTML元素都可以看作一个区块,类似于装了东西的盒子,称为盒子模式. ...
- IT兄弟连 HTML5教程 DIV+CSS网站首页布局示例
首页的设计直接影响网站的整体形象,虽然没有一个统一的规范,但最好将其设计为大众化的,只要信息内容能够合理地编排即可,使用户可以方便地找到需要的信息.另外,首页的高度最好不要超过三个屏幕,页面中使用的颜 ...
- IT兄弟连 HTML5教程 DIV+CSS网页标准化布局的优势
标准的网页都需要对内容进行布局,以前都是采用表格的定位技术,从2005年开始逐步转向DIV+CSS的布局方式,目前绝大多数的网站都是采用这种布局方式.使用DIV+CSS对网站进行布局符合W3C标准,采 ...
- div+css通用兼容性代码整理
一.Div+css通用兼容性代码 你可以在css开头加入 *html{padding:0px} <style> *html{padding:0px} /* Clear Fix */ .cl ...
- IT兄弟连 HTML5教程 和页面布局有关的CSS属性
使用DIV+CSS对网页进行标准化布局前,除了要掌握盒子模型,还要掌握定位和浮动两个比较重要的概念,它们可以控制在页面上排列和显示元素的方式.一个盒子是装内容的区块,如果多个盒子组合在一起使用,再通过 ...
- IT兄弟连 HTML5教程 了解HTML5的主流应用1
在很多人眼里,HTML5与互联网营销密切相关,但其实从开发者的角度而言,它是一种网页标准,定义了浏览器语言的编写规范.伴随HTML5标准尘埃落定,浏览器对HTML5特性的逐步支持,再加上国内对HTML ...
- IT兄弟连 HTML5教程 HTML5文字版面和编辑标签 使用HTML表格
表格在网站中应用得非常广泛,使用它可以方便.灵活地排版,很多动态大型网站也都是借助表格排版的,但现在都使用DIV+CSS进行页面布局.表格可以把相互关联的信息元素集中定位,使浏览页面的人一目了然.在H ...
- IT兄弟连 HTML5教程 “无意义”的HTML元素div和span
HTML只是赋予内容的手段,大部分HTML标签都有其意义(例如,标签a创建链接,标签h1创建标题等),然而div和span标签似乎没有任何内容上的意义,听起来就像一个泡沫做成的锤子一样无用.但实际上, ...
- IT兄弟连 HTML5教程 CSS3揭秘 CSS选择器2
4 结构性伪类选择器 在学习结构性伪类选择器之前,先了解两个概念:伪类选择器和伪元素选择器.伪类选择器是CSS中已经定义好的选择器,不能随便命名.常用的伪类选择器是使用在a元素上的几种,如a:lin ...
随机推荐
- SpringBoot打成war包,部署Tomcat服务器
1: 创建spring boot项目 使用 Spring initializr 可以直接选择创建包的方式 也可以选择在Pom中更改 <groupId>com.dgw</grou ...
- mysql客户端 navicat 本地导入sql文件出错
以前遇到过这个问题,找了半天度娘没解决,然后就放弃了. 因为是自己 demo 的项目 所以就自己手动建表了. 现在实习了,去到公司下载下代码来,拿上sql 导入发现还是报错, 根本没法整,然后自己都不 ...
- hybrid app初体验,和react-native一起飞
第一次启动了react-native的示例,今天主要把其中遇到的坑与解决的办法分享给大家.如有疏漏.错误还望指正. 首先还是要从hybrid app这个概念说起(如果对于这个过程不感兴趣的同学,可以直 ...
- 自然语言处理(NLP) - 数学基础(1) - 总述
正如我在<2019年总结>里说提到的, 我将开始一系列自然语言处理(NLP)的笔记. 很多人都说, AI并不难啊, 调现有库和云的API就可以啦. 然而实际上并不是这样的. 首先, AI这 ...
- linux命令之head、tail命令详解
head 语法 例子 tail 语法 例子 head和tail组合用法举例 head 语法 head [-n -k ]... [FILE]... 例子 默认是显示开头前10行. head /etc/p ...
- linux终端界面的字颜色设置
目录 目录 说明 PS1 颜色语法 保存设置 说明 在网上找了好多资料都不是很详细,要不就是语法有错误. 所以弄了好久才整明白了,写下来方便后面的人学习. 本人linux虚拟机版本为CentOs 6. ...
- [TimLinux] docker CentOS7 入门——容器(1)
1. 编写Dockerfile # 将官方 Python 运行时用作父镜像 FROM python: # 将工作目录设置为 /app WORKDIR /app # 将当前目录内容复制到位于 /app ...
- 学好linux必须精通用户管理的章节知识
第12章 Linux中用户知识管理 12.1 系统开机启动流程 12.1.1 centos6系统开机启动流程 12.1.1.1 开机系统流程语言描述 服务器电源开关打开 bios自检 目的:检查硬件是 ...
- 基于STM32F1 的BASIC解码实验 vb basic 液晶显示执行过程及结果
基于STM32F1 的BASIC解码实验 1.basic程序以文件形式存储 2.程序文件存储在sd卡 3.解释结果显示在液晶屏上 主函数部分 int main(void){ u16 i,j; dela ...
- Beego在views中格式化显示时间(int64转string)
最近在使用beego开发系统的过程中,遇到时间转换问题,需求如下: 通过以下函数获取Unix时间戳,后台数据库格式为int64: time.Now().Unix() 效果图: 从数据库获取数据,直接以 ...