Zobacz wersję demonstracyjną
- Aby wyświetlić podgląd witryny, naciśnij Wyświetl aplikację, a następnie Pełny ekran
.
- Odśwież stronę na różnych urządzeniach, aby zobaczyć, jak przeglądarka wczytuje różne obrazy.
Możesz w tym celu użyć emulatora urządzenia. Jeśli szukasz konkretnych gęstości wyświetlania, wypróbuj te urządzenia:
| gęstość 1x, | Blackberry Playbook, wiele monitorów zewnętrznych |
| 2x density | iPad lub iPhone 5/6 |
| 3x gęstość | Galaxy S5 lub iPhone X |
- Kod, który to umożliwia, znajdziesz w pliku
index.html.
Jak to działa?
Koncepcja deskryptorów gęstości może być dla większości osób nieznana. Aby lepiej je zrozumieć, warto dowiedzieć się, jak przeglądarka działa z pikselami.
Czym są piksele?
Zacznijmy od samego początku, czyli od zdefiniowania piksela. Brzmi to prosto, ale „piksel” może mieć wiele znaczeń:
- Piksel urządzenia (inaczej „piksel fizyczny”)
- Najmniejszy punkt koloru, który można wyświetlić na urządzeniu.
- Piksel logiczny
- Informacje określające kolor w konkretnej lokalizacji na siatce. Ten typ piksela nie ma określonego rozmiaru fizycznego.
- piksel CSS
- Specyfikacja CSS definiuje piksel jako jednostkę miary fizycznej. 1 piksel = 1/96 cala.
Gęstość pikseli
Gęstość pikseli (nazywana też „gęstością ekranu” lub „gęstością wyświetlacza”) określa gęstość pikseli urządzenia na danym obszarze fizycznym. Zwykle mierzy się ją w pikselach na cal (ppi).
Przez wiele lat bardzo popularną gęstością wyświetlacza było 96 ppi (stąd CSS definiuje piksel jako 1/96 cala). Od lat 80. była to domyślna rozdzielczość systemu Windows. Była to też rozdzielczość monitorów CRT.
Zaczęło się to zmieniać, gdy w pierwszej dekadzie XXI wieku monitory LED stały się powszechne. W szczególności firma Apple zrobiła furorę w 2010 roku, gdy wprowadziła wyświetlacze Retina. Te wyświetlacze miały minimalną rozdzielczość 192 ppi, czyli 2 razy większą niż „zwykłe” wyświetlacze (192 ppi / 96 ppi = 2).
window.devicePixelRatio
Wraz z wprowadzeniem nowszej technologii wyświetlania „piksele urządzenia” zaczęły różnić się rozmiarem fizycznym i kształtem i nie były już takie same jak „piksele CSS”. Konieczność zdefiniowania relacji między rozmiarem „pikseli urządzenia” a „pikselami CSS” doprowadziła do wprowadzenia devicePixelRatio (czasami nazywanego „współczynnikiem pikseli CSS”).
devicePixelRatio określa relację między pikselami urządzenia a pikselami CSS na danym urządzeniu. Urządzenie o rozdzielczości 192 ppi ma wartość devicePixelRatio równą 2 (192 ppi / 96 ppi = 2), ponieważ „2 piksele wyświetlacza mają rozmiar 1 piksela CSS”.
Obecnie większość urządzeń ma współczynnik pikseli urządzenia między 1,0 a 4,0.
Aby określić gęstość pikseli urządzenia, wpisz w konsoli
window.devicePixelRatio.W tej tabeli znajdziesz współczynniki pikseli popularnych urządzeń. Większość z nich mieści się w zakresie od 1,0 do 4,0.
Jak więc wykorzystać te informacje w praktyce?
Dostosowywanie rozmiaru obrazów na podstawie współczynników pikseli urządzenia
Aby obrazy wyglądały jak najlepiej na ekranach o wysokiej rozdzielczości, należy udostępnić różne wersje graficzne dla różnych devicePixelRatios.
| Współczynnik pikseli urządzenia | Wskazuje, że: | Na tym urządzeniu tag <img> o szerokości CSS wynoszącej 250 pikseli będzie wyglądał najlepiej, gdy obraz źródłowy będzie miał… |
|---|---|---|
| 1 | 1 piksel urządzenia = 1 piksel CSS | 250 pikseli szerokości, |
| 2 | 2 piksele urządzenia = 1 piksel CSS | 500 pikseli szerokości, |
| 3 | 3 piksele urządzenia = 1 piksel CSS | 750 pikseli szerokości, |
Warto wiedzieć:
- Wymiary w pikselach podawane w edytorach obrazów, katalogach plików i innych miejscach to wymiary w pikselach logicznych.
- W przypadku ekranów o wyższej rozdzielczości i większych wyświetlaczy potrzebne będą obrazy o większych wymiarach. Samo powiększanie mniejszych obrazów mija się z celem, jakim jest wyświetlanie wielu wersji graficznych. Przeglądarka i tak by to zrobiła, gdyby nie został dostarczony obraz o wysokiej rozdzielczości.
Używaj deskryptorów gęstości, aby wyświetlać wiele obrazów
Deskryptory gęstości w połączeniu z atrybutem „srcset” mogą służyć do wyświetlania różnych obrazów w zależności od wartości devicePixelRatio.
- Zapoznaj się z plikiem
index.htmli zwróć uwagę na element<img>.
<img src="flower.jpg"
srcset="flower-1x.jpg 1x,
flower-2x.jpg 2x,
flower-3x.jpg 3x">
Ten przykład można opisać tak:
1x,2xi3xto deskryptory gęstości, które informują przeglądarkę o gęstości pikseli, dla której przeznaczony jest obraz. Dzięki temu przeglądarka nie musi pobierać obrazu, aby określić te informacje.- Przeglądarka może wybrać jeden z 3 obrazów:
flower-1x.jpg(przeznaczony dla przeglądarek o gęstości pikseli1.0),flower-2x.jpg(przeznaczony dla przeglądarek o gęstości pikseli2.0) iflower-3x.jpg(przeznaczony dla przeglądarek o gęstości pikseli3.0). flower.jpgto obraz zastępczy dla przeglądarek, które nie obsługują formatusrcset.
Jak korzystać z tej funkcji:
- Użyj devicePixelRatio i jednostki
x, aby zapisać deskryptory gęstości. Na przykład deskryptor gęstości dla wielu ekranów Retina (window.devicePixelRatio = 2) będzie zapisany jako2x. - Jeśli nie podano deskryptora gęstości, przyjmuje się, że jest to
1x. - Uwzględnianie deskryptorów gęstości w nazwach plików jest powszechną konwencją (i pomoże Ci śledzić pliki), ale nie jest konieczne. Obrazy mogą mieć dowolną nazwę pliku.
- Nie musisz dodawać atrybutu
sizes. Atrybutsizesjest używany tylko z deskryptorami szerokości.