CSS IE Hover Effect - перекрывающиеся элементы, отображение: блок и сбои - PullRequest
1 голос
/ 05 марта 2010

На довольно простой веб-странице при наведении курсора на некоторые ссылки появляется текст, напоминающий всплывающую подсказку.

Для начала вот тестовая страница, с которой я работаю:

<!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>

Проблема, с которой я сталкиваюсь, заключается в том, что текст из других значений отображается в тексте всплывающей подсказки.

Наведите курсор на первую строку, второй столбец, чтобы увидеть эффект.

Есть несколько вещей, которые япытаюсь выполнить:

  • Расширить область активации для наведения мыши, чтобы при наведении курсора на некоторое пространство справа от "Status 6" была вызвана всплывающая подсказка (скажем, 100-150 пикселейобщая ширина цели).Сначала, когда я добавлял display:block к a.tooltip, IE зависал при наведении курсора.Я решил это, удалив width:14em из a.tooltip:hover.Стилизация ширины события наведения + display.block на элементе a делает ПЛОХО.

  • Изменение ширины всплывающей подсказки без изменения ширины столбца / родительского элемента a элемент (поэтому подсказка может быть шире и занимать меньше места по вертикали).Опции для создания всплывающих подсказок изменяют ширину с ее содержимым до максимальной ширины, и в этот момент перенос строк будет потрясающим, но, вероятно, невозможным в IE.Как только я поместил ширину на a.tooltip, часть всплывающей подсказки, которая находится выше других строк, чем источник при наведении, пропускает текст из этих ячеек.Удалите ширину, и вы увидите, что текст больше не просвечивает.

  • Эффект наведения мыши применяется ко всей подсказке, поэтому если при перемещении подсказка покрывает 3 строкимыши вниз, следующие 2 строки не активируются, потому что курсор не покинул подсказку.Может ли эффект наведения применяться только к исходному элементу, наведенному на указатель мыши, а не к самой всплывающей подсказке, поэтому перемещение мыши вниз покажет каждую всплывающую подсказку в каждой строке?

  • Было бы неплохо, если бы ссылки моглиникогда не активировать (они не могут сфокусироваться).Я не знаю, возможно ли это.Жаль, что IE не поддерживает hover ни на каких элементах, кроме ссылок.

Примечание: скоро IE6 будет заброшен в пользу IE7.Если это имеет большое значение, то IE7 может быть целевым браузером.

Спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2010

Вы не сможете решить эти проблемы только с помощью css. Как вы уже знаете, IE не поддерживает псевдо-селектор: hover, поэтому вам нужно будет сделать ссылки неактивными, добавив href = "javascript: void (0);" на ваши ссылки.

Я настоятельно рекомендую http://craigsworks.com/projects/qtip/ в качестве решения для jquery. Вы можете специально установить условия наведения, и функциональность ухудшается при отключенном js, и это даже работает с IE6. Кроме того, вы можете применить эти всплывающие подсказки к любому тегу, решая проблемы с привязкой.

Даже с этим плагином у вас все еще есть проблема с подсказками, перекрывающими содержимое списка, поэтому вы должны расположить их по краям списка. Таким образом, вы можете навести указатель мыши вниз по списку без вмешательства подсказки.

0 голосов
/ 06 апреля 2010

Ответом на сбой является то, что IE во многих крайних случаях просто зависает при наведении, особенно если определенные ключевые элементы не получают HasLayout.

Идея Baloneysammitch поставить всплывающие окна вправо также хороша.

...