在好久好久之前,那时候HTML和CSS尚未一个统一的标准,出现的现象就是,我用个人标准,你用你的标准,这致使了各家浏览器对于解析HTML和CSS的方式有很大的差异,而当标准制定出来以后,浏览器不只要按照新的标准去支持HTML和CSS,还要对老旧的网页进行兼容,而这一前一后的两种支持方式,就是咱们所称的标准模式(StandardMode,)
和怪异模式(QuirksMode)
,对于现代规范的网页,浏览器通常用标准模式去解析和渲染,而对于古老的网页,浏览器就会使用怪异模式去渲染.而在ie的开发者工具中,你能够自定义改变文档模式,这在其余浏览器中是不行的.css
这里就会涉及到一段很是容易被人忽略的代码,那就是HTML文档第一行就会出现的文档类型声明:DOCTYPE
.你必定见过这两种声明方式:html
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
复制代码
开发者还能够在< head >标签中加入
x-ua-compatible
信息来影响文档类型的断定,这里就不作过多的介绍了,有兴趣的同窗能够自行搜索.前端
标准模式和怪异模式下对于盒子模型的渲染效果差异是很大的. 在怪异模式下,给盒子模型设置的宽度width
和高度height
会将元素的content,padding,border都包含进去,以下图所示: web
即:浏览器
width = border left + padding left + content width + padding right + border rightbash
height = border top + padding top + content height + padding bottom + border bottom前端工程师
而在标准模式下,给盒子模型设置的宽度和高度就是content的高度和宽度,以下图: 工具
width=content widthui
height=content heightspa
这一个区别会致使渲染块级元素的时候会出现很大的差异,因此两种模式下渲染出来的页面差异也会很大.
div.a{
width: 200px;
height: 200px;
padding: 50px;
border: 20px solid red;
}
复制代码
在标准模式下以下图:
在怪异模式下以下图:
而咱们也能够经过box-sizing属性手动的选择width和height包含的范围,具体的参数及含义以下
box-sizing:border-box //像怪异模式那样,元素的border和padding被包含在给元素设置的width和height中
box-sizing:content-box //默认值.给元素设置的width和height属性只表示content区域,而在width和height以外绘制padding和border
box-sizing:inherit //继承父元素的box-sizing设置
复制代码
如今你必定明白了为何有的时候元素的大小超出咱们的预期,只要加一个
box-sizing:border-box
,就可以正常显示了吧.
CSS中的vertical-aligh属性用于设置对象的初值对其方式,定义了行内元素的baseline要和所在行的baseline初值对齐,而在表格元素中,能够设置单元格里面的内容的对其方式,取值有baseline,bottom,top,middle等.用一幅图来解释:
td.a {
border:2px solid blue;
}
img.b {
width:200px;
height:200px;
border:2px solid orange;
}
复制代码
在标准模式下,图片底部能够看到有几像素的白条:
而在怪异模式下,图片底部没有留白:
如今你知道为何有时候图片处理老是很难看了吧?由于浏览器工做在标准模式,只要把图片的
vertical-align
属性修改成bottom
就解决啦!
行内元素分为replaced和non-replaced两类,而像input,textarea,img等能够设置宽高的行内元素,成为replaced元素,而那些不能设置宽高的元素被称为non-replaced元素,例如span. 而这些都是在标准模式的前提下,在怪异模式下,即便是non-replaced元素也能够被设置元素的宽高. 示例: 定义一个div,宽高均为200px,背景颜色为红色,div内部有一个span标签,给span标签设置宽高均为100px,背景颜色为蓝色.代码以下:
div.a{
width: 200px;
height: 200px;
background-color: red;
}
span.b{
width: 100px;
height: 100px;
background-color: blue;
}
复制代码
在标准模式下,能够看到span元素是看不到的,这是由于non-replaced元素的宽高由它的内容决定.
而在ie的开发者工具中把模式调到ie5,能够看到span标签是有宽高的:
虽然ie5如今已经几乎不存在了,可是了解这些能够帮助咱们更深刻的研究浏览器的渲染规则.
在实际的开发中,咱们常常会遇到元素内部的内容溢出,而CSS的overflow属性能够处理溢出的状况,默认是visible,即显示溢出. 若是一个元素内部的内容出现了溢出,而且咱们没有设置overflow属性,即默认vislble时:
示例: 定义一个div,类名为a,宽高均为200px,背景颜色为红色,div内部还有一个div标签,类名为b,给内部的div标签设置宽为100px,高为300px,背景颜色为蓝色.代码以下:
div.a{
width: 200px;
height: 200px;
background-color: red;
}
div.b{
width: 100px;
height: 300px;
background-color: blue;
}
复制代码
能够看到在标准模式和怪异模式下渲染的差异:
标准模式:
对于标准模式和怪异模式渲染的差异,主要是浏览器发展的历史以及各家标准的差别决定的,而现现在Web前端开发愈来愈趋向于标准化,工程化,因此咱们应该尽可能避免在实际开发中使用怪异模式来渲染页面.这样不只有利于项目的维护,也会在渲染时减小不少没必要要的冲突和怪异现象. 知道这些差别对一个专业的web前端工程师来讲是必须的,在遇到上述问题的时候,须要可以辨识出浏览器是工做在标准模式下仍是怪异模式下,这对咱们解决bug是颇有帮助的.
前端小白,热爱前端.
发展前端,从我作起.
正在找工做,若是以为我符合您的标准,欢迎联系.