2010-10-22 468 views
0

我希望创建一个包含在<ul>图像的幻灯片:CSS相对绝对定位导致容器没有高度

<ul> 
    <li><a href="images/01/large.jpg"><img src="images/01/default.jpg"></a></li> 
    <li><a href="images/02/large.jpg"><img src="images/02/default.jpg"></a></li> 
    <li><a href="images/03/large.jpg"><img src="images/03/default.jpg"></a></li> 
    <li><a href="images/04/large.jpg"><img src="images/04/default.jpg"></a></li> 
    <li><a href="images/05/large.jpg"><img src="images/05/default.jpg"></a></li> 
    <li><a href="images/06/large.jpg"><img src="images/06/default.jpg"></a></li> 
    <li><a href="images/07/large.jpg"><img src="images/07/default.jpg"></a></li> 
    <li><a href="images/08/large.jpg"><img src="images/08/default.jpg"></a></li> 
    <li><a href="images/09/large.jpg"><img src="images/09/default.jpg"></a></li> 
    <li><a href="images/10/large.jpg"><img src="images/10/default.jpg"></a></li> 
    <li><a href="images/11/large.jpg"><img src="images/11/default.jpg"></a></li> 
    <li><a href="images/12/large.jpg"><img src="images/12/default.jpg"></a></li> 
    <li><a href="images/13/large.jpg"><img src="images/13/default.jpg"></a></li> 
</ul> 
<style> 
    ul { 
     list-style-type: none; 
     margin: 0; 
     padding: 0; 
     position: relative; 
    } 
    li { 
     display: none; 
     list-style-type:none; 
     margin:0; 
     padding:0; 
     position: absolute; 
    } 
</style> 

你可以看到的HTML标记和CSS是相当直截了当。我遇到的问题是,尽管所有图像的大小相同,但大小并不是预先知道的。因此,我无法在<ul>上设置固定高度,但我确实必须 - 因为相对定位元素中的绝对定位元素意味着容器的高度为零,图像开始出现在其下方的内容上。

我正在使用jQuery,所以请指导我使用基于CSS和/或jQuery的解决方案。 请注意是我以前已经尝试过:

$("ul").height(
    $("ul li:eq(0)").outerheight() 
) 

但是,在文件准备好,图像不加载,因此高度未知。我也尝试添加延迟/等待$("ul li:eq(0)").outerheight() > 0,但这给IE中的问题。 IE在部分下载图像时通常会返回大于零的值,但如果该值通常低于实际图像高度,则会返回该值。让我知道你是否需要任何澄清。

+0

使用image.onload记录图像的高度 – pharalia 2010-10-22 14:48:06

+0

使用jQuery?你能否给我一个例子或者指点我的文档? – 2010-10-22 14:51:10

回答

1

我会说这将会是技术上更好地从对立的角度做到这一点。删除显示:无;从你的CSS,然后获取页面加载时框的高度(这样,没有JavaScript的人仍然可以看到图像)。然后,通过javascript将li的display属性设置为none。

您将获得高度和相同的功能!

+0

I.e.在window.load而不是document.ready上计算高度? – 2010-10-22 15:00:07

+0

我很确定这些图片可能没有加载,但是它们的高度应该在文档准备好时计算出来? @萨尔曼 - 不。正常渲染页面,显示所有内容,然后使用javascript隐藏不需要的内容 – Alex 2010-10-22 15:02:51

+0

不能,它会在document.ready上返回0高度,除非图像被缓存。我正在做你刚才所说的内容:我离开了第一个显示:列表项目;'但是在document.ready中没有高度,以防页面加载新鲜。 – 2010-10-22 16:23:21

0

通过这样做?

$("ul").css({ 
    height: $("ul li:eq(0)").find("img").outerheight() 
}); 
+0

我试过了,但是在文档准备好的情况下,如果缓存为空,那么这通常会返回0;而在IE上,缓存为空时,它经常会返回不正确的高度。 – 2010-10-22 14:55:54

1

例如:

var width, height; 

$('ul img').load(function() { 
    width = this.width; 
    height = this.height; 
}); 

从借力回答这个问题Get the real width and height of an image with JavaScript? (in Safari/Chrome)

+0

显然,如果图像尺寸相同,则不需要为每个图像运行该图像;如果您确实需要将每个图像尺寸分配到一个数组中,而不是每次都覆盖宽度和高度。我认为它给出了所需要的要点。 – pharalia 2010-10-22 14:55:22