W przypadku nowego Apple MacBook Pro z wyświetlaczem Retina, jeśli umieścisz „standardowy” obraz na swojej stronie internetowej, będzie on trochę niewyraźny. Musisz więc dostarczyć obraz siatkówki.
Czy istnieje sposób na automatyczne przełączanie się na @2x
obrazy, tak jak robi to iOS (z Objective-C)? To, co znalazłem, to: CSS dla obrazów o wysokiej rozdzielczości na urządzeniach mobilnych i wyświetlaczach Retina , ale chciałbym znaleźć automatyczny proces dla wszystkich moich obrazów, bez CSS lub JavaScript .
Czy to możliwe?
AKTUALIZACJA
Chciałbym podkreślić ten interesujący artykuł zaproponowany przez @Paul D. Waite i interesującą dyskusję na ten temat, do której prowadzi Sebastian .
html
image
retina-display
sty 267
źródło
źródło
Odpowiedzi:
Istnieje nowy atrybut dla tagu img, który umożliwia dodanie atrybutu src siatkówki, a mianowicie srcset. Nie potrzeba javascript ani CSS, nie ma podwójnego ładowania obrazów.
<img src="low-res.jpg" srcset="high-res.jpg 2x">
Obsługa przeglądarek: http://caniuse.com/#search=srcset
Inne zasoby:
źródło
src
więc IE / Opera zawsze zażąda wyższej wersji DPI.Istnieją różne rozwiązania, z których każde ma swoje zalety i wady. To, która z nich jest dla Ciebie najlepsza, zależy od różnych czynników, takich jak sposób zaprojektowania Twojej witryny internetowej, jakiego rodzaju technologii używają Twoi typowi użytkownicy itp. Pamiętaj, że wyświetlacze Retina nie są ograniczone do Macbooka Pro Retina i nadchodzących iMaców, ale obejmują również urządzenia mobilne, które mogą mieć własne potrzeby.
Problem jest również ściśle związany z obrazami w projektach responsywnych w ogóle. W rzeczywistości prawdopodobnie najlepiej jest zastosować ogólne techniki projektowania responsywnego zamiast projektowania pod kątem konkretnych urządzeń. W końcu technologia będzie się zmieniać także w przyszłości.
Niektóre z rozwiązań / dyskusji, które zauważyłem:
<picture>
tag może stać się rozwiązaniem wspieranym przez grupę roboczą W3C, a nawet Apple.Jak pokazują inne odpowiedzi, istnieje jeszcze więcej technik - ale prawdopodobnie nie ma jeszcze najlepszych praktyk.
Zastanawiam się tylko, jak przetestować i debugować niektóre z tych technik bez posiadania odpowiednich urządzeń ...
źródło
Ponieważ nikt jeszcze nie wspomniał o tym, co oczywiste, opowiem o tym: tam, gdzie to możliwe, po prostu użyj SVG. Pojawiają się w pięknych rozdzielczościach siatkówki bez żadnego wysiłku.
Wsparcie dla tego jest dobre, ponieważ IE8 jest głównym dinozaurem, o który należy się martwić. Rozmiary plików spakowanych Gzip są często lepsze niż formaty bitmapowe (png / jpg), a obrazy są bardziej elastyczne; można je ponownie wykorzystać w różnych rozdzielczościach i zmienić ich styl, jeśli to konieczne, co oszczędza czas programowania i przepustowość pobierania.
źródło
svg
dotyczy starszych przeglądarek.Oto mniej mieszania, którego używam, aby to osiągnąć dla obrazów tła. retina.js nie działa dla obrazów tła, jeśli używasz dotLess, ponieważ wymaga własnej mieszanki, która sama używa oceny skryptu, która nie jest obsługiwana w dotLess.
Sztuczka z tym wszystkim polega na uzyskaniu obsługi IE8. Nie można łatwo ustawić rozmiaru tła, więc przypadek podstawowy (zapytanie o media inne niż mobilne) musi być prostą, nieskalowaną ikoną. Zapytanie o media obsługuje wtedy przypadek siatkówki i może używać klasy rozmiaru tła, ponieważ siatkówka nigdy nie będzie używana w IE8.
Próbka użycia:
Wymaga to dwóch plików:
start_grey-97_12.png
[email protected]
Gdzie
2x
plik ma podwójną rozdzielczość dla siatkówki.źródło
Po prostu udostępnij obrazy siatkówki wszystkim i ściśnij obraz do połowy jego natywnego rozmiaru wewnątrz elementu image. Powiedzmy, że twój obraz jest
400px
szeroki i wysoki - po prostu określ szerokość obrazu,200px
aby wyglądał ostro w następujący sposób:Jeśli twój obraz jest fotograficzny, prawdopodobnie możesz zwiększyć kompresję JPG na nim bez pogorszenia wyglądu, ponieważ artefakty kompresji JPG prawdopodobnie nie będą widoczne, gdy obraz jest wyświetlany pod adresem
2x
: patrz http://blog.netvlies.nl/ design-interakcje / rewolucja-siatkówki /źródło
jeśli jego obrazy tła, prostym sposobem na zrobienie tego jest:
Innym prostym sposobem jest użycie tej metody:
Wystarczy wymienić:
z
źródło
Znalazłem ten interesujący sposób dostarczania obrazów w wielu rozdzielczościach.
W rzeczywistości wykorzystuje CSS, coś, czego chciałem uniknąć, i działa tylko w Safari i Chrome.
mówię o
image-set
.Oto przykład dostarczony przez Apple ( tutaj ):
Chcę też udostępnić te dwa linki:
image-set()
Notacja @ W3Cźródło
Za pomocą JSF można utworzyć niestandardowy znacznik Facelets, aby uniknąć konieczności dodawania
srcset
do każdego obrazu.W swoim
taglib.xml
mógłbyś mieć coś takiego:Twój tag może wyglądać następująco:
Które można wykorzystać na przykład:
I wyrenderuje:
źródło
Ten problem jest szczególnie trudny w przypadku responsywnych witryn, w których obrazy i obrazy mogą mieć różną szerokość w zależności od rozmiaru przeglądarki. Również w przypadku systemu CMS, w którym wielu redaktorów potencjalnie przesyła tysiące obrazów, wydawało mi się nierealne, aby prosić ludzi o przesyłanie specjalnie skompresowanych obrazów.
Napisałem więc skrypt, który bierze to pod uwagę, odpala na dole strony i po zakończeniu zmiany rozmiaru. Za każdym razem biorąc pod uwagę gęstość pikseli i rozmiar zajmowany przez obraz.
http://caracaldigital.com/retina-handling-code/
źródło
Jeśli nie denerwuje cię strach przed używaniem skryptu java, oto dobry artykuł http://www.highrobotics.com/articles/web/ready-for-retina.aspx . Ma bardzo proste rozwiązanie.
A przykład w JSFiddle jest wart tysiąca słów.
Za pomocą:
JS:
źródło