Wenn Sie mit dem neuen Apple MacBook Pro mit Retina-Display ein "Standard" -Bild auf Ihrer Website bereitstellen, wird es etwas unscharf. Sie müssen also ein Netzhautbild bereitstellen.
Gibt es eine Möglichkeit, automatisch zu @2x
Bildern zu wechseln , wie dies iOS (mit Objective-C) tut? Was ich gefunden habe, ist: CSS für hochauflösende Bilder auf Mobil- und Retina-Displays , aber ich wünschte, ich könnte einen automatischen Prozess für alle meine Bilder ohne CSS oder JavaScript finden .
Ist es möglich?
UPDATE
Ich möchte diesen interessanten Artikel hervorheben , der von @Paul D. Waite vorgeschlagen wurde, und eine interessante Diskussion darüber, die von Sebastian verlinkt wurde .
html
image
retina-display
jan267
quelle
quelle
Antworten:
Für das img-Tag gibt es ein neues Attribut, mit dem Sie ein retina src-Attribut hinzufügen können, nämlich srcset. Kein Javascript oder CSS erforderlich, kein doppeltes Laden von Bildern.
<img src="low-res.jpg" srcset="high-res.jpg 2x">
Browser-Unterstützung: http://caniuse.com/#search=srcset
Andere Ressourcen:
quelle
src
sodass IE / Opera immer die höhere DPI-Version anfordert.Es gibt verschiedene Lösungen mit jeweils eigenen Vor- und Nachteilen. Welches für Sie am besten geeignet ist, hängt von verschiedenen Faktoren ab, z. B. davon, wie Ihre Website gestaltet ist, welche Technologie Ihre typischen Besucher verwenden usw. Beachten Sie, dass Retina-Displays nicht nur auf das Macbook Pro Retina und die kommenden iMacs beschränkt sind, sondern auch enthalten mobile Geräte, die ihre eigenen Bedürfnisse haben können.
Das Problem hängt auch eng mit Bildern in reaktionsschnellen Designs im Allgemeinen zusammen. In der Tat ist es wahrscheinlich am besten, generische reaktionsschnelle Designtechniken zu verwenden, anstatt für bestimmte Geräte zu entwerfen. Schließlich wird sich die Technologie auch in Zukunft ständig ändern.
Einige der Lösungen / Diskussionen, die ich notiert habe:
<picture>
Tag möglicherweise zu einer Lösung, die von einer W3C-Arbeitsgruppe und sogar von Apple unterstützt wird.Wie die anderen Antworten zeigen, gibt es noch mehr Techniken - aber wahrscheinlich noch keine bewährten Methoden.
Ich frage mich, wie man einige dieser Techniken testet und debuggt, ohne dass die entsprechenden Geräte verfügbar sind ...
quelle
Da noch niemand das Offensichtliche erwähnt hat, werde ich es dort rausschweben: Wenn möglich, benutze einfach SVG. Sie erscheinen bei schönen Netzhautauflösungen ohne jegliche Anstrengung.
Die Unterstützung dafür ist gut, da IE8 der Hauptdinosaurier ist, über den man sich Sorgen machen muss. Gzipped-Dateigrößen sind oft besser als Bitmap-Formate (PNG / JPG) und die Bilder sind flexibler. Sie können sie mit unterschiedlichen Auflösungen wiederverwenden und bei Bedarf neu formatieren, was sowohl Entwicklungszeit als auch Download-Bandbreite spart.
quelle
svg
ist mit älteren Browsern.Hier ist das weniger Mixin, das ich verwende, um dies für Hintergrundbilder zu erreichen. retina.js funktioniert nicht für Hintergrundbilder, wenn Sie dotLess verwenden, da ein eigenes Mixin erforderlich ist, das selbst eine Skriptbewertung verwendet, die in dotLess nicht unterstützt wird.
Der Trick bei all dem ist, IE8-Unterstützung zu bekommen. Die Hintergrundgröße kann nicht einfach ermittelt werden, daher muss der Basisfall (nicht mobile Medienabfrage) ein einfaches, nicht skaliertes Symbol sein. Die Medienabfrage behandelt dann den Fall der Netzhaut und kann die Hintergrundgrößenklasse verwenden, da die Netzhaut im IE8 niemals verwendet wird.
Anwendungsbeispiel:
Dafür müssen Sie zwei Dateien haben:
start_grey-97_12.png
[email protected]
Wo die
2x
Datei doppelte Auflösung für die Netzhaut ist.quelle
Stellen Sie einfach allen Retina-Bilder zur Verfügung und drücken Sie das Bild innerhalb des Bildelements auf die Hälfte seiner ursprünglichen Größe. Nehmen wir an, Ihr Bild ist
400px
breit und hoch. Geben Sie einfach die Bildbreite200px
an, damit es so scharf aussieht:Wenn Ihr Bild fotografisch ist, können Sie wahrscheinlich die JPG-Komprimierung erhöhen, ohne es schlechter aussehen zu lassen, da die JPG-Komprimierungsartefakte wahrscheinlich nicht sichtbar sind, wenn das Bild angezeigt wird unter
2x
: siehe http://blog.netvlies.nl/ Design-Interaktion / Netzhaut-Revolution /quelle
Wenn seine Hintergrundbilder eine einfache Möglichkeit sind, dies zu tun, ist:
Eine andere einfache Möglichkeit ist die Verwendung dieser Methode:
Einfach ersetzen:
mit
quelle
Ich habe diesen interessanten Weg gefunden, um Bilder mit mehreren Auflösungen bereitzustellen.
Es verwendet tatsächlich CSS, was ich vermeiden wollte, und funktioniert nur in Safari und Chrome.
Ich spreche über
image-set
.Hier ist ein Beispiel von Apple ( hier ):
Ich möchte auch diese beiden Links teilen:
image-set()
Notation @ W3Cquelle
Mit JSF können Sie ein benutzerdefiniertes Facelets-Tag erstellen , um den Aufwand zu vermeiden
srcset
, dass Sie jedem Bild etwas hinzufügen müssen.In deinem
taglib.xml
könntest du so etwas haben wie:Und Ihr Tag könnte ungefähr so aussehen:
Welches könnte verwendet werden wie:
Und wird rendern:
quelle
Dieses Problem ist besonders schwierig bei reaktionsfähigen Websites, bei denen das Bild je nach Browsergröße unterschiedlich breit sein kann. Auch wenn es sich um ein CMS handelt, bei dem mehrere Editoren möglicherweise Tausende von Bildern hochladen, erschien es mir unrealistisch, Leute zu bitten, speziell komprimierte Bilder hochzuladen.
Also habe ich ein Skript geschrieben, das dies berücksichtigt. Es wird am Ende der Seite ausgelöst und beim Ändern der Größe beendet. Jedes Mal unter Berücksichtigung der Pixeldichte und der Größe, die das Bild einnimmt.
http://caracaldigital.com/retina-handling-code/
quelle
Wenn Sie nicht aus Angst vor der Verwendung von Java-Skript frustriert sind, finden Sie hier einen guten Artikel: http://www.highrobotics.com/articles/web/ready-for-retina.aspx . Es hat eine sehr einfache Lösung.
Und das Beispiel in JSFiddle sagt mehr als tausend Worte.
Verwenden von:
JS:
quelle