我正在尝试使用flexbox来布局我的网站.该网站的屏幕顶部有一个视频,下面有可滚动的div.每个柔性项目应使用屏幕高度的50%.
调整屏幕大小时,视频应保持其纵横比.宽度不应超过屏幕宽度,高度不应超过屏幕高度的50%.
现在,当屏幕很窄时,视频会正确缩放以适应宽度:

当屏幕加宽时,视频的高度超出父div的高度,控件显示在可滚动div的上方.

在保持纵横比的同时,如何确保视频永远不会超过柔性物品的高度或宽度?我的一个要求是我必须将视频元素嵌套在flex项中(我不能将视频元素用作flex项).另外,理想情况下,视频应垂直和水平居中.
html,
body {
height: 100%;
}
video {
width: 100%;
height: auto;
}
.flex-container {
height: 100%;
display: flex;
flex-direction: column;
}
.flex-item {
padding: 1em;
width: 100%;
flex-basis: 50%;
}
.video-content {
background-color: #ccffcc;
}
.scrollable-content {
overflow-y: auto;
background-color: #ffcccc;
}Run Code Online (Sandbox Code Playgroud)
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<div class="flex-container">
<div class="flex-item video-content">
<video src="http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4" controls></video>
</div>
<div class="flex-item scrollable-content">
Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
</div>
</div>Run Code Online (Sandbox Code Playgroud)
我发现了一个适合我的解决方案.我添加position: relative;到.video-content造video绝对定位,100%的高度和宽度:
video {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
}
Run Code Online (Sandbox Code Playgroud)
https://jsfiddle.net/beeps10/0hxze25p/
html
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<div class="flex-container">
<div class="flex-item video-content">
<video src="http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4" controls></video>
</div>
<div class="flex-item scrollable-content">
<h1>Scroll content</h1>
<p>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content
<br>Scroll content</p>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS
html,
body {
height: 100vh;
}
video {
flex:0 1 100%;
object-fit: fill; /* over-ride "object-fit: contain" only for webkit as it doesn't honour the ratio */
}
.flex-container {
height: 100vh;
display: flex;
flex-direction:column;
justify-content:flex-start;
}
.flex-item {
padding: 1em;
box-sizing:border-box;
height:auto;
}
.video-content {
background-color: #ccffcc;
flex:0 1 100%;
height:50%;
display:flex;
justify-content:flex-start;
}
.scrollable-content {
flex:0 0 100%;
overflow-y: scroll;
min-height:50vh;
background-color: #ffcccc;
}
Run Code Online (Sandbox Code Playgroud)
http://codepen.io/anon/pen/wMrYOK
https://css-tricks.com/almanac/properties/o/object-fit/
https://css-tricks.com/snippets/css/a-guide-to-flexbox/