Html 全屏<;视频>;:这是什么样的CSS魔法?
这演示了如何创建全屏HTML5视频。它使用以下CSS代码:Html 全屏<;视频>;:这是什么样的CSS魔法?,html,css,html5-video,Html,Css,Html5 Video,这演示了如何创建全屏HTML5视频。它使用以下CSS代码: video#bgvid { position: fixed; top: 50%; left: 50%; min-width: 100%; min-height: 100%; width: auto; height: auto; z-index: -100; -webkit-transform: translateX(-50%) translateY(-50%); transf
video#bgvid {
position: fixed;
top: 50%;
left: 50%;
min-width: 100%;
min-height: 100%;
width: auto;
height: auto;
z-index: -100;
-webkit-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
background: url(polina.jpg) no-repeat;
background-size: cover;
}
我想知道所有这些属性背后的含义是什么。我理解为什么一个人用一个固定的
位置和z-index
来把这一切抛在脑后。我不明白的是:
- 为什么
不能正常工作,但是{width:100%;height:100%}
的组合可以正常工作李>{width:auto;min width:100%;height:auto;min height:100%}
- 为什么首先将
和top
设置为50%,然后使用left
s将transform
返回翻译
- 如何使其不是100%的视口,而是100%的父元素(例如a
)
{width:100%;height:100%}
不能正常工作,但是{width:auto;min width:100%;height:auto;min height:100%}
的组合可以正常工作
<>这可能更容易解释,如果你认为HTML5视频是两个部分的事情:一方面你有容器(<代码> <代码>),另一方面你有电影(在<代码> <代码>或<代码> SRC < /代码>)。
设置宽度
和高度
时,您要做的是设置容器的宽度
和高度
,而不是电影本身。电影将增长/收缩,保持其纵横比,直到达到容器宽度或高度的100%
考虑到这一点,让我们分别来看这两种情况:
- 当您将
和宽度
设置为100%时,您将容器设置为一个特定值:占据屏幕的全部大小。然后,电影将根据容器的大小调整大小,如上所述,这就是导致顶部/底部出现“黑条”的原因(垂直视频为左/右) 在这种情况下,“电影将适应容器大小” 解决这个问题的一种可能性是,通过编程告诉电影使用CSS规则来适应容器:高度
。这与objectfit:cover
处理图像的方式类似,但它可能不是最好的选择background size:cover
- 当您将
和width
设置为height
,将auto
和minwidth
设置为100%时,您只是为容器提供了一个指导:它必须至少具有屏幕的高度和宽度(但可以具有更多)。电影将能够在不包含限制的情况下按其纵横比成比例增长,因此其大小将溢出窗口之一 在这种情况下,“容器将适应电影大小”minheight
top
和left
设置为50%,然后使用transforms
将翻译回来
这是一个将视频置于屏幕中央的技巧。通常在电影中,动作发生在中心而不是角落;因此,您希望尽可能多地看到中心
如果您仅将视频的顶部
和左侧
值设置为0,并且宽度
和高度
(或最小宽度
和最小高度
)为100%,则视频将附加到左上角,您可能会错过右侧和底部的内容
通过将视频设置在屏幕中央并使用transform
对其进行翻译,您可以确保视频的中心位于屏幕的中心,并且边框是不可见的
如何使其不是100%的视口,而是100%的父元素(例如a
)
这可以通过将该部分设置为相对位置,将视频设置为绝对位置(而不是固定位置)来实现。这样,视频将适应其父级而不是窗口
您链接的教程页面中也有类似的问题。同一个用户发布了他/她自己的解决方案(通过调整所述的相对/绝对位置),并共享了此代码笔中的代码:。第二个点是一个技巧,通常用于元素的水平和垂直居中。例如,设置left:50%
将元素的左边缘定位在中心,然后translateX(-50%)
将左边缘进一步向左移动该元素宽度的一半。第一点基本上应该是允许元素在需要时扩展到100%以上。Harry,非常感谢!你应该把这句话作为回答,而不是评论——我会接受的!我没有添加它作为答案,因为我没有回答你所有的问题,也不确定是否需要在第1点设置(尽管我可以理解它在做什么)。阿尔瓦罗的回答涵盖了这一点:)阿尔瓦罗,精彩的回答。谢谢你抽出时间。