为什么不`width:100%; height:100%; object-fit: contain;` 让 <video> 适合它的容器?
Why doesn't `width:100%; height:100%; object-fit: contain;` make a <video> fit its container?
所以我有一个网格布局的页面,有页眉和页脚以及中间的黑色内容容器。
html, body {
height: 100%;
margin: 0;
padding: 0;
}
.container {
display: grid;
height: 100%;
grid-template-rows: max-content 1fr max-content;
}
.container div {
border: 1px solid red;
}
.videoContainer {
background-color: black;
}
video {
width: 100%;
height: 100%;
object-fit: contain;
}
<div class="container">
<div>This is the header</div>
<div class="videoContainer">
</div>
<div>This is the footer</div>
</div>
到目前为止一切顺利。
现在我想放置一个可以拉伸以适合此容器(并居中)的视频。这是 object-fit: contain;
的尝试
html, body {
height: 100%;
margin: 0;
padding: 0;
}
.container {
display: grid;
height: 100%;
grid-template-rows: max-content 1fr max-content;
}
.container div {
border: 1px solid red;
}
.videoContainer {
background-color: black;
}
video {
width: 100%;
height: 100%;
object-fit: contain;
}
<div class="container">
<div>This is the header</div>
<div class="videoContainer">
<video width="400" controls>
<source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4">
</video>
</div>
<div>This is the footer</div>
</div>
但是没有用。容器会扩展以适合视频,而不是让视频适合容器。
如何使容器保持其固有尺寸并使视频适合其容器?
1fr
首先你需要知道的是 1fr
等同于 minmax(auto, 1fr)
,这意味着默认情况下容器不会小于其内容。
因此,首先将 1fr
替换为 minmax(0, 1fr)
。这将解决溢出问题。
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
.container {
display: grid;
height: 100%;
grid-template-rows: max-content minmax(0, 1fr) max-content;
}
.container div {
border: 1px solid red;
}
.videoContainer {
background-color: black;
}
video {
width: 100%;
height: 100%;
object-fit: contain;
}
<div class="container">
<div>This is the header</div>
<div class="videoContainer">
<video width="400" controls>
<source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4">
</video>
</div>
<div>This is the footer</div>
</div>
- 参考:
object-fit
如果您希望视频真正“适合这个容器”(如覆盖整个宽度和高度),请尝试 object-fit: cover
而不是 contain
。
所以我有一个网格布局的页面,有页眉和页脚以及中间的黑色内容容器。
html, body {
height: 100%;
margin: 0;
padding: 0;
}
.container {
display: grid;
height: 100%;
grid-template-rows: max-content 1fr max-content;
}
.container div {
border: 1px solid red;
}
.videoContainer {
background-color: black;
}
video {
width: 100%;
height: 100%;
object-fit: contain;
}
<div class="container">
<div>This is the header</div>
<div class="videoContainer">
</div>
<div>This is the footer</div>
</div>
到目前为止一切顺利。
现在我想放置一个可以拉伸以适合此容器(并居中)的视频。这是 object-fit: contain;
html, body {
height: 100%;
margin: 0;
padding: 0;
}
.container {
display: grid;
height: 100%;
grid-template-rows: max-content 1fr max-content;
}
.container div {
border: 1px solid red;
}
.videoContainer {
background-color: black;
}
video {
width: 100%;
height: 100%;
object-fit: contain;
}
<div class="container">
<div>This is the header</div>
<div class="videoContainer">
<video width="400" controls>
<source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4">
</video>
</div>
<div>This is the footer</div>
</div>
但是没有用。容器会扩展以适合视频,而不是让视频适合容器。
如何使容器保持其固有尺寸并使视频适合其容器?
1fr
首先你需要知道的是 1fr
等同于 minmax(auto, 1fr)
,这意味着默认情况下容器不会小于其内容。
因此,首先将 1fr
替换为 minmax(0, 1fr)
。这将解决溢出问题。
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
.container {
display: grid;
height: 100%;
grid-template-rows: max-content minmax(0, 1fr) max-content;
}
.container div {
border: 1px solid red;
}
.videoContainer {
background-color: black;
}
video {
width: 100%;
height: 100%;
object-fit: contain;
}
<div class="container">
<div>This is the header</div>
<div class="videoContainer">
<video width="400" controls>
<source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4">
</video>
</div>
<div>This is the footer</div>
</div>
- 参考:
object-fit
如果您希望视频真正“适合这个容器”(如覆盖整个宽度和高度),请尝试 object-fit: cover
而不是 contain
。