【发布时间】:2015-12-08 07:22:55
【问题描述】:
问题总结
我想要的布局是能够在页面上居中(垂直和水平)未知大小的图像。如果图像太大而无法适应任一方向,我想显示滚动条,以便用户可以滚动查看完整图像。我遇到的问题是,当图像太大而无法容纳时,图像的顶部和左侧(取决于被切断的部分)将永远无法滚动到。
尝试的解决方案
我正在尝试使用 flexbox 来实现所需的布局,但 flexbox 不是必需的。这是一个重现问题的小示例(请注意,我没有在 CSS 中放置任何浏览器前缀,因此您可能希望在 Chrome [或者也可能是 Firefox 中查看?]):
.body {
height: 600px;
}
.container {
margin: auto;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid red;
height: 100%;
overflow: auto;
}
img {
border: 5px solid black;
}
<div class="body">
<div class="container">
<img src="http://placehold.it/700x700" />
</div>
</div>
您应该能够完全看到图像周围的边框,但是随着窗口的缩小,图像的左侧和/或顶部会被截断。随着窗口继续缩小,越来越多的图像将变得不可见。
请注意,那里是否有图像似乎并不重要。这是一个 sn-p,只是使用普通的 div 来显示问题:
.body {
height: 600px;
margin-top: 80px;
}
.container {
margin: auto;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid red;
height: 100%;
overflow: auto;
}
.content {
border: 5px solid black;
width: 600px;
height: 600px;
background-color: gray;
}
<div class="body">
<div class="container">
<div class="content"></div>
</div>
</div>
再一次,整个 div 应该始终可以通过滚动到达,但事实并非如此。
问题
我如何才能实现上述所需的布局仅使用 HTML 和 CSS(不接受 JS 答案)? Flexbox 不是解决问题所必需的,但它会是一个不错的选择。
谢谢!
【问题讨论】:
-
如果您将大于视口的图像居中,则顶部和左侧将始终被截断。您不能滚动超出视口的顶部或左侧。您需要更改以这些尺寸处理图像的方式,以防止这种情况发生,可能是通过防止图像居中或普通缩小图像以适应视口的媒体查询。如果它必须始终居中,则您必须不居中图像并使用js在视口缩小时滚动到中心。
-
你能澄清你的意思@brouxhaha吗?如果图像对于视口来说太大并且容器元素设置了滚动,我希望能够滚动到容器中的所有内容。
-
您可以使用
min-content、max-content和fit-content等内在测量值。但是它们并不为人所知或经常使用……我不知道为什么。我敢肯定还有其他方法,但它们让我望而却步。