当我通过悬停悬停在某些图像上时,格式化底部会包含额外的间距。 http://jsfiddle.net/44jQa/72/。这是在前两张图片中发生的。此外,当内容出现在悬停时,有时旧内容仍然存在。当悬停快速且旧内容不淡出时会发生这种情况。我该如何解决这些问题?
这是我的js:
function showPart(id) {
$('#content .part' + id).fadeIn('400').addClass('show');
}
$('li').on('mouseenter', function () {
$(this).find('img').fadeTo(400, 1);
$(this).find('img').addClass("LHover");
var id = $(this).data('id');
if ($('.show').length == 0) {
showPart(id);
} else {
$('.show').removeClass('show').fadeOut('100', function () {
showPart(id);
});
}
}).on('mouseleave', function () {
$(this).find('img').fadeTo(400, '.5');
$(this).find('img').removeClass("LHover");
});
答案 0 :(得分:2)
答案 1 :(得分:2)
答案 2 :(得分:1)
你的问题是
.LHover {
border: 1px solid #000;
}
由于您在图像的每一侧都添加了1px边框,因此每个方向的边界增加1px,从而导致其他图像移位并导致问题。
如果删除边框,则不会发生这种情况。尝试实施投影,这不会导致任何移动。
答案 3 :(得分:1)
问题1:跳跃
虽然所有其他答案都是有效的(边界显然是有罪的),但我认为我会提供另一种解决方案,即更容易和更好的跨浏览器(轮廓和阴影不是很好支持,边框是)。我认为删除边框不是一个有效的选项,因为它是设计的一部分。奇怪的是被接受作为答案(这是一个解释,而不是一个解决方案)。
我要做的是默认情况下在图像上添加边框,但将颜色设置为透明。然后,您可以在悬停时更改边框颜色。像这样:
.lrow > img {
border: 1px solid transparent;
...
}
.lrow > img.LHover {
border-color: #000;
}
要查看操作中的代码:http://jsfiddle.net/Pevara/44jQa/80/
问题2:淡出
而不是使用javascript来实现这一点,我会寻求一个完整的CSS解决方案。我同意并非所有浏览器都支持这一点,但它会优雅地降级,并且可以说明并非所有用户都启用了js,然后它根本不会降级,而只是失败。当快速移动时,css解决方案不会造成任何问题......
我改变了什么:
HTML现在看起来像这样:
<div id="tabs">
<ul class='clearfix'>
<li class="person">
<img class='photo' src="http://unclesmiley.files.wordpress.com/2010/01/smiley1.jpg" alt="Smiley face" height="42" width="42" />
<p class="name">A</p>
<p class='title'>Co-Director</p>
<p class='description'>1 Lorem ipsum</p>
</li>
...
</ul>
</div>
和css:
#tabs ul {
position: relative; /* to act as reference for the .description */
}
.description {
opacity: 0; /* we use opacity to hide, because we want to be able to fade */
position: absolute;
top: 100%;
left: 0;
width: 100%;
transition: opacity .4s; /* we want to fade opacity on hover */
}
.person {
float: left;
width: 135px;
}
.photo {
opacity: .5;
border: 1px solid transparent;
transition: opacity .4s, border-color .6s; /* we want to fade opacity and bordr */
}
.person:hover .photo {
border-color: #000;
opacity: 1;
}
.person:hover .description {
opacity: 1;
}
(对于clearfix类,我建议你查看谷歌,如果你不明白,那里有很多信息)
可以在这里找到一个工作示例: http://jsfiddle.net/Pevara/44jQa/81/
<强>更新强>
要保留状态,您需要一些javascript。通过向悬停的人添加一个类,并在另一个人收到悬停时删除它,我会很简单。
您只需要为:悬停样式添加一些额外的选择器。在您看到.person:hover [something]
的任何地方,您都会添加一个额外的选择器,如逗号.person.active [something]
,以逗号分隔。
javascript会变得非常简单,看起来像这样:
$('#tabs .person').hover(function() {
// remove the previous active
$('#tabs .person.active').removeClass('active');
// add the active class to the current
$(this).addClass('active');
});
这就是它的全部内容。
我更新了我的小提琴: http://jsfiddle.net/Pevara/44jQa/115/