逆战班!IE6常见CSS解析Bug及hack

浏览器内核

浏览器内核可以分成两部分:渲染引擎(layout engineer 或者 Rendering Engine)和 JS 引擎

浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。

  • 渲染引擎

    渲染引擎负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入 CSS 等),以及计算网页的显示方式,然后会输出至显示器或打印机。

  • JS引擎

    JS 引擎则是解析 Javascript 语言,执行 javascript 语言来实现网页的动态效果。最开始渲染引擎和 JS 引擎并没有区分的很明确,后来 JS 引擎越来越独立,内核就倾向于只指渲染引擎

主流浏览器内核

(1)Trident内核,由于被微软采用,并得益于微软操作系统的普及,以前几乎一统天下,所以又称为“IE内核”,主要浏览器有IE系列浏览器;

(2)Gecko内核,因为被Mozilla FireFox浏览器采用并得到开发者的进一步丰富,又被称为“Firefox内核”;

(3)WebKit内核,是Safari浏览器使用的内核,由Apple研发。 Google Chrome、Opera及各种国产浏览器高速模式也使用Webkit作为内核。

(4)Blink内核,由Google和Opera Software共同开发的浏览器内核,现在Chrome(28及往后版本)、Opera(15及往后版本)都将Webkit内核换成了Blink内核。

浏览器兼容

CSS Bug、CSS Hack和Filter

CSS Bug:CSS样式在各浏览器中解析不一致的情况,或者说CSS样式在浏览器中不能正确显示的问题称为CSS bug.

CSS Hack:CSS中,Hack是指一种兼容CSS在不同浏览器中正确显示的技巧方法,因为它们都属于个人对CSS代码的非官方的修改,或非官方的补丁。有些人更喜欢使用patch(补丁)来描述这种行为。

Filter:表示过滤器的意思,它是一种对特定的浏览器或浏览器组显示或隐藏规则或声明的方法。本质上讲,Filter是一种用来过滤不同浏览器的Hack类型。

IE6常见CSS解析Bug及hack

图片间隙

描述:在元素中直接插入图片时,图片下方会产生约3像素的间隙(该bug出现在IE6及更低版本中)

hack1:将<img>转为块状元素,给<img>添加声明:display:block

hack2:将<img>设置vertical-align:top/middle/bottom;只要不为baseline

双倍浮向(双倍边距)

描述:当Ie6及更低版本浏览器在解析浮动元素时,会错误地把浮向边边界加倍显示

hack:给浮动元素添加声明:display:inline;

  <div class="father">
    <div class="son1"></div>
    <div class="son2"></div>
  </div>
    .father {
      width: 200px;
      height: 200px;
      background-color: red;
    }
    .son1, .son2 {
      width: 50px;
      height: 50px;
      background-color: pink;
      float: left;
      margin-left: 50px;
    }

默认高度(IE6)

描述:在IE6及以下版本中,部分块元素拥有默认高度(低于16px高度)

hack1:给元素添加声明:font-size:0;

hack2:给元素添加声明:overflow:hidden;

<div></div>
    div {
      height: 5px;
      background-color: red;
    }

百分比bug

描述:在IE6及以下版本中在解析百分比时,会按四舍五入方式计算从而导致50%加50%大于100%的情况。

hack:给右面的浮动元素添加声明:

​ clear:right 清除右浮动

​ clear:left 清除左浮动

​ clear:both 清除两边的浮动

  <div class="left"></div>
  <div class="right"></div>
    div {
      float: right;
      width: 50%;
      height: 300px;
    }

    .left {
      float: left;
      background-color: orange;
    }

    .right {
      background-color: pink;
      /* 两个都左浮动时,需要给右边的盒子添加clear:right */
      /* clear: right; */
      /* 当两个都右浮动时,需要给右边的盒子添加clear:left; */
      /* clear: left; */
      /* 当前面的盒子左浮动,右边的盒子有浮动时, 需要给右边的盒子添加clear:both;*/
      clear: both;
    }

表单元素高度及对齐方式不一致(IE,MOZ,C,O,S)

描述:表单元素行高对齐方式不一致

hack:给表单元素添加声明:float:left;或vertical-align:top;

去掉表单控件的边框时用border:0; border:none;不能兼容ie7以下浏览器。

按钮元素默认大小不一

描述:各浏览器中按钮元素大小不一致

hack1::统一大小,用a标签模拟

hack2:在input上写按钮的样式,一定要把input的边框去掉。

hack3:如果这个按钮是一个图片,直接把图片作为按钮的背景图即可。

透明

1.opacity:0~1;IE8以上的浏览器

2.filter:alpha(opacity=1~100); IE9及IE9以下的浏览器

列表阶梯BUG(IE6及更低版本的浏览器中)

bug1:在给li标签的子元素中使用了float:left;父元素中没有设置浮动属性,li阶梯状效果。
hack:给父元素设置浮动便能解决此问题

  <ul>
    <li><a href="#">hello</a></li>
    <li><a href="#">hello</a></li>
    <li><a href="#">hello</a></li>
  </ul>
    li a {
      display: block;
      float: left;
      height: 50px;
      background-color: pink;
    }

bug2:当给lI里的A转成块元素,并设置了固定高度时,且给父元素写了浮动后在IE6及更低的版本浏览器里会出现垂直显示。
hack:给a也设置左浮动便可解决。

  <ul>
    <li><a href="#">hello</a></li>
    <li><a href="#">hello</a></li>
    <li><a href="#">hello</a></li>
  </ul>
    li {
      float: left;
    }
    li a {
      display: block;
      height: 50px;
      background-color: pink;
    }

鼠标指针bug

描述:cursor属性的hand属性值只有IE浏览器识别,其它浏览器不识别该声明,cursor属性的pointer属性值IE6.0以上版本及其它内核浏览器都识别该声明。
hack:如统一某元素鼠标指针形状为手型,应添加声明:cursor:pointer;

拓展:鼠标指针

crosshair(十字架)

pointer(手形)

move(移动)

e-resize(左右方向)

ne-resize(向右及向上移动)

nw-resize(向上及向左移动)

n-resize(向上移动)

se-resize(向下及向右)

sw-resize(向下及向左)

s-resize(向下移动)

w-resize(向左移动)

text(文本)

wait(等待状态)

help(帮助)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值