1. 程式人生 > >IE中偽類:hover的使用及BUG

IE中偽類:hover的使用及BUG

:hover 是我們在 CSS 設計中最常運用的偽類之一,許多絢麗效果的實現離不開偽類 :hover,比如我們常見的純 CSS 選單、相簿效果等等。

或許用了這麼久的偽類 :hover,還有部分朋友還不完全瞭解 hover 的規則:

在 CSS1 中此偽類僅可用於 a 物件。且對於無 href 屬性(特性)的 a 物件,此偽類不發生作用。

在 CSS2 中此偽類可以應用於任何物件。

但目前 IE5.5、IE6 僅支援 CSS1 中的 :hover,不過新出的 IE7 是支援 CSS2 中的 :hover。

當我們用偽類 :hover 做某些特殊效果時,依據 CSS2 很好完成,但為了現在佔據主流瀏覽器的 IE6 ,我們又不得不做很多工作,比如給新增a元素等來模擬完成最終的效果。

或許這樣講太空洞,請看下面一個常見的觸發顯示的例子(僅選擇IE6為例講解)。

我們先用 CSS2 的寫法來實現:

XHTML部分:

<ul>
<li>滑鼠移過來觸發我吧!<a href="#" title="">哈哈,終於被你發現了!</a></li>
</ul>


CSS部分:

* {
margin:0;
padding:0;
}
ul {
list-style:none;
margin:100px;
}
li {
height:100px;
width:100px;
background:#000;
font-size:12px;
color:#fff;
position:relative;
}
li a {
display:none;
}
li:hover a{
display:block;
text-decoration:none;
width:100px;
height:100px;
background:#c00;
position:absolute;
top:50px;
left:50px;
color:#fff;
}


大家可以測試發現在 Firefox 等對 CSS2 支援很好的瀏覽器中,可以顯示我們所要達到的效果,但在 IE6 中卻無法實現。

下面讓我們換一種思維,所用 CSS1 的寫法來看看,這個時候由於無法支援 li 元素 :hover 的使用,我們只好把所有文字包含到 a 中,對 a 使用 :hover ,並且將要顯示隱藏的部分放到 span 元素中,首先我們對 XHTML 進行部分調整,調整如下:

XHTML部分:

<ul>
<li><a href="#" title="">滑鼠移過來觸發我吧!<span>哈哈,終於被你發現</span></a></li>

</ul>


CSS 中我們將 a 的設定成塊級元素,並使 a 的大小和寬度和 li 的相同,並設定 a 為相對位置,用 a 來模擬上例中的 li ;而用 span 來模擬上例中的 a ,設定 span在預設情況下隱藏(display:none;),當 a 被觸發時(:hover),則 span 顯示(display:block;)

CSS部分:

* {
margin:0;
padding:0;
}
ul {
list-style:none;
margin:100px;
}
li {
height:100px;
width:100px;
background:#000;
font-size:12px;
}
li a {
display:block;
height:100px;
width:100px;
position:relative;
color:#fff;
text-decoration:none;
}
li span {
display:none;
}
li a:hover span {
display:block;
width:100px;
height:100px;
background:#c00;
position:absolute;
top:50px;
left:50px;
color:#fff;
}


可我們發現上例中的效果,在 IE6 中依然無法顯示,難道我們的程式碼寫錯了,可檢查來檢查去一點錯誤也沒有(不信你找個高高手問問,他們依然會回答你,這程式碼完全正確),難道是標準中的說明是錯的?還是 IE6 瀏覽器連 CSS1 也不支援?很多疑問從四面八方跑來了……

那到底是什麼問題呢?
不是標準說明的錯,也不是 IE 瀏覽器不支援 CSS1,而是 IE 瀏覽器自身解析的問題,是 IE5.5 和 IE6 中偽類:hover 的 BUG。

那又該如何解決這個問題呢?
這個 BUG 可以通過在連結的屬性中增加某些特殊的 CSS 屬性宣告來消除。

下面我們對上面的第二個例子進行實驗,究竟哪些屬性可以幫我們來消除這些 BUG。

對 CSS 程式碼我們增加:

li a:hover {}


對其屬性我們僅設定 width:100px; 發現在 IE6 中依舊沒有變化,我們嘗試著更改 width 的 value ,比如使其 width:99px,奇怪的事情發生了,在 IE6 中,隱藏的部分在觸發的時候顯示出來了。我們再對 li a:hover 的屬性僅設定 color 來測試(初始值為 #fff),更改 color 值,發現在 IE6 下卻也不能觸發顯示,奇怪,奇怪,真奇怪……是不是依舊是一頭霧水……沒關係,繼續往下實驗,或許歸類了我們就能發現規律了!

我們再用其他屬性進行設定:width,positon,background,text-decoration,font-size,font-weight,font-family,border,float,display,font-style,margin,padding,text-align,overflow,text-transform,text-indent,z-index,vertical-align。

我們發現除了 text-decoration,color,z-index 不能觸發顯示(對於不能觸發顯示的部分,可以還有某些遺漏的屬性,歡迎朋友補充)外,其他屬性均可以做為消除偽類 :hover BUG 的特定屬性。

說明:

  1. 對於 dispaly 不可以用本例來測試,可另外寫個更簡單的例子(去除 ul/li,a和span中的position )。在實際應用中懌飛不建議改變 display 值來做為特定屬性消除此 BUG,而且在某些例子中此屬性不一定能消除 BUG。
  2. 對於做為特定屬性的 border 和 background 中的顏色我們還可用全寫和簡寫來改變,如 #fff 和 #ffffff 在消除 BUG 中解析為 2 個不同的值。

相關推薦

IE:hover的使用BUG

:hover 是我們在 CSS 設計中最常運用的偽類之一,許多絢麗效果的實現離不開偽類 :hover,比如我們常見的純 CSS 選單、相簿效果等等。 或許用了這麼久的偽類 :hover,還有部分朋友還不完全瞭解 hover 的規則: 在 CSS1 中此偽類僅可用於 a 物件

html+css元素之分標籤書寫

css選擇器有偽類和偽元素之分,以下是兩者區別: 偽類:書寫時元素加一個冒號然後寫屬性值; 偽元素:書寫時元素加兩個冒號然後寫屬性值; 一般偽元素同樣只寫一個冒號,瀏覽器照常識別,所以兩者寫法區分目前並不嚴格; 實際運用時根據作用物件,兩者運用範圍有差異:偽類運用於樣式,偽元素運用於結構

超連結a標籤區別用法

首先“超連結”就是我們 html 中的 a 標籤,這個應該大家都沒問題。再接著,"偽類":什麼是偽類? css 對於偽類的解釋是用於向某些選擇器新增特殊的效果。簡單點說,就是你沒定義這個類,但它確

css/元素詳解

input 其他 中文 tro 網頁 單元 web link 語言 一、偽類和偽元素 偽類和偽元素都是用來修飾不在文檔樹中的部分,區別在於, 偽類用於當已有元素處於的某個狀態時,為其添加對應的樣式,這個狀態是根據用戶行為而動態變化的(如:hover/:active)。

JavaBigDecimal介紹用法

exceptio decimal body ue4 mage oat 比較運算符 mod 乘法   Java中提供了大數字(超過16位有效位)的操作類,即 java.math.BinInteger 類和 java.math.BigDecimal 類,用於高精度計算.   其

Java包裝作用注意點

轉載地址: https://blog.csdn.net/liu_005/article/details/79585956 Java中對每種基本型別都有一個對應的包裝類,這裡主要講解包裝類的作用和包裝類使用時的一些注意點。 包裝類的作用 作用主要有以下兩方面:  - 編

css3選擇器:target的使用

今天由於在做任務13,裡面有一個子任務是要求用css寫出一個簡單的圖片輪播,剛開始真的是完全沒有思路,想著不用js怎麼繫結點選事件呢,看了別人的一些實現方法,發現:target是一個神奇的東西。 如果想看用css3實現的圖片輪播,狠狠點選這裡demo 剛

使用hover顯示隱藏

當滑鼠移入某標籤時,div顯示,移出時,div隱藏,並且滑鼠在div上時,也是顯示的 記錄,直接上程式碼 <!DOCTYPE html> <html> <head> <title></title> <sty

JAVA集合說明區別

集合類說明及區別Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection介面   Collection是最基本的集合介面,一個C

csshoverbug

在 CSS1 中:hover僅可用於 a 物件。且對於無 href 屬性(特性)的 a 物件,此偽類不發生作用。 在 CSS2 中:hover可以應用於任何物件。舉個栗子 :hover不生效的程式碼: css: .task-t-l-disable:hover{ color:

【轉】鏈接(:hover)CSS背景圖片有閃動BUG

ref 重新 常用 底部 例如 ecc html 鏈接 cache 來源:http://www.css88.com/archives/744 -----------------------------------------------------------------

學習筆記---css元素與(迷惑我的:after與:hover

一直被偽類與偽元素所迷惑,以為是同一個屬性名稱,這兩天看css動畫,越來越多的看到諸如   a:hover:after,a.hover:after 的用法,越來越糊塗,索性翻翻定義研究研究。 本文出現的偽類偽元素均為css2、css1中內容。css3中偽類、偽元素還未做

HTML頁面5種超酷的選擇器:hover效果

第三方 ack 場景 solid paste form 討論 out 狀態 想在自己的網站中應用超酷的hover效果嗎?也許你可以從如下的這些實例中獲得一些靈感,如果你喜歡這些效果,也可以直接拷貝代碼並應用到你的站點。 給平淡的站點帶來活力 hover效果能給網頁增

IPv4的A,B,C子網掩碼那些事

來看 了解 擁有 nbsp 開發 信息 alt 位或 其余 IP 地址的主要類型有五種 A B C D 和 E 一般 A B C 類地址更為常用 每類地址都是由 32 位或 4 個字節組成 A類地址: 在 A 類地址中第一個 8 位字節表示網絡部分 其余 3 個 8 位字節

SQL Server的鎖用法

兩個 註意 超時設置 date 帶來 原因 不更新數據 自己 col 一. 為什麽要引入鎖 多個用戶同時對數據庫的並發操作時會帶來以下數據不一致的問題: 丟失更新 A,B兩個用戶讀同一數據並進行修改,其中一個用戶的修改結果破壞了另一個修改的結果,比如訂票系統 臟讀 A用戶修

awk命令之 - 統計/etc/passwd文件各用戶所使用的shell出現次數

linux 命令 awk 統計/etc/passwd文件中各用戶所使用的shell類型及出現次數awk -F: ‘BEGIN{printf"%-15s\t%s\n","ShellType","Count"}{shellType[$NF]++}END{for(i in shellType)print

MySQL的數據創建

浮點 for rop base 創建 creat reat float text MySQL創建: 1.創建數據庫create database test2; 2.刪除數據庫drop database test2;3.創建表create table ceshi( id

【discuzX2】/source/class/class_core.php文件數據庫操作DBdb_mysql分析

mathjax fetch bus _for pre 影響 str sql_mod 進行 <?php /** * Discuz MySQL 類的支持 程序中一般不直接使用此類,而是使用DB類,DB類對db_mysql類中的方法又進行了二次封裝 * *

javaProperties讀取properties屬性值

key ioe failed .cn pre new ava 進行 html 在項目的應用中,經常將一些配置放入properties文件中,在代碼應用中讀取properties文件,就需要專門的類Properties類,通過這個類可以進行讀取。 深入理解和學習的

Python函數型傳值和冗余參數函數的遞歸調用

rgb {} rgs fun mini eight 分享圖片 not strong 1.多類型傳值和冗余參數多類型傳值: def fun(x,y): return x +y print fun(3,5) 8 print fun(*t)