浏览器兼容性

兼容性

1.儿子选择器

IE7开始兼容,IE6不兼容。

div>p{

color:red;

}

div的儿子p。和div的后代p的截然不同。

能够选择:

<div>

<p>我是div的儿子</p>

</div>

不能选择:

<div>

<ul>

<li>

<p>我是div的重孙子</p>

</li>

</ul>

</div>

 

2.序选择器

IE8开始兼容;IE67都不兼容

 

选择第1li

<style type="text/css">

ul li:first-child{

color:red;

}

</style>

 

选择最后一个1i

ul li:last-child{

color:blue;

}

如果要求兼容IE67,那么就要自己写类名:

<ul>

<li class="first">项目</li>

<li>项目</li>

<li>项目</li>

<li>项目</li>

<li>项目</li>

<li>项目</li>

<li>项目</li>

<li>项目</li>

10  <li>项目</li>

11  <li class="last">项目</li>

12  </ul>

用类选择器来选择第一个或者最后一个:

ul li.first{

color:red;

}

ul li.last{

color:blue;

}

 

3.下一个兄弟选择器

IE7开始兼容,IE6不兼容。

+表示选择下一个兄弟

<style type="text/css">

h3+p{

color:red;

}

</style>

选择上的是h3元素后面紧挨着的第一个兄弟。

    <h3>我是一个标题</h3>

<p>我是一个段落</p>

<p>我是一个段落</p>

<p>我是一个段落</p>

<h3>我是一个标题</h3>

<p>我是一个段落</p>

<p>我是一个段落</p>

<p>我是一个段落</p>

<h3>我是一个标题</h3>

10  <p>我是一个段落</p>

11  <p>我是一个段落</p>

12  <p>我是一个段落</p>

13  <h3>我是一个标题</h3>

4.

IE6层面兼容的: 标签选择器、id选择器、类选择器、后代、交集选择器、并集选择器、通配符。

p

#box

.spec

div p

div.spec

div,p

*

IE7能够兼容的:儿子选择器、下一个兄弟选择器

div>p

h3+p

IE8能够兼容的:

ul li:first-child

ul li:last-child

 

5.

第一,IE6,不支持小于12px的盒子,任何小于12px的盒子,在IE6中看都大

解决办法很简单,就是将盒子的字号,设置小(小于盒子的高),比如0px

height: 4px;

_font-size: 0px;

 

css属性之前,加上下划线,这个属性就是IE6认识的专有属性。

比如:

_background-color: green;

 

解决微型盒子,正确写法:

height: 10px;

_font-size:0;

 

第二,IE6不支持用overflow:hidden;来清除浮动的

解决办法,以毒攻毒。追加一条

_zoom:1;

 

完整写法:

overflow: hidden;

_zoom:1;

两个IE6的兼容问题,都是通过多写一条hack来解决的。

这个我们称为伴生属性。

height:6px;

_font-size:0;

 

overflow:hidden;

_zoom:1;

 

overflow:hidden;的本意,就是溢出盒子的border的东西隐藏,这个功能是IE6兼容的。不兼容的是overflow:hidden;清除浮动的时候。

 

6.关于marginIE6兼容问题

IE6双倍margin bug

当出现连续浮动的元素,携带和浮动方向相同的margin时,队首的元素,会双倍marign

13  <ul>

14  <li></li>

15  <li></li>

16  <li></li>

17  </ul>

解决方案:

1)使浮动的方向和margin的方向,相反。

所以,你就会发现,我们特别喜欢,浮动的方向和margin的方向相反。并且,前端开发工程师,把这个当做习惯了。

float: left;

margin-right: 40px;

 

2)使用hack

单独给队首的元素,写一个一半的margin

<li class="no1"></li>

 

14 ul li.no1{

15  _margin-left:20px;

16 }

 

7.z-index

z-index值表示谁压着谁。数值大的压盖住数值小的。

● 只有定位了的元素,才能有z-index值。也就是说,不管相对定位、绝对定位、固定定位,都可以使用z-index值。而浮动的东西不能用。

z-index值没有单位,就是一个正整数。默认的z-index值是0

● 如果大家都没有z-index值,或者z-index值一样,那么谁写在HTML后面,谁在上面能压住别人。定位了的元素,永远能够压住没有定位的元素。

● 从父现象

 

8.访问节点  

  getElementById()   id 访问节点

  getElementsByTagName()    标签访问节点

  getElementsByClassName()   类名    有兼容性问题

  主流浏览器支持     ie 67 8  不认识   就要封装自己的类

9.兄弟节点

nextSibling  下一个兄弟    亲的       ie 678认识

nextElementSibling   其他浏览器认识的     

previousSibling   同理  上一个兄弟   

previousElementSibling

我们想要兼容    我们可以合写 ||

必须先写 正常浏览器  后写  ie678  

 

10.子节点 

firstChild    第一个孩子  ie678

firstElementChild  第一个孩子   正常浏览器  

var one.firstElementChild || one.firstChild;   

lastChild

lastElementChild

 

11.孩子节点

childNodes    选出全部的孩子

childNodes:它是标准属性,它返回指定元素的子元素集合,包括HTML节点,所有属性,文本节点     (嫡出)

火狐 谷歌等高本版会把换行也看做是子节点

利用  nodeType == 1 时才是元素节点     来获取元素节点

children   重要  选取所有的孩子 (只有元素节点)

ie 678  包含 注释节点     这个要避免开。

 

12.事件对象

我们学过一些事件 :   onmouseover   onmouseout    onclick .....

btn.onclick = function(event) {  语句 }

event  就是事件的对象    指向的是 事件  是   onclick  

再触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息。所有浏览器都支持event对象,但支持的方式不同。

比如鼠标操作时候,会添加鼠标位置的相关信息到事件对象中。

普通浏览器支持 event  

ie 678 支持 window.event

所以采取兼容性的写法

  varevent =event ||window.event;

 

13.pageX  clientX  screenX 区别

 screen X   screenY   

 是以我们的电脑屏幕 为基准点   测量

pageX  pageY   

以我们的  文档   (绝对定位)  的基准点对齐    ie678 不认识    

clientX   clientY

可视区域为基准点   类似于    固定定位  

 

14.scrollTop

页面滚动效果  

window.onscroll = function() { 页面滚动语句  }

谷歌浏览器 和没有声明 DTD  <DOCTYPE >:  

  document.body.scrollTop;  

火狐 和其他浏览器   

  document.documentElement.scrollTop;

 ie9+  和 最新浏览器   都认识

  window.pageXOffset;     pageYOffset  scrollTop

 兼容性写法:  

 

1  var scrollTop = window.pageYOffset || document.documentElement.scrollTop

2         || document.body.scrollTop || 0;

 

15.检测屏幕宽度(可视区域)

ie9及其以上的版本

window.innerWidth  

标准模式

document.documentElement.clientWidth

怪异模式

document.body.clientWidth

 

16.事件冒泡

顺序

E 6.0:

div -> body -> html -> document

其他浏览器:

div -> body -> html -> document -> window

不是所有的事件都能冒泡。以下事件不冒泡:blurfocusloadunload

 

17.阻止冒泡的方法

if(event && event.stopPropagation){
    event.stopPropagation();
}else{
    event.cancelBubble = "true";
}

 

18.判断当前对象

var eventTarget = event.target ? event.target.id : event.srcElement.id;

 

19.获得用户选择内容

if(window.getSelection){
    txt = window.getSelection().toString();
}else{
    txt = document.selection.createRange().text;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值