主流浏览器以及兼容问题

一、主流浏览器

浏览器可以分为两部分,外壳+内核。其中外壳的种类相对比较多,内核则比较少。

外壳:

Shell,浏览器的外壳:例如菜单,工具栏等。主要是提供给用户界面操作,参数设置等等。它是调用内核来实现各种功能的。

内核:

  浏览器内核分成两部分:渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎,负责请求网络页面资源加以解析排版并呈现给用户

主要组件包括:

  1. 用户界面 - 包括地址栏、后退/前进按钮、书签目录等,也就是所看到的除了用来显示所请求页面的主窗口之外的其他部分

  2. 浏览器引擎 - 用来查询及操作渲染引擎的接口

  3. 渲染引擎 - (浏览器兼容问题的原因)用来显示请求的内容,例如,如果请求内容为html,它负责解析html及css,并将解析后的结果显示出来。

  4. 网络 - 用来完成网络调用,例如http请求,它具有平台无关的接口,可以在不同平台上工作。

  5. UI后端 - 用来绘制类似组合选择框及对话框等基本组件,具有不特定于某个平台的通用接口,底层使用操作系统的用户接口。

  6. JS解释器 - 用来解释执行JS代码。

  7. 数据存储 - 属于持久层,浏览器需要在硬盘中保存类似cookie的各种数据,HTML5定义了web database技术,这是一种轻量级完整的客户端存储技术。

常见浏览器渲染引擎:Trident、Gecko、Webkit、Blink

Trident内核:IE浏览器,360,猎豹,百度;

Gecko内核:火狐;

Presto内核:Opera7及以上版本(已废弃)

Webkit内核:遨游,Safari、Chrome谷歌浏览器;

Blink内核:Chrome(28及往后版本)、Opera(15及往后版本)和Yandex浏览器,大部分国产浏览器最新版本都采用Blink;

对浏览器兼容问题,一般分,HTML,Javascript兼容,CSS兼容。 其中html相关问题比较容易处理,无非是高版本浏览器用了低版本浏览器无法识别的元素,导致其不能解析,所以平时注意一点就是。

渲染引擎工作原理:

渲染流程可简单地理解成一个线性串联的变换过程的组合,原始输入为URL地址,最终输出为页面Bitmap,中间依次经过了Loader(加载)、Parser(解析)、Layout(布局)和Paint(绘制)模块。

<1>渲染引擎先解析 HTML,将标签转换成树的节点——叫作"DOM树"。然后解析CSS样式数据,包括外联样式和内联样式。样式信息和 HTML 中的可视指令一起用于创建另一棵树——渲染树(此时只是html元素与自身css的组合,即先把元素样子做好了,还没有放到指定位置)。渲染树包含具有可视属性(如颜色和尺寸)的矩形。矩形按正确的顺序显示在屏幕上。

<2>渲染树构建完成后,就进入"Layout布局/回流"流程(此时网页整体显示效果已经在引擎内部有了但是还没有放到界面上)。也就是给每个节点分配正确的坐标——节点应该显示在屏幕上的哪个位置。

<3>下一步就是重绘Paint——将遍历渲染树,通过用户界面(UI)后端层绘制每个节点。Paint模块负责将Render树映射成可视的图形,它会遍历Render树调用每个Render节点的绘制方法将其内容显示在一块画布或者位图上,并最终呈现在浏览器应用窗口中成为用户看到的实际页面。

重要的是要理解这是一个循序渐进的过程。为了更好的用户体验,渲染引擎将尽可能快地在屏幕上呈现内容。它不会等到所有的 HTML 都解析完成才开始构建和布局渲染树。当程序还在持续处理来自网络层的内容时,它已经解析和呈现了部分内容。

二、常见问题

CSS兼容问题:

1.css的hack问题:主要针对IE的不同版本,不同的浏览器的写法不同       
 IE的条件注释hack:       
 <!--[if IE 6]>此处内容只有IE6.0可见<![endif]-->          
 <!--[if IE 7]>此处内容只有IE7.0可见<![endif]-->

2.IE6双边距问题:IE6在浮动后,又有横向的margin,此时,该元素的外边距是其值的2倍       
 解决办法:display:block;

3.IE6下图片的下方有空隙      
 解决方法:给img设置display:block;

4.IE6下两个float之间会有个3px的bug       
 解决办法:给右边的元素也设置float:left;

5.IE6下没有min-width的概念,其默认的width就是min-width

6.IE6下在使用margin:0 auto;无法使其居中       
 解决办法:为其父容器设置text-align:center;

7.被点击过后的超链接不再具有hover和active属性       
 解决办法:按lvha的顺序书写css样式,
 ":link": a标签还未被访问的状态;
 ":visited": a标签已被访问过的状态;
 ":hover": 鼠标悬停在a标签上的状态;
 ":active": a标签被鼠标按着时的状态;


8.在使用绝对定位或者相对定位后,IE中设置z-index失效,原因是因为其元素依赖于父元素的z-index,但是父元素默认为0, 子高父低,所以不会改变显示的顺序

9.IE6下无法设置1px的行高,原因是由其默认行高引起的       
 解决办法:为期设置overflow:hidden;或者line-height:1px;

10.随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。

解决方案:css里 *{margin:0;padding:0;}

 JQurey版本支持问题: jQuery 2版本以上是不支持 IE6,7,8 浏览器

使用的是 IE6,7,8 浏览器的话,你就得选择使用jQuery1.9版本的,或者,你也可以通过条件注释在使用 IE6,7,8 浏览器的时候只允许包含 jQuery 1.9.

条件注释代码如下:

<!--[if lte IE 8]> IE8以及IE8以下版本可识别
    <script src="jquery-1.9.0.js"></script> 
<![endif]--> 
<!--[if gte IE 9]> IE9以及IE9以上版本可识别
    <script src="jquery-2.0.0.js"></script> 
<![endif]-->
  • 7
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. HTML对象获取问题 3 2. const问题 3 3. event.x与event.y问题 3 4. window.location.href问题 3 5. frame问题 3 6. 模态和非模态窗口问题 3 7. firefox与IE的父元素(parentElement)的区别 3 8. document.formName.item(”itemName”) 问题 3 9. 集合类对象问题 3 10. 自定义属性问题 3 11. input.type属性问题 3 12. event.srcElement问题 3 13. body载入问题 3 14. 事件委托方法 3 15. Table操作问题 3 16. 对象宽高赋值问题 3 Ø CSS 3 1. cursor:hand VS cursor:pointer 3 2. innerText在IE中能正常工作,但在FireFox中却不行. 3 3. CSS透明 3 4. css中的width和padding 3 5. FF和IE BOX模型解释不一致导致相差2px 3 6. IE5 和IE6的BOX解释不一致 3 7. ul和ol列表缩进问题 3 8. 元素水平居中问题 3 9. Div的垂直居中问题 3 10. margin加倍的问题 3 11. IE与宽度和高度的问题 3 12. 页面的最小宽度 3 13. DIV浮动IE文本产生3象素的bug 3 14. IE捉迷藏的问题 3 15. float的div闭合;清除浮动;自适应高度 3 16. 高度不适应 3 17. IE6下图片下有空隙产生 3 18. 对齐文本与文本输入框 3 19. LI中内容超过长度后以省略号显示 3 20. 为什么web标准中IE无法设置滚动条颜色了 3 21. 为什么无法定义1px左右高度的容器 3 22. 链接(a标签)的边框与背景 3 23. 超链接访问过后hover样式就不出现的问题 3 24. FORM标签 3 25. 属性选择器(这个不能算是兼容,是隐藏css的一个bug) 3 26. 为什么FF下文本无法撑开容器的高度 3

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值