Здесь есть несколько проблем. Самая простая реализация:
$("li").hover(function() {
$(this).find("span.meta").stop().fadeIn();
}, function() {
$(this).find("span.meta").stop().fadeOut();
});
, который будет работать. Проблема в том, что промежутки являются встроенными элементами, и fadeIn()
изменит его на элемент уровня блока.
Примечание: добавление stop()
имеет хорошую привычку, иначе вы можете получить непреднамеренные эффекты, если быстро запустите несколько анимаций для одной и той же цели.
Вы можете сделать это и с классами:
$("li").hover(function() {
$(this).find("span.meta").removeClass("hidden");
}, function() {
$(this).find("span.meta").addClass("hidden");
});
с:
span.hidden { display: none; }
но вы теряете эффекты постепенного появления и исчезновения таким образом. Однако это решает проблему display: block
.
В качестве альтернативы вы можете animate()
opacity
, но opacity
на самом деле не поддерживается в IE. См. непрозрачность :
Примечание о совместимости IE
Если вы хотите, чтобы прозрачность работала во всех IE
версии, порядок должен быть:
.opaque {
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; // first!
filter: alpha(opacity=50); // second!
}
Если вы не используете этот заказ,
IE8-as-IE7 не применяет прозрачность,
хотя IE8 и чистый IE7 делают.
Этот код выглядит примерно так:
$("li").hover(function() {
$(this).find("span.meta").stop().animate({opacity: 0.0});
}, function() {
$(this).find("span.meta").stop().animate({opacity: 1.0});
});
Один вопрос, на который вам нужно ответить: вы хотите, чтобы «мета» контент не отображался или просто не был виден? Есть разница Не быть оказанным - это как display: none
. Быть невидимым - это как opacity: 0
, что потенциально может сбить пользователя с толку, так как текст все равно будет доступен для выбора.
ИМХО, я думаю, вам лучше принять блочную природу дисплея или использовать вместо него всплывающую подсказку (даже богатую подсказку).