Ответ 1
он будет работать, если вы установите цвет фона или рамку...
если вы можете сопоставить любой из них с существующим взглядом, тогда вы будете в порядке.
(фоновое изображение кажется самым ненавязчивым решением)
У меня есть div с дочерним div внутри него. Я использую jQuery для отображения/скрыть дочерний div всякий раз, когда мышь наводится на родительский div (родительский div охватывает всю нижнюю часть страницы. Ширина: 100% и высота 100 пикселей). Я использовал панель firebug и т.д., Чтобы подтвердить, что родительский div находится на странице.
Я могу навести курсор на пустой родительский div в Chrome и FireFox, и все работает нормально. IE требует, чтобы у меня был какой-то текст внутри, чтобы навести на него курсор. Событие div hover не будет запускаться только с пустым div.
Все правдоподобные работы для этой проблемы?
- Update
Пробовал все ваши предложения, но пока ничего не получилось.
<div id="toolBar">
<div>
<button id="btnPin" title="Click to pin toolbar" type="button">
<img id="pin" src="../../images/icons/unpin.png" alt="Pin" /></button>
<img src="../../images/icons/search.png" border="0" alt="Search" />
</div>
</div>
Вышеуказанный html содержится в контейнере div главной страницы. Детский div скрыт с помощью jQuery с некоторыми событиями ввода/вывода. Родительский div (toolBar) всегда отображается на странице. При наведении на toolBar отображается дочерний div.
Вот код jQuery
$('#toolBar').hover(ToolBar_OnHover, ToolBar_OnBlur);
function ToolBar_OnHover() {
$(this).children().fadeIn('fast');
$(this).animate({ height: "100px" }, "fast");
}
function ToolBar_OnBlur() {
$(this).children().fadeOut('fast');
$(this).animate({ height: "50px" }, "fast");
}
Наконец, немного css
#toolBar { width: 100%; height: 100px; text-align:center; vertical-align:middle; position: absolute; bottom: 0; background-color: Transparent; }
#toolBar div { padding: 5px 5px 0px 5px; width:75%; height: 95px; background: transparent url('/images/toolbar-background.png') repeat-x; margin-right: auto; margin-left: auto; }
он будет работать, если вы установите цвет фона или рамку...
если вы можете сопоставить любой из них с существующим взглядом, тогда вы будете в порядке.
(фоновое изображение кажется самым ненавязчивым решением)
Никаких комментариев и фильтров для меня не работает. Div никогда не отображается, поэтому нет возможности наведения.
Окончательное решение:
.aDiv {
background: transparent url(../images/transparent.gif) repeat;
}
С одним пиксельным прозрачным изображением gif. Конечно, это работает!
Я знаю, что на этот вопрос был дан ответ, но я столкнулся с той же проблемой. Пустой div не запускает функцию. И если бы у него была граница, то только сама граница начала бы эту функцию. Я много пробовал, ничего не помогал. Вот мое решение, это почти то же самое, что я не использовал изображение. Добавьте это в свой CSS:
div { /* write the element name, class or id here */ background: #FFF; /* you can choose any colour you like, 1.0-fully visible */ opacity:0.0; /* opacity setting for all browsers except IE */ filter: alpha(opacity = 0); /* opacity setting for IE, 0-transparent & 100-fully visible */ }
Если вы хотите сохранить свой DIV, это сработало для меня:
background-color: rgba(0,0,0,0.001);
@Skateball: это решение работает, но также скрывает любые дочерние элементы в FF/chrome. Вот мой прием:
background:#000;
background:rgba(0,0,0,0);
filter:alpha(opacity=0);
Это хакки, и я не знаю, изменит ли он макет, но вы всегда можете просто положить
внутри div.
Просто вставьте пустой комментарий внутри "пустого" элемента.:)
<div><!-- --></div>
Это заставит IE отобразить элемент
Возможно, что флаг hasLayout должен быть принудительным.
Это можно сделать, применив к нему свойство CSS zoom:1
.
Я нашел лучший способ поместить div для отслеживания событий мыши над областью, чтобы сделать ширину div 1px и необходимую вам высоту. Затем дайте div прозрачную границу справа от нужной ширины. Причина, по которой это работает лучше, чем прозрачное изображение, состоит в том, что если вы используете изображение, то вы не можете отслеживать события mousemove, например, перетаскивать, без потери фокуса div (вместо этого вы будете перетаскивать изображение). У меня была эта проблема, когда как jQuery UI слайдер или перетаскивание мышью были использованы для очистки анимации. Вот простая версия того, как выглядел мой код.
//container div to hold the animation images this part doesn't really matter to answer the question
<div style="position:absolute; left:0px; top:0px; width:200px; height:200px">
// a bunch of images stacked like one of those animation flip books you made when you were a kid
<img id="image01" src="blah01.jpg" />
<img id="image02" src="blah01.jpg" />
<img id="image03" src="blah01.jpg" />
// and so on
</div>
//
// now the div that tracks the mouse events this is what I am describing to answer the question
// it could certainly be used above nav items and would have less load time than an image
<div style="position:absolute; left:-1px; top:0px; width:1px; height:200px; border-right: solid 200px transparent; />
В моем приложении для каждых 2 пикселей мышь перемещалась влево или вправо, я бы дал соответствующую видимость изображения, скрывая все остальные и бинго, у вас есть анимация. (Пустой div работал нормально во всех браузерах, кроме IE, но это работало как в IE, так и в не IE, поэтому не нужно писать его двумя способами.)
.trasnparentIE
{
background: url(../images/largeTransparent.gif) repeat;
}
когда я добавил границу, событие зависания запускалось только при наведении мыши или на очень близком к границе, но мне не нужна граница, поэтому я просто использую прозрачный фон, и он работает для меня... прозрачный фон делал трюк для меня (комментарии и nbsp тоже не работали...)
Вы можете установить непрозрачность, чтобы сделать слой невидимым, и вы также должны установить фон
{
background: white;
opacity: 0;
}
Я смог использовать "Пробел Брайля", который является невидимым непробельным символом, который все еще "там", занимает пробел и позволяет событиям, таким как наведение курсора, по-прежнему срабатывать. Ниже приведен фрагмент кода (div не имеет нулевой ширины, как было бы, если бы он был пустым или содержал только пробел):
.notActuallyEmpty {
background-color: gray;
width:50px;
}
⠀⠀
<div class="notActuallyEmpty">⠀</div> <!--Unicode Character '⠀' (U+2800)--!>
Если вам не нужно поддерживать IE6. В графической программе (Photoshop) создайте 1x1 изображение белого квадрата. Уменьшите непрозрачность до 1%. Сохранить как PNG24 или GIF. Затем сделайте это фоновое изображение для прозрачного DIV.
Это устраняет проблему и сохраняет непрозрачность любых дочерних элементов.