czym dokładnie jest współczynnik pikseli urządzenia?

170

Wspomina się o tym w każdym artykule o sieci mobilnej, ale nigdzie nie mogę znaleźć wyjaśnienia, co dokładnie mierzy ten atrybut.
Czy ktoś może wyjaśnić, co oznacza takie zapytania, jak ta kontrola?

@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
only screen and (min--moz-device-pixel-ratio: 1.5),
only screen and (-o-device-pixel-ratio: 3/2), 
only screen and (min-device-pixel-ratio: 1.5) {

    //high resolution images go here

}
ilyo
źródło

Odpowiedzi:

161

Krótka odpowiedź

Współczynnik pikseli urządzenia to stosunek pikseli fizycznych do pikseli logicznych. Na przykład iPhone 4 i iPhone 4S zgłaszają współczynnik pikseli urządzenia wynoszący 2, ponieważ fizyczna rozdzielczość liniowa jest dwukrotnie większa niż logiczna rozdzielczość liniowa.

  • Rozdzielczość fizyczna: 960 x 640
  • Rozdzielczość logiczna: 480 x 320

Formuła to:

linres_p / linres_l

Gdzie:

linres_pto fizyczna rozdzielczość liniowa

i:

linres_lto logiczna rozdzielczość liniowa

Inne urządzenia zgłaszają różne współczynniki pikseli urządzenia, w tym niecałkowite. Na przykład Nokia Lumia 1020 zgłasza 1,6667, Samsumg Galaxy S4 3, a Apple iPhone 6 Plus 2,46 (źródło: dpilove ) . Ale to w zasadzie niczego nie zmienia, ponieważ nigdy nie powinieneś projektować dla żadnego konkretnego urządzenia.

Dyskusja

CSS „piksel” nie jest jeszcze zdefiniowany jako „jednego elementu obrazu na jakimś ekranie”, ale raczej jako nieliniowy pomiaru kątowego o 0,0213 °kącie widzenia, który jest około 1/96cala na warunkach rynkowych. Źródło: CSS Absolute Lengths

Ma to wiele konsekwencji, jeśli chodzi o projektowanie stron internetowych, na przykład przygotowywanie zasobów obrazu o wysokiej rozdzielczości i ostrożne stosowanie różnych obrazów przy różnych proporcjach urządzenia. Nie chciałbyś zmuszać urządzenia z niższej półki do pobierania obrazu o bardzo wysokiej rozdzielczości, tylko po to, aby zmniejszyć go lokalnie. Nie chcesz też, aby zaawansowane urządzenia skalowały obrazy o niskiej rozdzielczości w celu niewyraźnego wrażenia użytkownika.

Jeśli utkniesz z obrazami bitmapowymi, aby dostosować się do wielu różnych współczynników pikseli urządzenia, powinieneś użyć CSS Media Queries, aby zapewnić różne zestawy zasobów dla różnych grup urządzeń. Połącz to z fajnymi sztuczkami, takimi jak background-size: coverlub jawnie ustaw na background-sizewartości procentowe.

Przykład

#element { background-image: url('lores.png'); }

@media only screen and (min-device-pixel-ratio: 2) {
    #element { background-image: url('hires.png'); }
}

@media only screen and (min-device-pixel-ratio: 3) {
    #element { background-image: url('superhires.png'); }
}

W ten sposób każdy typ urządzenia ładuje tylko poprawny zasób obrazu. Pamiętaj również, że pxjednostka w CSS zawsze działa na logicznych pikselach .

Skrzynia na grafikę wektorową

W miarę pojawiania się coraz większej liczby typów urządzeń coraz trudniej jest zapewnić im wszystkim odpowiednie zasoby bitmapowe. W CSS zapytania o media są obecnie jedynym sposobem, aw HTML5 element picture pozwala używać różnych źródeł dla różnych zapytań o media, ale wsparcie nadal nie jest w 100%, ponieważ większość twórców stron internetowych nadal musi obsługiwać IE11 przez jakiś czas ( źródło: caniuse ) .

Jeśli potrzebujesz wyraźnych obrazów ikon, grafiki liniowej, elementów projektu, które nie są zdjęciami , musisz zacząć myśleć o SVG, które pięknie skaluje się do wszystkich rozdzielczości.

Anders Tornblad
źródło
1
dziękuję, więc jeśli zrobię plik css dla iphone 4 i podam pomiary CSS strony na 480 x 320 i width=device-widthrozciągnę ją do pełnego ekranu?
ilyo
1
Dokładnie. A jeśli używasz obrazów o wysokiej rozdzielczości background-image, możesz je łączyć -webkit-background-size:50%, ponieważ w przeciwnym razie rozmiar obrazu będzie zgodny z logiczną liczbą pikseli. w3.org/TR/2002/WD-css3-background-20020802/#background-size
Anders Tornblad
2
Nie możesz. Będziesz musiał rozmieścić elementy za pomocą logicznych pikseli i użyć obrazów o wyższej rozdzielczości oraz background-sizesztuczki optymalnego wykorzystania wyświetlacza.
Anders Tornblad
2
Nie mam pojęcia o obudowie Androida. Może się zdarzyć, że różni producenci mają różne pomysły na temat pikseli logicznych i fizycznych ... Wypróbuj to sam na kilkuset różnych urządzeniach ... Lub po prostu załóż, że wartości podawane przez urządzenie są prawidłowe. Nie projektuj dla konkretnych urządzeń, ale projektuj pod kątem zakresów wartości za pomocą zapytań o media!
Anders Tornblad
2
@atornblad Myślę, że powinno być „.. między pikselami fizycznymi i logicznymi
Ilya Buziuk,
159

Współczynnik pikseli urządzenia == Współczynnik pikseli CSS

W świecie tworzenia stron internetowych współczynnik pikseli urządzenia (zwany także współczynnikiem pikseli CSS) decyduje o tym, jak rozdzielczość ekranu urządzenia jest interpretowana przez CSS.

CSS przeglądarki oblicza logiczną (lub interpretowaną) rozdzielczość urządzenia według wzoru:

formuła

Na przykład:

Apple iPhone 6s

  • Rzeczywista rozdzielczość: 750 x 1334
  • Współczynnik pikseli CSS: 2
  • Rozdzielczość logiczna:

formuła

Podczas przeglądania strony internetowej CSS pomyśli, że urządzenie ma ekran o rozdzielczości 375x667, a Media Queries zareaguje tak, jakby ekran miał 375x667 . Ale renderowane elementy na ekranie będą dwa razy ostrzejsze niż rzeczywisty ekran 375x667, ponieważ na fizycznym ekranie jest dwa razy więcej fizycznych pikseli.

Kilka innych przykładów:

Samsung Galaxy S4

  • Rzeczywista rozdzielczość: 1080 x 1920
  • Współczynnik pikseli CSS: 3
  • Rozdzielczość logiczna:

formuła

iphone 5s

  • Rzeczywista rozdzielczość: 640 x 1136
  • Współczynnik pikseli CSS: 2
  • Rozdzielczość logiczna:

formuła

Dlaczego istnieje współczynnik pikseli urządzenia?

Przyczyną powstania współczynnika pikseli CSS jest to, że gdy ekrany telefonów uzyskują wyższe rozdzielczości, gdyby każde urządzenie nadal miało współczynnik pikseli CSS równy 1, strony internetowe renderowałyby się zbyt małe, aby je zobaczyć.

Typowy pełnoekranowy monitor biurkowy ma około 24 cale przy rozdzielczości 1920 x 1080. Wyobraź sobie, że ten monitor został zmniejszony do około 5 cali, ale miał tę samą rozdzielczość. Oglądanie rzeczy na ekranie byłoby niemożliwe, ponieważ byłyby tak małe. Ale producenci konsekwentnie wychodzą teraz z ekranami telefonów o rozdzielczości 1920x1080.

Tak więc współczynnik pikseli urządzenia został wymyślony przez producentów telefonów, aby mogli nadal poprawiać rozdzielczość, ostrość i jakość ekranów telefonów, bez zmniejszania elementów na ekranie, aby można je było zobaczyć lub przeczytać.

Oto narzędzie, które informuje również o gęstości pikseli na Twoim urządzeniu:

http://bjango.com/articles/min-device-pixel-ratio/

Jake Wilson
źródło
Artykuł z Wikipedii został usunięty. :-( Czy te informacje są dostępne gdzie indziej?
Simon East,
1
Obrazy są więc rozciągane, aby dopasować je do wysokiej rozdzielczości lub fizycznych pikseli. Powiedzmy, że obraz ma 300 pikseli, logiczny / css również 300, ale fizyczny pik to 600, wtedy ustawienie szerokości obrazu oznaczałoby rozciągnięcie obrazu. Słyszałem też, że czasami obrazy są mniejsze przy wysokiej rozdzielczości, dlaczego?
Muhammad Umer
2
@MuhammadUmer W twoim przykładzie obraz o rozdzielczości 300px width: 100%będzie obejmował całą szerokość wyświetlacza. Nie będzie rozciągany. Ekran „myśli”, że jest to wyświetlacz o rozdzielczości 300 pikseli. Obrazy są wyświetlane zgodnie z rozdzielczością logiczną / css. Teraz w swoim przykładzie możesz zamiast tego podać obraz o rozdzielczości 600 pikseli. Będzie to pełna szerokość logicznego wyświetlacza 300px, ale ponieważ twój wyświetlacz ma natywne 600px, obraz będzie wyglądał dwa razy ostrzej niż oryginalny obraz 300px. Większy obraz, ale wygląda lepiej, ponieważ wyświetlacz ma wszystkie te dodatkowe piksele. To jest idea stojąca za „wyświetlaczami Retina”.
Jake Wilson
@JakeWilson: To jest dla mnie nowy temat i nie do końca go rozumiem. W przykładzie współczynnik pikseli CSS = 2. Obraz ma 300 fizycznych pikseli szerokości, w css ustawiamy go na 100%, więc będzie miał 300 pikseli CSS. Ponieważ współczynnik pikseli CSS wynosi 2, będzie miał 600 fizycznych pikseli szerokości, a jego szerokość będzie dokładnie odpowiadać szerokości wyświetlacza. Ale dlaczego nie jest rozciągnięty, jeśli jego oryginalna szerokość to 300 fizycznych pikseli, a teraz ma 600 fizycznych pikseli? Rozumiem, że jego jakość jest niższa, ponieważ została fizycznie rozciągnięta z 300 do 600 pikseli. Czy możesz to trochę rozwinąć, proszę?
Peter
1
@Anuj Nie wiem i tak naprawdę nie ma znaczenia, jak jest zdefiniowane w sprzęcie / oprogramowaniu. Jedna jest obliczana na podstawie drugiej, niezależnie od tego, w jaki sposób ją wycinasz.
Jake Wilson,
9

https://developer.mozilla.org/en/CSS/Media_queries#-moz-device-pixel-ratio

-moz-device-pixel-ratio
Podaje liczbę pikseli urządzenia na piksel CSS.

to jest prawie oczywiste. liczba określa stosunek, ile „rzeczywistych” pikseli (fizycznych pikseli ekranu) jest używanych do wyświetlenia jednego „wirtualnego” piksela (rozmiar ustawiony w CSS).

oezi
źródło
4
skąd mam wiedzieć, czy urządzenie w ogóle wykorzystuje pomiar wirtualnych pikseli i co to jest? i jak używać pikseli urządzenia w pomiarach css, a nie wirtualnych?
ilyo
niestety musisz to
wygooglować
9

Artykuł Borisa Smusa High DPI Images for Variable Pixel Densities zawiera dokładniejszą definicję współczynnika pikseli urządzenia: liczba pikseli urządzenia na piksel CSS to dobre przybliżenie, ale nie cała historia.

Pamiętaj, że możesz uzyskać DPR używane przez urządzenie z rozszerzeniem window.devicePixelRatio.

Sam Dutton
źródło