1. 程式人生 > >【css】相容IE8及IE8以下偽類選擇器

【css】相容IE8及IE8以下偽類選擇器

前言:css偽類選擇器很好用,讓我們的工作變的更方便。但有個麻煩,IE8及IE8以下對很多偽類選擇器並不相容。

這13個偽類選擇器是比較長用到的:


這時會發現,IE9對這些偽類選擇器都能相容。IE8、IE7對 :first-child,:hover是相容的,IE8對:focus是相容的,而其他IE7,IE8並不相容。

一、css相容

<body>
     <div>
           <p>aaaa</p>
           <p>aaaa</p>
           <p>aaaa</p>
           <p>aaaa</p>
     </div>        
</body>

 如果要讓第2個p元素變成“藍色”字型.

一般是這樣寫  div p:nth-child(2) { color:blue; }

或者  div p:nth-of-type(2) { color:blue; }

或者  就是給第2個p元素加上class了。

IE7,IE8上進行相容:

<body>
	<style>
    	div p:first-child+p  { color:blue; }
    </style> 
    <div>
        <p>aaaa</p>
        <p>aaaa</p>
        <p>aaaa</p>
        <p>aaaa</p>
    </div>        
</body>

這時就可以在IE7,IE8上進行相容了

同樣的,如果是要讓第三p標籤color變藍色,可以這樣寫

<body>
	<style>
    	div p:first-child+p+p  { color:blue; }
    </style> 
    <div>
        <p>aaaa</p>
        <p>aaaa</p>
        <p>aaaa</p>
        <p>aaaa</p>
    </div>        
</body>

二、通過jquery相容(這裡的jquery要用2.0.0以下的,不然會報錯)

①讓第二個p標籤變藍色的話,可以用jquery獲取到第二個p元素標籤

if (navigator.appName === 'Microsoft Internet Explorer') { //判斷是否是IE瀏覽器
	if (navigator.userAgent.match(/Trident/i) && navigator.userAgent.match(/MSIE 7.0/i)) { //判斷是否是IE7
		$('p:nth-child(2)').css('color','blue');
		//$('p:nth-of-type(2)').css('color','blue');
	}else if(navigator.userAgent.match(/Trident/i) && navigator.userAgent.match(/MSIE 8.0/i)){ //判斷是否是IE8
		$('p:nth-child(2)').css('color','blue');
		//$('p:nth-of-type(2)').css('color','blue');
	}
}

②如果是讓第二個,第四個p標籤變藍色的話

if (navigator.appName === 'Microsoft Internet Explorer') { //判斷是否是IE瀏覽器
	if (navigator.userAgent.match(/Trident/i) && navigator.userAgent.match(/MSIE 7.0/i)) { //判斷是否是IE7
		$('p:nth-child(2n)').css('color','blue');
		//$('p:nth-of-type(2n)').css('color','blue');
	}else if(navigator.userAgent.match(/Trident/i) && navigator.userAgent.match(/MSIE 8.0/i)){ //判斷是否是IE8
		$('p:nth-child(2n)').css('color','blue');
		//$('p:nth-of-type(2n)').css('color','blue');
	}
}

以此類推,以上所有的偽元素標籤都可以通過該方法進行相容

三、tip

<body>
	<style>
    	div p:first-child { color:blue; }
		div .active { color:red; }
    </style> 
    <div>
        <p class="active">aaaa</p>
        <p >aaaa</p>
        <p>aaaa</p>
        <p>aaaa</p>
    </div>        
</body>

執行程式碼發現,第一個p標籤還是紅色的,說明:偽類選擇器的優先順序比class選擇器的優先順序還要高。