2010-03-05 123 views
1

在相當簡單的網頁中,當懸停在某些鏈接上時,會出現一些類似工具提示的文本。CSS IE懸停效果 - 重疊元素,顯示:塊和崩潰

首先,這裏的測試頁,我的工作:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Tooltip Test Page</title> 
<style type="text/css"> 
html, body, form, table, tr, td, div, p, h1, h2, h3, h4, h5 { 
border:0; 
margin:0; 
padding:0; 
} 

body { 
margin:10px; 
} 

html, body, table { 
font-family:Arial, Helvetica, sans-serif; 
font-size:12px; 
} 

h1 { 
font-weight:bold; 
font-size:16px; 
} 

table {border-collapse:collapse;} 
td {padding:0 8px 0 0;} 

a.tooltip { 
z-index:24; 
text-decoration:none; 
cursor:default; 
position:relative; 
color:#000; 
display:block; 
width:100px; 
} 
a.tooltip span {display:none;} 
a.tooltip:hover, a.tooltip:active { 
z-index:25; 
color:; 
background:; 
/* 
the color and background actually don't matter for their values, 
it's just that these have to change for IE to apply this style properly. 
Leaving out the color or the background makes this fail in different ways. 
*/ 
} 

a.tooltip:hover span, a.tooltip:active span { 
display:block; 
position:absolute; 
color:black; 
background-color:#FFFFCC; 
border:1px solid black; 
padding:1px; 
text-align:left; 
top:0; 
left:0; 
margin-top:-1px; 
} 

td span.s5 {color:#ff0000} 
td span.s6 {color:#0000ff} 

</style> 
<script type="text/javascript"> 
function labelSubmit(label) { 
    document.getElementById('o').value=label; 
    document.BackAt.submit(); 
} 
</script> 
</head> 
<body> 
<h1>tooltip Test Page</h1> 
<table> 
    <tbody> 
    <tr> 
     <td><span class="s6">&#x25a0;</span> Name 3</td> 
     <td class="status"><a class="tooltip" href="" onclick="return false;">Status 6<span>Some very long tooltip text to demonstrate the problem by overlapping the cells below.</span></a></td> 
    </tr> 
    <tr> 
     <td><span class="s6">&#x25a0;</span> Name 1</td> 
     <td class="status"><a class="tooltip" href="" onclick="return false;">Status 6</a></td> 
    </tr> 
    <tr> 
     <td><span class="s6">&#x25a0;</span> Name 2</td> 
     <td class="status"><a class="tooltip" href="" onclick="return false;">Status 6<span>Some tooltip text</span></a></td> 
    </tr> 
    <tr> 
     <td><span class="s6">&#x25a0;</span> Name 4</td> 
     <td class="status"><a class="tooltip" href="" onclick="return false;">Status 6</a></td> 
    </tr> 
    <tr> 
     <td><span class="s5">&#x25a0;</span> Name 5</td> 
     <td class="status"><a class="tooltip" href="" onclick="return false;">Status 5<span>More Notes</span></a></td> 
    </tr> 
    <tr> 
     <td><span class="s6">&#x25a0;</span> Name 6</td> 
     <td class="status"><a class="tooltip" href="" onclick="return false;">Status 6<span>Yet more notes</span></a></td> 
    </tr> 
    </tbody> 
</table> 
</body> 
</html> 

我遇到的問題是從其他值的文本顯示通過提示文本。

將鼠標懸停在第一行第二列上查看效果。

有幾件事情,我試圖完成:

  • 做出懸停更寬的激活區域,因此一些空間懸停到「狀態6」右調出工具提示(比如,目標的總寬度爲100-150像素)。起初,當我將display:block添加到a.tooltip時,IE終止了懸停。我解決了從a.tooltip:hover刪除width:14em。造型上的懸停事件的寬度+ display.blocka元素上會做壞事。

  • 更改工具提示的寬度而不更改列/父元素的寬度a元素(所以工具提示可以更寬並且佔用更少的垂直空間)。使工具提示改變寬度與其內容達到最大寬度的選項,在這一點線條包裝將是真棒,但在IE中可能不可能。只要我在a.tooltip上放置了一個寬度,那麼位於其他行之上而不是懸停源的工具提示部分將讓文本通過這些單元顯示出來。刪除寬度,你會看到文本不再顯示。

  • 懸停效果適用於整個工具提示,因此如果工具提示覆蓋3行,而向下移動鼠標時,由於光標未離開工具提示,因此下兩行將不會激活。懸停效果是否只適用於懸停的初始元素,而不是工具提示本身,因此向下移動鼠標將顯示每行中的每個工具提示?

  • 這將是很好,如果鏈接永遠不會被激活(他們不能把焦點)。我不知道這是否可能。太糟糕的IE不支持懸停在任何元素,但鏈接。

注意:很快IE6將被拋棄,轉而支持IE7。如果它有很大的不同,那麼IE7可以成爲目標瀏覽器。

感謝您的幫助。

+0

「我遇到的問題是來自其他值的文本通過工具提示文本顯示。」你的HTML/CSS似乎在IE 8中工作 – contactmatt 2010-03-09 06:23:54

回答

0

崩潰的答案是IE瀏覽器在懸停的許多邊緣情況下崩潰,特別是如果某些關鍵元素不獲取HasLayout。

Baloneysammitch將彈出窗口放在右側的想法也很好。

2

你不能用css單獨解決這些問題。如你所知,IE不支持:hover僞選擇器,所以你需要通過添加href =「javascript:void(0);」到您的鏈接。

我強烈建議http://craigsworks.com/projects/qtip/作爲jQuery解決方案。您可以專門設置懸停條件,並且功能會隨js關閉而降低,甚至可以與IE6一起使用。此外,您可以將這些工具提示應用於任何標籤,解決您的錨點問題。

即使有了這個插件,您仍然遇到工具提示重疊列表內容的問題,所以您應該將它們放在列表的一側。這樣,您可以將鼠標懸停在列表中,不受工具提示的干擾。