运行以下代码段将为我在视觉上希望完成的工作提供一个框架,并在CSS中做出了一些我想删除的让步:
body {
height: 100vh;
margin: 0;
}
.container>* {
height: 100%;
width: 100%;
flex: 0 0 50px;
}
.container {
width: 100%;
height: 100%;
background-color: black;
display: flex;
flex-direction: column;
align-items: flex-start;
}
.header {
background-color: red;
}
.content {
background-color: blue;
flex: 1;
position: relative;
}
.footer {
margin-top: auto;
background-color: yellow;
}
.fixedRatio {
height: 56.25vw;
max-height: calc(100vh - 100px);
width: calc((100vh - 100px) * (1/0.5625));
;
max-width: 100vw;
background-color: rgba(0, 0, 0, 0.5);
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
}
<div class="container">
<div class="header"></div>
<div class="content">
<div class="fixedRatio"></div>
</div>
<div class="footer"></div>
</div>
包括任意高度的页眉和页脚以及在它们之间垂直和水平居中的固定纵横比框。我希望在调整页面大小时使用信箱和邮政信箱,并响应页眉高度的增加/减少。
就目前而言,该代码可实现许多目标,但不足之处在于,它要求在CSS中包含固定长宽比框的页眉和页脚的高度。这限制了我自由操作标头大小或使其随内容而任意增长的能力(至少在我不使用JavaScript的程度上)。
我已经充分利用了内容为全角的事实,成功解决了字母装箱(顶部和底部黑色条)的问题。结果,我可以将100vw / 56.25vw(在16:9的情况下)用作宽度/高度,并获得所需的结果。不幸的是,将内容移动到支柱框时,显然会分崩离析。
我已经或多或少地对需要JavaScript至少基于内部内容框的尺寸切换类以确定字母或支柱框是否合适感到不满。但是,很快就很清楚,将宽度设置为高度的函数并非易事。
我很幸运遇到this post,其中使用一个利用1x1像素的解决方案将宽度设置为高度的函数。
在Chrome和Safari中,我能够成功地将其用于支柱装箱,但在Firefox中却没有(IE11和Edge尚未经过测试,但需要覆盖范围……请为我祈祷)。我希望涵盖最新版本的Chrome / Safari / Firefox,以及I11 / Edge(如果可能)。
Chrome / Safari的解决方案如下:
body {
height: 100vh;
margin: 0;
}
.header,
.footer {
height: 100%;
width: 100%;
}
.container>* {
flex: 0 0 50px;
}
.container {
width: 100%;
height: 100%;
background-color: black;
display: flex;
flex-direction: column;
align-items: flex-start;
}
.header {
background-color: red;
}
img {
display: block;
height: 100%;
background: orange;
}
.content {
background-color: blue;
flex: 1;
position: relative;
overflow: hidden;
height: 100%;
display: inline-block;
left: 50%;
transform: translateX(-50%);
}
.footer {
margin-top: auto;
background-color: yellow;
}
.fixedRatio {
background-color: purple;
position: absolute;
left: 0;
top: 0;
right: 0;
margin: auto;
bottom: 0;
}
<div class="container">
<div class="header"></div>
<div class="content">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" />
<div class="fixedRatio"></div>
</div>
<div class="footer"></div>
</div>
有几件事要考虑。我对固定页脚的高度很满意。这个约束可能被证明是有价值的,但是我还无法从中得到任何东西。我对包含的标记进行了根本性的改动也很满意,假设它可以实现所需的行为。
此操作的最终目的是在此灵活的页眉,静态页脚及其上的覆盖内容之间保持固定的长宽比内容。
我很清楚自己可以运行一些JavaScript并成功设置这些高度,但是我主要是出于好奇心。如果您也很好奇,也许您可以帮忙探索:)
谢谢!