Como posso simular a funcionalidade de background-size:cover
um elemento html como <video>
ou <img>
?
Eu gostaria que funcionasse como
background-size: cover;
background-position: center center;
javascript
jquery
css
seron
fonte
fonte
cover
. Consulte Tamanho do plano de fundo 101 no link .Respostas:
Isso é algo que eu deixei de lado por um tempo, mas me deparei com uma ótima solução que não usa nenhum script e pode conseguir uma simulação de capa perfeita em vídeo com 5 linhas de CSS (9 se você contar seletores e colchetes ) Isso tem 0 casos extremos nos quais não funciona perfeitamente, com falta de compatibilidade com CSS3 .
Você pode ver um exemplo aqui
O problema com a solução de Timothy é que ele não manipula a escala corretamente. Se o elemento circundante for menor que o arquivo de vídeo, ele não será reduzido. Mesmo se você der à tag de vídeo um tamanho inicial minúsculo, como 16 x 9 px,
auto
acaba forçando-a a um mínimo do tamanho do arquivo nativo. Com a atual solução mais votada nesta página, era impossível reduzir o arquivo de vídeo, resultando em um efeito de zoom drástico.Se a proporção do seu vídeo for conhecida, no entanto, como 16: 9, você poderá fazer o seguinte:
Se o elemento pai do vídeo estiver definido para cobrir a página inteira (como
position: fixed; width: 100%; height: 100vh;
), o vídeo também será.Se você também deseja que o vídeo seja centralizado, use a abordagem de centralização segura:
Claro,
vw
,vh
, etransform
são CSS3, por isso, se você precisar de compatibilidade com browsers muito antigos , você precisa roteiro uso.fonte
vh
evw
tem a ver com alguma coisa?jsFiddle
O uso da capa de plano de fundo é bom para imagens e a largura é 100%. Elas não são ideais
<video>
e essas respostas são excessivamente complicadas. Você não precisa de jQuery ou JavaScript para obter um plano de fundo de vídeo com largura total.Lembre-se de que meu código não cobre completamente um plano de fundo com um vídeo como o da capa, mas aumentará o tamanho do vídeo para manter a proporção e ainda cobrir todo o plano de fundo. Qualquer excesso de vídeo sangrará na borda da página, cujos lados dependem de onde você ancora o vídeo.
A resposta é bem simples.
Basta usar este código de vídeo HTML5 ou algo assim: (teste em página inteira)
A altura mínima e a largura mínima permitirão que o vídeo mantenha a proporção do vídeo, que geralmente é a proporção de qualquer navegador normal em uma resolução normal. Qualquer excesso de vídeo sangra na lateral da página.
fonte
min-width
oumin-height
faz o truque.position: absolute; left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%);
.Para alguns navegadores, você pode usar
http://caniuse.com/object-fit
fonte
height: 100%; width: 100%;
. obrigado por esta resposta modernaAqui está como eu fiz isso. Um exemplo de trabalho está neste jsFiddle .
fonte
video { min-width: 100%; min-height: 100%; }
e funciona como um encanto.background-size: cover
um vídeo.As outras respostas foram boas, mas envolvem javascript ou não centralizam o vídeo horizontalmente e verticalmente.
Você pode usar esta solução CSS completa para criar um vídeo que simule a propriedade background-size: cover:
fonte
Com base na resposta e nos comentários de Daniel de Wit , procurei um pouco mais. Obrigado a ele pela solução.
A solução é usar
object-fit: cover;
um suporte excelente (todos os navegadores modernos oferecem suporte). Se você realmente deseja dar suporte ao IE, pode usar um polyfill como imagens de ajuste de objeto ou ajuste de objeto .Demonstrações:
e com um pai:
fonte
object-fit: cover
ewidth
eheight
definida para 100%, você tem uma proporcionalmente dimensionadoimg
ouvideo
ampliada no centro sem qualquer problema.A solução da M-Pixel é ótima na medida em que resolve o problema de escala da resposta de Timothy (o vídeo aumenta, mas não diminui, por isso, se o seu vídeo for realmente grande, há boas chances de você ver apenas um pequeno zoom em parte dele). No entanto, essa solução é baseada em suposições falsas relacionadas ao tamanho do contêiner de vídeo, ou seja, é necessariamente 100% da largura e altura da janela de exibição. Encontrei alguns casos em que não funcionou para mim, então decidi resolver o problema pessoalmente e acredito que encontrei a solução definitiva .
HTML
CSS
Também se baseia na proporção do vídeo, portanto, se o seu vídeo tiver uma proporção diferente de 16/9, você desejará alterar a% do preenchimento inferior. Fora isso, funciona imediatamente. Testado no IE9 +, Safari 9.0.1, Chrome 46 e Firefox 41.
EDIT (17 de março de 2016)
Desde que publiquei esta resposta, escrevi um pequeno módulo CSS para simular elementos
background-size: cover
ebackground-size: contain
sobre<video>
: http://codepen.io/benface/pen/NNdBMjEle suporta alinhamentos diferentes para o vídeo (semelhante a
background-position
). Observe também que acontain
implementação não é perfeita. Ao contráriobackground-size: contain
, ele não dimensionará o vídeo além do tamanho real se a largura e a altura do contêiner forem maiores, mas acho que ainda pode ser útil em alguns casos. Também adicionei aulasfill-width
efill-height
classes especiais que você pode usarcontain
para obter uma mistura especialcontain
ecover
... experimentar e fique à vontade para aprimorá-la!fonte
object-fit: cover
para FF e cromo e sua solução com Modernizr para o IEobject-fit: cover
é a melhor resposta com este polyfill do IE, Safari.https://github.com/constancecchen/object-fit-polyfill
Está apoiando
img
,video
epicture
elementos.fonte
CSS e js pequenos podem fazer com que o vídeo cubra o plano de fundo e centralize-o horizontalmente.
CSS:
JS: (vincule isso com redimensionamento de janela e chame uma vez separadamente)
fonte
Logo após a nossa longa seção de comentários, acho que é isso que você está procurando, é baseado em jQuery:
HTML:
JS:
CSS:
O código acima está usando a largura e a altura do navegador, se você estiver fazendo isso dentro de uma div, precisará alterá-lo para algo assim:
Para Div:
HTML:
JS:
CSS:
Também devo declarar que testei apenas este é o Google Chrome ... aqui está um jsfiddle: http://jsfiddle.net/ADCKk/
fonte
A resposta principal não diminui o tamanho do vídeo quando você está com larguras inferiores ao navegador. Tente usar este CSS (com #bgvid sendo o ID do seu vídeo):
fonte
z-index
necessário?Eu também vou postar esta solução, já que tive esse problema, mas as outras soluções não funcionaram para a minha situação ...
Eu acho que para simular corretamente a
background-size:cover;
propriedade css em um elemento em vez de uma propriedade de imagem de fundo de elementos, você teria que comparar a proporção da imagem com a proporção atual do Windows, portanto, independentemente do tamanho (e também no caso de a imagem ser mais alto que largo) a janela é o elemento que está preenchendo a janela (e também a centralizando, embora eu não saiba se isso era um requisito) ...usando uma imagem, apenas por uma questão de simplicidade, tenho certeza de que um elemento de vídeo também funcionaria bem.
primeiro obtenha a proporção dos elementos (depois de carregada), depois anexe o manipulador de redimensionamento da janela e ative-o uma vez para o dimensionamento inicial:
depois, no manipulador de redimensionamento, você deve primeiro determinar se deve preencher a largura ou a altura, comparando a proporção atual da janela com a proporção original da imagem.
}
.gif
tamanho é muito maior, além de borrado. Minha opinião mudou desde que escrevi esta resposta. É uma pena que você não possa combinar o melhor dos dois.Essa abordagem usa apenas css e html. Você pode empilhar facilmente um divs abaixo do vídeo. É capa, mas não centralizada enquanto você redimensiona.
HTML:
CCS:
fonte
@Hidden Hobbes
Você abriu uma recompensa nesta questão para uma solução apenas de CSS, então vou tentar. Minha solução para um problema como esse é usar uma proporção fixa para decidir a altura e a largura do vídeo. Eu normalmente uso o Bootstrap, mas extraí o CSS necessário para fazê-lo funcionar sem ele. Este é um código que usei anteriormente para centralizar, entre outras coisas, um vídeo incorporado com a proporção correta. Deve funcionar para
<video>
e<img>
também para os elementos. É o principal que é relevante aqui, mas eu também dei os outros dois, já que eles já estavam por aí. Boa sorte! :)exemplo em tela cheia jsfiddle
fonte
Para responder ao comentário de Weotch de que a resposta de Timothy Ryan Carpenter não explica
cover
a centralização do plano de fundo, ofereço esta rápida correção de CSS:CSS:
A adição dessas duas linhas centralizará qualquer elemento. Melhor ainda, todos os navegadores que podem lidar com vídeo HTML5 também suportam transformações CSS3, portanto, isso sempre funcionará.
O CSS completo é assim.
Eu teria comentado diretamente a resposta de Timothy, mas não tenho reputação suficiente para fazê-lo.
fonte
Gente, eu tenho uma solução melhor, é curta e funciona perfeitamente para mim. Eu usei para vídeo. E emula perfeitamente a opção de capa em css.
Javascript
Se você virar o if, senão você irá conter.
E aqui está o css. (Você não precisa usá-lo se não desejar o posicionamento central, a div principal deve ser " position: relativa ")
CSS
fonte
Acabei de resolver isso e queria compartilhar. Isso funciona com o Bootstrap 4. Ele funciona,
img
mas eu não testeivideo
. Aqui está o HAML e o SCSSHAML
SCSS
fonte
Pergunta antiga, mas caso alguém veja isso, a melhor resposta na minha opinião é converter o vídeo em um GIF animado. Isso lhe dá muito mais controle e você pode apenas tratá-lo como uma imagem. É também a única maneira de funcionar em dispositivos móveis, pois você não pode reproduzir vídeos automaticamente. Eu sei que a pergunta está pedindo para fazer isso em uma
<img>
tag, mas realmente não vejo a desvantagem de usar<div>
aebackground-size: cover
fonte
.gif
tamanho é muito maior, além de borrado. Minha opinião mudou desde que escrevi esta resposta. É uma pena que você não possa combinar o melhor dos dois.