Problem można rozwiązać za pomocą zapytania o media i trochę matematyki. Oto rozwiązanie dla orientacji portretowej:
@media (max-device-aspect-ratio: 3/4) {
height: calc(100vw * 1.333 - 9%);
}
@media (max-device-aspect-ratio: 2/3) {
height: calc(100vw * 1.5 - 9%);
}
@media (max-device-aspect-ratio: 10/16) {
height: calc(100vw * 1.6 - 9%);
}
@media (max-device-aspect-ratio: 9/16) {
height: calc(100vw * 1.778 - 9%);
}
Ponieważ vh zmieni się, gdy pasek adresu URL zniknie, musisz określić wysokość w inny sposób. Na szczęście szerokość widocznego obszaru jest stała, a urządzenia mobilne mają tylko kilka różnych współczynników proporcji; jeśli możesz określić szerokość i proporcje, trochę matematyki da ci wysokość rzutni dokładnie tak, jak powinna działać . Oto proces
1) Utwórz serię zapytań o media dla współczynników proporcji, na które chcesz kierować reklamy.
użyj współczynnika proporcji urządzenia zamiast współczynnika proporcji, ponieważ ten ostatni zmieni rozmiar, gdy zniknie pasek adresu URL
Dodałem „maksymalny” do współczynnika proporcji urządzenia, aby kierować reklamy na dowolne proporcje, które zdarzają się występować pomiędzy najpopularniejszymi. Nie będą tak precyzyjne, ale będą dostępne tylko dla mniejszości użytkowników i nadal będą dość zbliżone do właściwego vh.
zapamiętaj zapytanie o media, używając opcji poziomej / pionowej, więc w przypadku portait musisz odwrócić liczby
2) dla każdego zapytania o media pomnóż dowolny procent wysokości w pionie, w jakim ma znajdować się element, przez odwrotność współczynnika proporcji.
- Ponieważ znasz szerokość i stosunek szerokości do wysokości, po prostu pomnóż żądany% (w twoim przypadku 100%) przez stosunek wysokości do szerokości.
3) Musisz określić wysokość paska adresu URL, a następnie odjąć ją od wysokości. Nie znalazłem dokładnych pomiarów, ale używam 9% dla urządzeń mobilnych w krajobrazie i wydaje się, że działa całkiem dobrze.
To nie jest zbyt eleganckie rozwiązanie, ale inne opcje też nie są zbyt dobre, biorąc pod uwagę:
Twoja witryna wydaje się być wadliwa dla użytkownika,
posiadające elementy o nieodpowiednich wymiarach, lub
Używanie javascript do podstawowych stylizacji,
Wadą jest to, że niektóre urządzenia mogą mieć inne wysokości paska adresu URL lub współczynniki proporcji niż najpopularniejsze. Jednak używanie tej metody, jeśli tylko niewielka liczba urządzeń cierpi na dodawanie / odejmowanie kilku pikseli, wydaje mi się o wiele lepsze niż każdy, kto ma rozmiar strony internetowej podczas przesuwania.
Aby było to łatwiejsze, stworzyłem również mixin SASS:
@mixin vh-fix {
@media (max-device-aspect-ratio: 3/4) {
height: calc(100vw * 1.333 - 9%);
}
@media (max-device-aspect-ratio: 2/3) {
height: calc(100vw * 1.5 - 9%);
}
@media (max-device-aspect-ratio: 10/16) {
height: calc(100vw * 1.6 - 9%);
}
@media (max-device-aspect-ratio: 9/16) {
height: calc(100vw * 1.778 - 9%);
}
}