我能找到多个半成品方案,但我正在寻找一个完整的解决方案来解决我的问题。我有一个 div,我想在屏幕中央以固定的纵横比居中显示,该 div 应始终完全可见,因此该 div 始终是最大的,同时保持其宽高比,而不管垂直和水平调整窗口大小。
这里有一个 Codepen 示例:https://codepen.io/william-bang/pen/ZjyWRd ,我创建了这个示例,它只解决了水平方向上的问题,但垂直方向上没有解决。我已经尝试使用和标签让它工作,但大小调整表现不同。我正在寻找一种 CSS 解决方案,虽然我也接受 JS 解决方案,如果有人确信不存在 CSS 解决方案。
我将非常感激您的任何建议,这个问题已经让我困扰了很多个小时。提前谢谢:)
更新,div需要在不同页面上保持其纵横比,并始终保持自己的最大尺寸。
@Grenther 感谢您的回答,我尝试修改您给出的答案,以便纯粹使用CSS而不必使用CSS预处理器。这进展得非常顺利,直到我意识到CSS媒体查询不支持标准CSS变量,否则您提出的方法本来可以在不使用SCSS的情况下实现,但也许您已经知道了。
这里有一个 Codepen 示例:https://codepen.io/william-bang/pen/ZjyWRd ,我创建了这个示例,它只解决了水平方向上的问题,但垂直方向上没有解决。我已经尝试使用和标签让它工作,但大小调整表现不同。我正在寻找一种 CSS 解决方案,虽然我也接受 JS 解决方案,如果有人确信不存在 CSS 解决方案。
body {
width: 100%;
height: 100%;
}
.wrapper {
width: 40%;
height: 100%;
margin: auto
}
.img {
padding-top: 50%;
width: 100%;
background: #ccc;
text-align: center;
}
<div class="wrapper">
<div class="img">
**IMG HERE**
</div>
</div>
更新,div需要在不同页面上保持其纵横比,并始终保持自己的最大尺寸。
@Grenther 感谢您的回答,我尝试修改您给出的答案,以便纯粹使用CSS而不必使用CSS预处理器。这进展得非常顺利,直到我意识到CSS媒体查询不支持标准CSS变量,否则您提出的方法本来可以在不使用SCSS的情况下实现,但也许您已经知道了。
:root {
--ogW: 1600;
--ogH: 900;
--ratio: calc( var(--ogW) / var(--ogH));
}
body {
width: 100%;
height: 100%;
}
.ratio {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
@media screen and (max-width: 177vh) {
width: 90vw;
height: calc( 90vw / var(--ratio));
}
@media screen and (min-width: 177vh) {
width: calc( 90vh * var(--ratio));
height: 90vh;
}
}
.div {
width: 100%;
height: 100%;
background: red;
text-align: center;
}
<div class="ratio">
<div class="div">
Hello!
</div>
</div>