将div居中对齐并使其内容向左对齐

3
我想要一个居中于文档的div。这个div应该尽可能地占据空间来显示内容,并且内容本身应该向左对齐。
我想要创建一个带有行和列的图库,它们是居中的,当你添加一个新的缩略图时,它将被对齐到左侧。
代码:
<div id="out">
    <div id="inside">
        <img src="http://www.babybedding.com/fabric/solid-royal-blue-fabric.jpg"/>   
        <img src="http://www.babybedding.com/fabric/solid-royal-blue-fabric.jpg"/>   
        <img src="http://www.babybedding.com/fabric/solid-royal-blue-fabric.jpg"/>   
        <img src="http://www.babybedding.com/fabric/solid-royal-blue-fabric.jpg"/>   
        <img src="http://www.babybedding.com/fabric/solid-royal-blue-fabric.jpg"/> 
    </div>
</div>

以及CSS:

img {
    height: 110px;
    width: 110px;
    margin: 5px;
}

#out {
    width: 100%;
}

#inside {
    display: inline-block;
    margin-left: auto;
    margin-right: auto;
    text-align: left;
    background: #e2e2f2;
}

Live版本在这里:http://jsfiddle.net/anPF2/10/。如你所见,在"#inside"的右侧有一块空白区域,我想要去掉这个空白区域,这样整个区块就能一直显示到最后一个正方形,并且居中对齐。
编辑:请查看此照片:https://www.dropbox.com/s/qy6trnmdks73hy5/css.jpg,它更好地解释了我的意图。
编辑2:我上传了另一张照片,展示了在较低分辨率屏幕上应该如何调整。请注意左右两侧的边距。这就是我一直尝试(但仍没有成功)实现的效果:https://www.dropbox.com/s/22zp0otfnp3buke/css2.jpg 编辑3/答案:谢谢大家尝试帮我解决问题。我使用JS解决了这个问题,写了一个监听屏幕调整大小事件的函数。该函数检查右侧边距的大小,并在左侧添加填充以使所有内容居中。我没有找到使用CSS的解决方案。如果你有,请务必告诉我。
谢谢大家!

Fiddle没有显示CSS。 - Dhaval Marthak
1
“div应该占据尽可能多的空间” - 如果它占用了所有可用空间,那么它将如何居中? - Zhihao
我的想法完全一样...我认为他的意思是,他希望它在添加2、3、4张图片时仍然居中... - Jamie Hutber
1
抱歉,也许我没有解释清楚。请看这张照片:https://www.dropbox.com/s/qy6trnmdks73hy5/css.jpg - Shai
你能否将图片添加到帖子中或使其可访问,以查看是否有人在这么长时间后可以修复,我需要完全相同的。 - Yandy_Viera
显示剩余3条评论
5个回答

0

在布局CSS时不应使用像素,这会使其非常死板,并可能导致高分辨率屏幕和低分辨率屏幕的问题。最好将其声明为百分比或em(在宽度方面,百分比仍然可能略优,但em在高度方面是完美的)

首先,“外部” div 必须声明比里面小。例如,如果“外部”在 body 中:

#outer{
    width: 100%;
}
#inside{
    width: 80%;
    margin-left: auto;
    margin-right: auto;
}
#inside img{
    height: 110px;
    width: 110px;
    margin-left: 1%;
    margin-right: 1%;
    margin-top: 0.5em;
    float: left;
}

好的,因为“inside”宽度的80%是“outer”的宽度,所以margin-left:auto和margin-right:auto一起使“inside” div在“outer”中居中。

将float属性设置为left会使inside的所有图像始终尝试向左移动。

编辑:在查看您提供的图片后,我已经解决了这个问题。

我还没有测试过这个,但我相信它应该可以工作,如果您遇到更多问题,请告诉我。


看了你的图片后,你想让 "inside" 的宽度为 80% 或其他值,并在 #inside 标签内设置 margin-left: auto, margin-right: auto。你可以自己声明 "outer" 的宽度,对于 img 标签来说,clear:both; 不是必需的。其他的都应该能正常工作。 - AndrewB
float: left; 的意思是如果 div 右侧没有空间,它将移动到下一行并使 div 变长。 - AndrewB
我理解你所说的右边距问题。不幸的是,我认为在所有情况下都无法修复。因为当你使用固定大小的图像时,它们的宽度和高度是固定的。一旦你声明了一个固定大小的元素,使用相对和浮动标签就变得不可预测。例如,一旦你稍微调整屏幕大小,宽度可能不足以容纳另一个完整的图像,只能容纳60%的图像,因此图像移到下一行,留下不成比例的右侧间隙。这是在所有情况下都无法避免的。 - AndrewB
使用那个jsfiddle,你可以看到我的观点,如果你调整“result”的宽度,在某一点上它看起来就像你想要的那样,但是一旦你将它向任何方向移动超过那个点,它又会失控。 - AndrewB
1
是的,你刚刚描述了我的问题。当一行上没有足够的空间容纳另一张图片时,我希望它能移到新的一行,但同时也希望容器div变小并居中。看起来有点奇怪,CSS无法解决这个问题。我可以编写一些JS来解决这个问题,但我真的想避免这样做,以免所有样式都受到JS的影响... :-/非常感谢你迄今为止的帮助! :) - Shai
显示剩余3条评论

0

这是你想要实现的吗?演示

img {
height: 110px;
width: 110px;
margin: 5px;
display: inline-block;
}

#out {
width: 100%;
margin: 0 auto;
position: relative;
border: 1px solid red;
}

#inside {
position: relative;
background: #e2e2f2;
}

谢谢,但这不是我想要的 :-/ 我想削减右侧的额外空间,然后让整个块居中(请查看我上传的照片)。 - Shai

0
为了让方框不占用整个页面宽度,可以尝试在#out上设置宽度小于100%并添加margin:auto;以使其居中。
#out {
    width: 90%;
    margin:auto;
}

http://jsfiddle.net/anPF2/36/


谢谢,但这不是我想要的。我想把右边的空间切掉并让它消失,这样如果你有足够的空间(高屏幕分辨率)可以放置10张图片,你将看到10张没有间隔的图片。 - Shai
我相信你需要JavaScript来完成这个。这个fiddle很接近,但并不完美,特别是在小尺寸下似乎有些问题。 - DACrosby
是的,不得不使用JS,现在它运行良好。只是有点奇怪,这样的事情不能通过CSS完成。 - Shai
如果可以的话,目前超出了我的能力范围。使用 text-align:center 可以正常工作,但您想要将尾随元素向左对齐。嗯...我会密切关注并进行更新,如果发现任何问题。 - DACrosby

0

指定#insidewidth属性以使其居中。我使用了width: 120px。Fiddle链接:http://jsfiddle.net/anPF2/7/

此外,应该使用CSS来设置图片的高度和宽度,而不是像height="300"这样的属性。Fiddle已经反映了这个变化。


0

使用display:inline-block会产生额外的边距。为了去除这些边距,需要将#out容器的font-size设置为0px。请参见演示


谢谢,但这对我不起作用。你能看一下我刚刚添加的照片链接吗? - Shai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接