Właśnie dowiedziałem się o nowej i niecodziennej jednostce CSS. vh
ivw
zmierz odpowiednio procent wysokości i szerokości rzutni.
Spojrzałem na to pytanie z Stack Overflow, ale sprawiło, że jednostki wyglądały jeszcze bardziej podobnie.
Odpowiedź konkretnie mówi
vw i vh to odpowiednio procent szerokości i wysokości okna: 100vw to 100% szerokości, 80vw to 80% itd.
Wydaje się, że jest to dokładnie to samo, co %
jednostka, która jest bardziej powszechna.
W Narzędziach dla programistów próbowałem zmienić wartości z vw / vh na% i viceversa i otrzymałem ten sam wynik.
Czy jest między nimi różnica? Jeśli nie, dlaczego wprowadzono te nowe jednostki CSS3
?
css
viewport-units
Richarda Hamiltona
źródło
źródło
Odpowiedzi:
100%
może mieć dowolną100%
wysokość. Na przykład, jeśli mam rodzicadiv
, który jest1000px
wysoki, a dzieckodiv
, które jest na100%
wysokości, to dzieckodiv
może teoretycznie być znacznie wyższy niż wysokość rzutni lub znacznie mniejszą niż wysokość rzutni, mimo żediv
jest ustawiony na100%
wysokość .Jeśli zamiast tego ustawię to dziecko
div
na100vh
, to wypełni tylko100%
wysokość widocznego obszaru , a niekoniecznie rodzicadiv
.źródło
Wiem, że pytanie jest bardzo stare, a @Josh Beam odniósł się do największej różnicy, ale jest jeszcze jedna:
Załóżmy, że masz
<div>
bezpośrednie dziecko<body>
, którego chcesz, aby wypełniło całą rzutnię, więc używaszwidth: 100vw; height: 100vh;
. Wszystko działa tak samo, jakwidth: 100%; height: 100vh;
dopóki nie dodasz więcej treści i nie pojawi się pionowy pasek przewijania. Ponieważvw
konto paska przewijania jako części widokuwidth: 100vw;
będzie nieco większe niżwidth: 100%;
. Ta niewielka różnica kończy się dodaniem poziomego paska przewijania (wymaganego, aby użytkownik zobaczył tę niewielką dodatkową szerokość), a w konsekwencji wysokość również byłaby nieco inna w obu przypadkach.Należy to wziąć pod uwagę przy podejmowaniu decyzji, którego użyć, nawet jeśli rozmiar elementu nadrzędnego jest taki sam jak rozmiar okna dokumentu.
Przykład:
Używając
width:100vw;
:Używając
width:100%;
:źródło
body { overflow: hidden }
spowoduje, że paski przewijania nie będą wyświetlane.Dziękujemy za odpowiedź i przykładowy kod @IanC. Bardzo mi to pomogło. Wyjaśnienie: wydaje mi się, że pisząc „pasek boczny”, miałeś na myśli „pasek przewijania”.
Oto kilka powiązanych dyskusji na temat jednostek rzutni liczących paski przewijania, które również okazały się pomocne:
Dlaczego vw włącza pasek przewijania jako część widoku?
Użycie 100vw powoduje poziome przycinanie, gdy obecne są pionowe paski przewijania
Zapobiegaj tworzeniu poziomego przewijania przez tryb 100vw
Różnica między szerokością: 100% a szerokością: 100 vw?
Specyfikacja W3C dla jednostek vw, vh, vmin, vmax („procentowe długości widocznego obszaru”) mówi, że „zakłada się, że jakiekolwiek paski przewijania nie istnieją”.
Wygląda na to, że Firefox odejmuje szerokość paska przewijania od 100 vw, jak komentuje @ Nolonar w sekcji Różnica między szerokością: 100% a szerokością: 100 vw? zauważa, powołując się na „Can I Use”.
Czy mogę użyć , być może w sprzeczności ze specyfikacją (?), Mówi, że wszystkie przeglądarki inne niż Firefox obecnie „niepoprawnie” traktują 100vw jako całą szerokość strony, łącznie z pionowym paskiem przewijania.
źródło
jednostki vw (szerokość widoku) i vh (wysokość widoku) są powiązane z rozmiarem portu widoku, gdzie 100vw lub vh to 100% szerokości / wysokości okna widoku.
Na przykład, jeśli port widoku ma szerokość 1600 pikseli i określisz coś jako 2vw, będzie to odpowiednik 2% szerokości portu widoku lub 32 pikseli.
Jednostka% jest zawsze oparta na szerokości elementu nadrzędnego bieżącego elementu
źródło
Jest różnica, która niekoniecznie została podniesiona. 100vw obejmuje szerokość paska przewijania, podczas gdy 100% go nie obejmuje. To niewielka różnica, ale ważna przy projektowaniu.
źródło