Acabei de aprender sobre uma unidade CSS nova e incomum. vh
e vw
meça a porcentagem de altura e largura da janela de visualização, respectivamente.
Eu olhei para essa pergunta do Stack Overflow, mas fez as unidades parecerem ainda mais semelhantes.
Como funciona a unidade vw e vh
A resposta diz especificamente
vw e vh são uma porcentagem da largura e altura da janela, respectivamente: 100vw é 100% da largura, 80vw é 80% etc.
Parece exatamente o mesmo que a %
unidade, que é mais comum.
Nas Ferramentas do desenvolvedor, tentei alterar os valores de vw / vh para% e vice-versa e obtive o mesmo resultado.
Existe alguma diferença entre os dois? Caso contrário, por que essas novas unidades foram introduzidas CSS3
?
css
viewport-units
Richard Hamilton
fonte
fonte
Respostas:
100%
pode ser100%
da altura de qualquer coisa. Por exemplo, se eu tiver um paidiv
que seja1000px
alto e um filhodiv
que esteja em100%
altura,div
teoricamente , esse filho poderá ser muito mais alto que a altura da janela de visualização ou muito menor que a altura da janela de visualização, mesmo quediv
esteja definido como100%
altura .Se, em vez disso,
div
definir esse filho100vh
, ele só100%
será preenchido com a altura da janela de visualização , e não necessariamente o paidiv
.fonte
Eu sei que a pergunta é muito antiga e @ Josh Beam abordou a maior diferença, mas ainda há outra:
Suponha que você tenha um
<div>
filho direto do<body>
qual deseja preencher toda a janela de exibição, para usá-lowidth: 100vw; height: 100vh;
. Tudo funciona da mesma maneira quewidth: 100%; height: 100vh;
até você adicionar mais conteúdo e uma barra de rolagem vertical aparecer. Como avw
conta da barra de rolagem como parte da janela de visualizaçãowidth: 100vw;
será um pouco maior quewidth: 100%;
. Essa pequena diferença acaba adicionando uma barra de rolagem horizontal (necessária para o usuário ver essa pequena largura extra) e, consequentemente, a altura também seria um pouco diferente nos dois casos.Isso deve ser levado em consideração ao decidir qual deles usar, mesmo se o tamanho do elemento pai for o mesmo que o tamanho da janela de visualização do documento.
Exemplo:
Usando
width:100vw;
:Usando
width:100%;
:fonte
body { overflow: hidden }
fará com que as barras de rolagem não sejam exibidas.Obrigado por sua resposta e exemplo de código, @IanC. Isto me ajudou bastante. Um esclarecimento: acredito que você quis dizer "barra de rolagem" quando escreveu "barra lateral".
Aqui estão algumas discussões relacionadas sobre unidades de janela de visualização que contam barras de rolagem que também achei úteis:
Por que vw inclui a barra de rolagem como parte da janela de exibição?
Usar 100vw causa corte horizontal quando barras de rolagem verticais estão presentes
Impedir que 100vw crie rolagem horizontal
Diferença entre Largura: 100% e largura: 100vw?
A especificação do W3C para as unidades vw, vh, vmin, vmax (os "comprimentos percentuais da janela de exibição") diz que "qualquer barra de rolagem é assumida como inexistente".
Aparentemente, o Firefox subtrai a largura da barra de rolagem de 100vw, como o comentário de @ Nolonar em Diferença entre Largura: 100% e largura: 100vw? observa, citando "Posso usar".
Can I Use , talvez em tensão com a especificação (?), Diz que todos os navegadores que não o Firefox atualmente "incorretamente" consideram 100vw a largura da página inteira, incluindo a barra de rolagem vertical.
fonte
as unidades vw (largura da vista) e vh (altura da vista) são relacionais ao tamanho da porta de visualização, em que 100vw ou vh é 100% da largura / altura da porta de visualização.
Por exemplo, se uma porta de visualização tiver 1600 px de largura e você especificar algo como 2vw, isso será equivalente a 2% da largura da porta de visualização, ou 32px.
A unidade% é sempre baseada na largura do elemento pai do elemento atual
fonte
Há uma diferença que não foi necessariamente levantada. 100vw inclui a largura da barra de arraste, enquanto 100% não a inclui. É uma pequena diferença, mas importante ao fazer o design.
fonte