Es gibt einen echten Bedarf, Medien zu liefern, die für das Gerät und die Umstände geeignet sind, da wir so wenig wissen über eine bestimmte Webanfrage. Ich habe kürzlich einen Blogbeitrag mit so vielen Bildern darauf veröffentlicht, dass die Seite 2,29 MB wog. Ich hätte eine Warnung posten sollen, als ich ihn getwittert habe: „Klicken Sie hier nicht, wenn Sie in einem 3G-Netzwerk sind, es wird wahrscheinlich ewig dauern, schauen Sie es sich einfach an, wenn Sie nach Hause kommen.“
Idealerweise hätten all diese Bilder, die ich serviert habe, eine Version mit niedrigerer Auflösung haben können, die in Browsern mit kleineren Fenstergrößen und/oder langsameren Verbindungsgeschwindigkeiten angezeigt wird. Selbst in Spitzenbrowsern gibt es noch keine native Möglichkeit, dies zu tun. Es ist also eine gute Zeit, darüber zu sprechen, wie wir uns das als Web-Entwickler vorstellen. Vielleicht können wir beeinflussen, wie sich die Spezifikation gestaltet.
Beschränken wir diese Konversation auf Inline-Rasterbilder. Also, die Dinge, die heute als <img> serviert werden. Soweit ich sehe, gibt es drei Wege, die wir gehen können.
- Erstellen Sie ein neues Element, das nur dazu dient, dieses Problem zu lösen.
- Erstellen Sie ein neues Bildformat, das entwickelt wurde, um dieses Problem zu lösen.
- Tun Sie nichts, lösen Sie unsere Probleme mit anderen Technologien.
Jeder von ihnen hat Vor- und Nachteile. Schauen wir uns jeden einzelnen an.
Neues Element erstellen
Der wahrscheinlichste Kandidat ist <picture>, wie hier in der W3C-Community diskutiert. Scott Jehl hat ein JavaScript-Polyfill, das seine Funktionalität nachahmt. Die Syntax wäre
<picture alt="description of image">
<!-- low-res, default -->
<source src="small.jpg">
<!-- med-res -->
<source src="medium.jpg" media="(min-width: 400px)">
<!-- high-res -->
<source src="large.jpg" media="(min-width: 800px)">
<!-- Fallback content -->
<img src="small.jpg" alt="description of image">
</picture>
Vorteile
- Nachahmt andere Medien-Syntaxen wie
<video>und<audio>, was Sinn ergibt. - Der Fallback macht es rückwärtskompatibel mit Browsern, die es nicht unterstützen, was äußerst wichtig ist. Wir können keine Bilder haben, die in älteren Browsern einfach nicht funktionieren.
- Gibt uns Webautoren die Kontrolle, genau das anzuzeigen, was wir wollen, unter den von uns festgelegten Bedingungen.
Nachteile
- Es ist wesentlich komplizierter als
<img>. Schwerer zu lehren, schwerer zu lernen, mehr Code zu schreiben. Leicht zu vermasseln. - Trübt das Wasser von CSS und HTML ein wenig, indem die Media-Query-Syntax in HTML gebracht wird.
- Ähnliche Probleme wie bei Inline-Styles. Erschwert zukünftige Updates. Keine wiederverwendbare Abstraktion.
Neues Bildformat
Der Anstoß für diesen Blogbeitrag kam von Gesprächen, die ich mit Christopher Schmitt und einem von ihm geschriebenen Blogbeitrag hatte. Christopher ist der Meinung, dass ein neues Bildformat die ideale Lösung ist.
Dieses neue Bildformat hätte im Wesentlichen mehrere Versionen davon.
Welches Bild von einem Programm wie einem Webbrowser geliefert wird, ist eine Entscheidung, die durch einen virtuellen Händedruck zwischen dem Browser und dem Webserver getroffen werden kann.
Vielleicht kostet die Datei insgesamt 800 K, aber darin befinden sich vier verschiedene Versionen: 500 K, 200 K, 50 K, 10 K. Durch eine standardisierte Regelung würde eines dieser vier Bilder übermittelt und vom Browser angezeigt werden.
Klingt wie Fantasie? Es gibt bereits ein solches Bildformat namens FlashPix, das noch drastischere Versionierungen ermöglicht. Denken Sie, neue Bildformate sind unmöglich zu implementieren? WebP gewinnt mit anständiger Geschwindigkeit an Unterstützung.
Letztendlich bleibt die Syntax so, wie sie jetzt ist
<img src="unicorn.rpng" alt="fancy unicorn">
Ich habe diese Dateiendung erfunden, aber „responsive PNG“ wäre mir recht.
Christopher mag diesen Ansatz, weil
er die fortgesetzte Nutzung des IMG-Elements ermöglicht, das in den Knochen, dem Mark des Webs, verankert ist.
Ich mag dieses Denken. Kein Grund, sich von einem Element abzuwenden, das so lange gut funktioniert hat. Aber natürlich würden wir das nicht tun. Es gibt keinen Grund, <img> zu ersetzen, nur darauf aufzubauen und Alternativen anzubieten.
Vorteile
- Hält die Syntax einfach. Funktioniert so, wie es immer war.
- Hält auch die Erstellung einfach. Eine Datei, nicht mehrere. Die Akzeptanz wäre wahrscheinlich schneller und mehr Leute würden es tatsächlich tun (weniger Leute würden 4 Versionen jedes Bildes erstellen und Abfragen zum Servieren handwerklich gestalten).
Nachteile
- Möglicher Kontrollverlust. Um die Dinge einfach zu halten, würde das Bildformat die Logik dessen übernehmen, was genau serviert wird. Wird es immer die richtige Entscheidung treffen? Was berücksichtigt es? Elterncontainerbreite? Netzwerkverbindungsgeschwindigkeit? Eine Kombination?
- Nicht rückwärtskompatibel. Was passiert in Browsern, die das neue Format nicht unterstützen?
Andere Technologien
Wir könnten uns sicher auf JavaScript verlassen, um uns hier zu helfen. Es könnte uns zum Beispiel mit dem neuen Bildformat helfen. Wir würden normale PNGs und JPGs in unserem <img> verwenden und die src eine Weile gegen das neue Format austauschen, bis das neue Format universell unterstützt wird. Vielleicht etwas übertrieben, aber machbar.
Und wenn es das kann, vielleicht sollten wir es einfach das ganze Problem lösen lassen. JavaScript kann all die „Tests“ durchführen, die wir wahrscheinlich brauchen (z. B. Fenstersizing-Tests, Netzwerkgeschwindigkeits-Tests), und es könnte für den Austausch unserer src mit passenderen verantwortlich sein. Die foresight.js von Adam Bradley Bibliothek macht das bereits. Vielleicht ist das, wofür JavaScript da ist, und wir müssen uns nicht einmischen.
Denken Sie, dass die Client-seitige Natur von JavaScript nicht ideal ist? Es gibt ein paar Lösungen, die Dinge serverseitig machen.
Adaptive Images von Matt Wilcox ist eine unglaublich clevere Lösung, die ein winziges bisschen JS verwendet, nur um die aktuelle Bildschirmgröße zu messen und einen Cookie zu setzen, und dann werden alle Anfragen für Bilder durch etwas PHP geleitet, das bestimmt, welche Version eines Bildes serviert wird, passend zur Bildschirmgröße.
Sencha.io Src ist eine weitere Lösung, die komplett JavaScript-frei ist. Sie führt UA-Sniffing durch, um das Gerät zu bestimmen und entscheidet, welche Bildgröße basierend darauf serviert wird. Sie fügen einfach die Sencha-Service-URL vor die src des Bildes
<img src='//src.sencha.io/http://mywebsite.com/images/unicorn-hires.jpg' alt="unicorn" />
Das ist die einfachste mögliche Nutzung, sie kann viel ausgefeilter sein. Es ist jedoch ein Beta-Dienst eines Drittanbieters, also seien Sie sich der inhärenten Bedenken bewusst (z. B. wenn sie ausfallen, werden Ihre Bilder nicht geladen). Ich stelle mir vor, dass es letztendlich ein kostenpflichtiger Dienst sein wird.
Vorteile
- Wir bringen die Standarde nicht durcheinander.
- Kein Warten darauf, dass Browser etwas Neues unterstützen.
Nachteile
- Ignorieren wir damit einfach das Problem? Sollen Standards nicht bei echten Problemen helfen?
- Der Code, der benötigt wird, um dies richtig zu machen, ist übertrieben.
Wo ich lande
Sich auf ältere Technologie und Hacks zu verlassen, reicht mir nicht, aber ich kann nicht entscheiden, ob ich ein neues Format oder eine neue Syntax bevorzuge. Vielleicht beides? Vielleicht eine Hybridlösung? Ich denke, die Syntax ist wahrscheinlicher, weil mehr darüber diskutiert wird. Ein Format ist eine viel größere Aufgabe, und ich habe kein Flüstern über aktive Entwicklung in dieser Richtung gehört.
Es wird ein lustiger Tag sein, an dem ich diesen Blogbeitrag mit „offiziellen“ Best Practices aktualisieren kann!
Ich bin der Meinung, dass wir wirklich einen Bildschirmdimensionen-Header haben sollten, der mit den HTTP/SPDY-Headern gesendet wird. Das bedeutet, dass serverseitiger Code als IIS/mod_rewrite-Plugins implementiert werden kann, so dass
1) Coder in den meisten Fällen keinen zusätzlichen speziellen Code schreiben müssen
2) Sie basierend auf einer Sitzung modifizieren können
3) Einige der JS-Statistikpakete den zusätzlichen Code fallen lassen können, der dies misst
Das ist die ideale Lösung. Aber was ist mit Offline-Anwendungen?
Die Erkennung von Bildschirmdimensionen ist meiner Meinung nach viel zu begrenzt. Sie können einen riesigen Bildschirm haben und trotzdem über geringe Bandbreite verfügen.
Es ist erwähnenswert, dass
<picture>nicht bedeuten würde, Media-Queries in HTML einzuführen – sie sind bereits als Teil der Quell-Elemente von<video>spezifiziert und meines Wissens in einigen Nightlies implementiert.Wir wollen sicherstellen, dass jedes Element, das hier potenziell entsteht, mit den bestehenden Standards konform ist, wissen Sie?
Ich denke, das eigentliche Problem bei der Einbettung von Media-Queries in HTML ist, dass es nicht zentralisiert ist (wie JS/CSS), sodass Sie mehr Code-Wiederholung haben und mehr Orte zum Bearbeiten, wenn Sie jemals Breakpoints ändern müssen. Sicher,
<video>mag bereits so spezifiziert sein, aber das bedeutet nicht, dass es der beste Weg ist, dies zu tun.Ich denke, die rpng-Idee ist großartig, und das Größenproblem ist nicht so groß, da es sowieso nahe an der Größe der großen Version ist. Die kleinen und mittleren sind relativ klein!!
Ich stimme zu, dass ein neues Bildformat die beste ultimative Antwort zu sein scheint. Dies würde sich stark an der aktuellen Implementierung von progressiven JPEGs orientieren: Das Laden jeder aufeinanderfolgenden Ebene wäre abhängig von Dingen wie Bildschirmgröße und Netzwerklatenz.
Ihr Icon-Fonts-Blogbeitrag wurde bei mir ziemlich schnell geladen (weniger als 3 Sekunden, komprimiert auf 105 KB) im Opera Mini 4.3 über ein EDGE-Netzwerk. Nur so nebenbei.
Ich mag die Idee eines neuen Bildformats. Wie Sie sagen, es ist bereits Teil des Webs. Außerdem müssten wir bei Verwendung eines neuen Elements eine Vielzahl von unterschiedlich großen Bildern mit unterschiedlichen Namen haben, was SEO ruinieren würde, und einen viel größeren Codeausschnitt.
Mit dem Bildformat können wir ein Bild mit einem Namen haben, das sich automatisch basierend auf den zuvor angegebenen Dateigrößen anpasst. Wenn ein neues Attribut für das Bild-Tag hinzugefügt würde, könnten wir leicht Rückwärtskompatibilität haben. Dies bedeutet weniger HTML, besseres SEO und ein Bild zum Verwalten und Speichern.
Apple verwendet diesen Ansatz tatsächlich für seine Icons. Wenn Sie eines im „Info holen“-Fenster kopieren und dann in Vorschau einfügen, ist das Icon tatsächlich eine 4 verschiedene Auflösungen desselben Bildes.
Ist ein Logo ein
<picture>? Es gibt viele Bilder, die auf einer Website verwendet werden und keine Bilder sind.Könnten Sie einzelne Quellen mit CSS für Polster-/Margin-Zwecke ansprechen?
<picture>
<source class=”small”>
<source class=”large”>
</picture>
Tendenz diese Woche zu .rpng.
Bis das geklärt und flächendeckend implementiert ist, werden alle sowieso auf 4G oder höher umsteigen. Nur ein Gedanke oder Diskussionspunkt.
Ich mag auch die Picture-Lösung, sie könnte aber genauso gut sein
<image>
<source class=”small”>
<source class=”large”>
</image>
Ich stimme Chris definitiv zu, dass HTML/CSS nicht unübersichtlich werden sollte und ich würde denken, dass Klassen auf der Quelle eine Anforderung für die Adressierung spezifischer CSS-Regeln wären.
Ich bevorzuge definitiv den von Tim vorgeschlagenen „image“-Vorschlag gegenüber „picture“, da er zu spezifisch ist.
Wie wäre es mit dieser Syntax
Ich liege vielleicht völlig falsch, aber ergibt das nicht mehr Sinn als eine Eltern-/Kind-Beziehung in dieser Situation?
Mir ist bewusst, dass IMG kein schöner oder besonders beschreibender Tag ist, aber warum nicht einfach den anständig ausreichenden Tag, den wir bereits haben, verbessern?
Aus meinen zugegebenermaßen sehr begrenzten Tests scheint er abwärtskompatibel zu sein.
Nein, es kann nicht so einfach <image> sein.
Da Browser-Hersteller großzügig zu schlecht erstellten Dokumenten waren, wird <image> genauso behandelt wie <img>.
Sie können dies testen, indem Sie ein Testdokument erstellen mit
<image>
<source class=”small”>
<source class=”large”>
</image>
Und dann das <image>-Element im Web-Inspektor betrachten. Sie werden feststellen, dass alle Kindelemente verworfen wurden.
Das liegt daran, dass <img> keine Kindelemente haben sollte und <image> für den Browser im Grunde ein Synonym für <img> ist.
Ob es Ihnen gefällt oder nicht, <img> und <image> sind für Lösungen, die Kindelemente verwenden, vom Tisch.
Ich denke, die Syntax ergibt am meisten Sinn, aber warum können wir nicht eine Kombination davon und die Syntax verwenden, die ein selbstschließendes Tag zulässt, wenn nur eine URL vorhanden ist? Außerdem, was ist der Vorteil des Tag-Namens picture? Warum nicht einfach bei img bleiben?
Ich verwende .htaccess UA-Sniffing, um entweder normale Bilder oder kleine optimierte zu liefern. Ich bin offen für Vorschläge oder Gedanken zur Verbesserung oder warum man es nicht verwenden sollte :-) http://sandermangel.blogspot.com/2012/02/responsive-images-trough-htaccess.html
Das ist der gleiche Ansatz, den ich im Sinn hatte...
Funktioniert für mich ziemlich gut, da es keinen zusätzlichen HTML-Code benötigt und daher leicht auf älteren Websites implementiert werden kann.
Was meiner Meinung nach ein großer Vorteil gegenüber anderen Frontend-Techniken ist, die Browserunterstützung benötigen.
Sie liefern Opera (Desktop-Browser) Ihre Low-Res-Bilder.
…und deshalb suckt jede Art von Responsivität, die auf UA-Sniffing basiert.
Hey, entschuldigen Sie, dass ich immer wieder reinschreibe: Ich wollte nur darauf hinweisen, dass es ein paar häufige Fragen und Bedenken bezüglich des vorgeschlagenen
<picture>-Elements gibt, die wir bereits auf der Responsive Images Community Group veröffentlicht haben, einschließlich der Gründe, warum wir<img>/<image>nicht verwenden können und wie aktuelle (und vorgeschlagene) CSS- und Script-basierte Lösungen zu kurz greifen.Die von Ihnen verlinkte Seite (sowie die Aufschlüsselung responsiver Assets) enthält HTML-bezogene Zitate mehrerer Backups eines Bildes – und verändert somit die 1-zu-1-Korrelation, die ich in meinem Blogbeitrag beschrieben habe.
Während mein Punkt in dem Beitrag über unerfahrene Webentwickler ging, scheint es auch eine Korrelation zwischen „einem IMG, einer Datei“ zu geben, die in Browsern nicht rückgängig gemacht werden kann.
Das unterstreicht, warum ich denke, dass eine Arbeitsbeziehung zwischen einem neuen Bildformat (.rpng) und einem Browser-mit-Server-Ansatz besser ist, als zu versuchen, eine Lösung aus HTML herauszuzwingen.
Dies ist ein Thema, in das ich viel Gedanken investiert habe. Es ist eines dieser Probleme im responsiven Webdesign, für das wir meiner Meinung nach derzeit keine perfekte Lösung haben. Wenn Sie es noch nicht getan haben, würde ich Ihnen empfehlen, Jason Grigsbys Beiträge zu responsiven Bildern zu lesen. Er hat viel großartige Forschung zu diesem Thema betrieben.
http://blog.cloudfour.com/responsive-imgs/
http://blog.cloudfour.com/preferred-solutions-for-responsive-images/
Idealerweise würde ich mir wünschen, dass das Picture-Element so schnell wie möglich unterstützt wird. Ich habe die Diskussionen über das W3C Responsive Image Picture Element verfolgt und bevorzuge es, weil es die gesamte Logik an einem Ort belässt. Ich habe auch das Gefühl, dass man mit der Picture-Element-Syntax mehr Kontrolle über die Logik hat als bei einem neuen Bilddateityp. Zum Beispiel können Sie Media Queries für min-width und min-device-pixel-ratio in einem Source-Tag der vorgeschlagenen Picture-Element-Syntax schreiben. Ich bin mir nicht sicher, wie Sie diese Logik in einem neuen Bilddateityp hinzufügen würden.
Ich bin jedoch nicht völlig gegen einen neuen Dateityp für Bilder.
Ich habe Christopher Schmitts Beitrag gelesen und ihn eher interessant gefunden. Matt Wilcox hatte eine Idee für das Picture-Element vorgeschlagen, bei der es ähnlich wie beim Video-Element beim Laden von Dateiformaten funktionieren würde.
Zum Beispiel liefern Sie beim Video-Element normalerweise ein paar verschiedene Versionen Ihrer Videodatei, und der Browser verwendet das Dateiformat, das er unterstützt. Ich denke, das ist eine großartige Idee für das Picture-Element. Auf diese Weise können wir unsere Logik weiterhin in der Markup-Struktur belassen, wenn wir uns dafür entscheiden, oder wir können neue Bilddateien für die Quelle im Picture-Element wie WebP, „rpng“ oder jedes andere Bildformat verwenden und dann .jpg am Ende für Browser, die die neuen Bildformate nicht unterstützen, hinzufügen.
Eine kleine Sache: Sie vergessen das noscript-Tag im Beispielcode von Scott Jehl für picturefill. Dieser kleine Code-Schnipsel verhindert, dass das Fallback-Bild im src-Attribut heruntergeladen wird, wenn JS aktiviert ist. Oder anders ausgedrückt: Duplizierte Downloads werden vermieden. Ohne das noscript-Tag wird der Vorteil des Picture-Element-Polyfills bedeutungslos.
Ich habe weitere Gedanken dazu, aber ich denke, sie wären besser für einen Blogbeitrag geeignet, als diesen massiv langen Kommentar noch länger zu machen.
Manchmal ist die beste Lösung die, die am wenigsten schlecht ist.
Matt Wilcox hat während seiner Videopräsentation von Adaptive Images einen ausgezeichneten Punkt bezüglich des Tags gemacht, ich paraphrasiere
Was passiert, wenn Sie Ihr Website-Design mit neuen Breakpoints aktualisieren möchten? In CSS ist die Änderung einfach, Sie aktualisieren die Media-Queries und alle notwendigen Layout-Updates. Aber was passiert mit mehreren Tags? Sie müssen jeden einzelnen davon überarbeiten und ihre Breakpoints aktualisieren. Ein potenzieller Albtraum.
Setzen Sie Ihre Picture-Element-Media-Queries auf eine PHP-Variable und halten Sie sie DRY (Don't Repeat Yourself).
Codebeispiel: https://gist.github.com/1893129
Ja, Sie müssen die Media-Queries immer noch an zwei Stellen aktualisieren, einmal in Ihrem CSS und einmal in Ihren PHP-Variablen, aber Sie müssen nicht jede Instanz aktualisieren, die Sie mit dem Picture-Tag verwendet haben, wenn Sie diese Methode verwenden.
Natürlich stimme ich zu, dass die variablebasierte Route die sinnvolle Option ist und dass die Mehrheit der Community diesen Ansatz wahrscheinlich verfolgen würde, obwohl es nur ein Teil von mir ist, der denkt, dass diese Art von Dingen mit reinem HTML oder CSS machbar sein sollte.
lowsrc! :D
Vielleicht sollten wir das alte „lowsrc“-Attribut für das img-Tag mit einem modernen Twist modifizieren. Es wird von niemandem mehr wirklich benutzt. <img src=”hiresimg.png” lowsrc=”forsmallerdevices.png” /> . Offensichtlich müsste es (viel) mehr ausgearbeitet werden, aber es wäre ein Anfang.
Lowsource klingt nach einer großartigen Option. Das Tag ist für meinen Geschmack viel zu viel Syntax. Und so kann es leicht weggelassen werden, wenn kein kleines Bild vorhanden ist.
„Du darfst keine Angst haben, größer zu träumen, Liebling.“ Geräte gibt es in mehr als 2 Größen. Mit dem Picture-Element können Sie Geräte mit kleinen Bildschirmen, mittleren Bildschirmen, großen Bildschirmen, wirklich großen Bildschirmen, Hi-Res-Bildschirmen (Retina) ansprechen.
Wenn Bandbreiten-Media-Queries jemals Realität werden, würde ich vermuten, dass Sie diese auch verwenden könnten. Für den Moment schätze ich, dass Sie Unterstützung für Bandbreiten-Media-Query-Funktionalität mithilfe der Netzwerk-API einbauen könnten – http://w3c-test.org/dap/network-api/ sobald diese abgeschlossen ist. Ich bin mit der Netzwerk-API nicht so vertraut, wie ich es gerne wäre, also rate ich nur.
Der Punkt ist, das lowsrc-Attribut ist einigermaßen interessant, aber ich glaube, eine robustere Lösung wie das vorgeschlagene Picture-Element ist eine bessere Lösung für responsive Bilder.
LOWSRC war die Inspiration für das HiSRC-Plugin, das die Spezifikation für Netzwerkerkennung verwendet.
Dies ist jedoch nur ein Teil des Puzzles. Tablet-Bildschirme werden immer besser, hohe Auflösungen – und Desktop-Maschinen werden dem folgen.
Es wird mehr als zwei Größen oder Varianten desselben Bildes geben, und einer der Gründe, warum ich glaube, dass das Speichern mehrerer Typen desselben Bildes in einer Containerdatei der richtige Weg ist.
Zu
lowsrcBrowserhersteller haben uns wiederholt mitgeteilt, dass es unwahrscheinlich ist, dass wir Änderungen am „Image Prefetching“-Verhalten sehen werden, das in einer Reihe moderner Browser vorhanden ist – was bedeutet, dass der Inhalt der
srceines Bildes immer vor der Anwendung benutzerdefinierter Logik abgerufen wird. Aus diesem Grund scheintlowsrcvon den Herstellern nicht als praktikable Lösung angesehen zu werden – und für unsere Zwecke hinterlässt es eine riesige Grauzone in Bezug auf die Implementierung. Wie setzt man den Breakpoint für das kleinere Bild, wenn wir keine benutzerdefinierte Logik vor der Prefetching-Phase anwenden können? Wird das vom Browser festgelegt? Sind wir dann auf diesen einen Breakpoint beschränkt, und worauf würde er basieren?lowsrcberücksichtigt keine Bildgrößen oder Auflösungen, wie es Media-Queries tun könnten – und ist gezwungen, sich auf einen einzigen hartcodierten Breakpoint zu verlassen, anstatt auf eine ständig wachsende Liste von Media-Queries.Ich sehe sicherlich den Reiz, Dinge prägnant zu halten, aber längere Syntax ist nur ein Problem für Entwickler. Die Lösung mit dem größten potenziellen Nutzen für unsere Benutzer sollte immer die Lösung übertreffen, die für Entwickler am bequemsten ist.
Es scheint, dass es wirklich drei Faktoren gibt, um die wir uns hier sorgen sollten
1. Geräteauflösung
2. Verbindungsgeschwindigkeit
3. Ob der Benutzer für Bandbreite bezahlt oder nicht
Diese Dinge waren traditionell miteinander verbunden (ein Handy war klein, langsam, und die Leute bezahlten nach Nutzung), aber diese drei Faktoren sind nicht mehr unbedingt miteinander verbunden
- Auf einem iPad 3, in einem 3G-Netzwerk (riesige potenzielle Auflösung, relativ langsame Verbindungsgeschwindigkeit, Bezahlung nach Bandbreitennutzung)
- Auf einem Smartphone über WLAN (geringe Auflösung, schnelle Geschwindigkeit, unbegrenzte Nutzung)
- Auf einem Laptop über WLAN mit Datenlimit (hohe Auflösung, schnelle Geschwindigkeit, mehr bezahlen ab einem bestimmten Punkt für mehr Bandbreite)
Ich bin mir nicht sicher, was die Antwort ist, aber es wäre schön, wenn wir alle drei davon sniffen könnten, anstatt nur den ersten (was die Media-Query tut). Mir ist bewusst, dass ein Teil davon hier diskutiert wurde: https://css-tricks.de/bandwidth-media-queries
Ob der Benutzer für Bandbreite bezahlt, ist eine interessante Idee. Sie erwähnen das Sniffen dafür, aber ich bin mir nicht wirklich sicher, wie Sie das erkennen würden? Obwohl ich zustimme, scheint es etwas zu sein, das wir berücksichtigen sollten.
Welches Bild würden Sie empfehlen, für jedes dieser Geräte bereitzustellen?
iPad 3, im 4G LTE-Netzwerk, Datenlimit – Bezahlung nach Bandbreitennutzung.
iPad 3, im WLAN-Netzwerk, unbegrenzte Datennutzung.
Beide haben Retina-Displays, beide haben eine schnelle Internetverbindung, nur einer hat ein Datenlimit.
Sollten Retina-Bilder ein Opt-in-Feature sein, wie HD-Videos auf YouTube?
+1 hier. Bandbreite ist mindestens so wichtig wie Bildschirmgröße – und sicher sollte die Bildschirmgröße nicht verwendet werden, um auf die Verbindungsgeschwindigkeit zu schließen. Ich könnte auf einem hochauflösenden Laptop über eine 3G-Verbindung sein und keine Bilder in voller Qualität laden wollen.
Ich stimme Ihren drei Faktoren zu, obwohl ich denke, dass wir die letzten beiden zu einer einzigen Browsereinstellung zusammenfassen könnten. Standardmäßig ist die Einstellung vom Browser automatisch so eingestellt, dass sie das „am besten geeignete Bild“ basierend auf Geräteauflösung, Bandbreite und ob sie WLAN oder ein Mobilfunknetz verwenden, anfordert. Alternativ kann der Benutzer seinen bevorzugten Bildtyp basierend auf seiner einzigartigen Situation einstellen, wenn er mehr Kontrolle wünscht. Nicht, dass ich etwas falsch daran finde, einer Website mitzuteilen, ob ich für Bandbreite bezahle, aber ich denke, viele Einzelpersonen würden es tun. In Zukunft werden alle zusätzlichen Faktoren, die zu dem am besten geeigneten Bild beitragen, in ihren Browser integriert.
Alle diese Variablen können heute von Browsern auf der OS-Seite ermittelt werden, sodass es nicht lange dauern würde, einen Meta-Tag oder eine Abfrage in der Spezifikation zu implementieren, um diese Präferenz auf unserer Seite „abzurufen“. Alternativ können wir diese Informationen als Header übergeben und mod_rewrite verwenden, wodurch zusätzliche src-Attribute oder Tags überflüssig werden.
Außerdem vermeiden wir durch die Entscheidung des Browsers, was für ihn am besten ist, die Profilierung jedes einzelnen Besuchers JEDES Mal, wenn er die Website besucht, was auch seine Benutzererfahrung beschleunigt.
Auf unserer Seite können wir die verschiedenen Versionen des Bildes selbst erstellen oder es einem Servermodul überlassen, es zu generieren/zu cachen. Dann liefern wir die verschiedenen Optionen über ein neues Tag/Attribute oder über die oben erwähnte Header-Funktion.
Für Zukunftssicherheit müssen Sie entweder manuell weitere Iterationen des Bildes hinzufügen oder Ihr Servermodul aktualisieren, um diese Variationen zu generieren und für die Anzeige zu cachen.
Dies gibt uns Designern die absolute Kontrolle über die Qualität der Bilder, die wir liefern möchten, und ermöglicht es den Benutzern, von uns verschiedene Bilder anzufordern, wenn sie ein reichhaltigeres/schnelleres Erlebnis wünschen. Außerdem wird dies die Browser-Hersteller dazu anregen, ihre Browser zu verbessern, um ihren Benutzern das beste Standarderlebnis zu bieten.
Was ich mache, ist, anstatt IMG-Tags zu verwenden, divs mit Hintergrundbildern zu verwenden und eine Media-Query zu verwenden, um das Hintergrundbild oder Höhe, Breite usw. basierend auf Pixel-Dichte oder Bildschirmgröße zu ändern, damit ich verschiedene Bildgrößen für verschiedene Geräte liefern kann, sowie hochauflösende Bilder an Telefone mit extrem hochauflösenden Bildschirmen liefern kann.
Da wir nur Lösungen erfinden, die es noch nicht gibt, schlage ich vor, unsere Bilder in einer XML-Datei zu kapseln, à la Android. (Funktioniert die iOS-Bilddelegation genauso? Ich habe es nie versucht.)
So bleiben die HTML-Tags gleich (gut für die Abwärtskompatibilität), aber wir könnten die XML-Datei im Bild-Tag-src angeben (oder möglicherweise im Header – wie wir es mit Stylesheets tun) und das richtige Tag möglicherweise über ein ‚data-‚-Element identifizieren.
Die XML-Datei würde alle Bildidentifikationsnamen und den tatsächlichen Dateinamen und den Speicherort jeder Auflösungsklasse auflisten (niedrig, hoch, mittel-Unterordner, obwohl wir das auch zur Vereinfachung beim Codieren annehmen könnten).
Auf diese Weise eröffnet sich auch die Möglichkeit, dies für Bilder zu ermöglichen, die über CSS abgerufen werden.
Ich bin ziemlich sicher, dass dies die Art und Weise ist, wie wir dies schließlich lösen werden.
Hallo Chris, haben Sie oder Christopher Schmitt diese Dinge auf der W3C-Community-Gruppe zur weiteren Community-Diskussion gepostet?
Nicolas, ich habe meine Idee in der Responsive Images Community Group erwähnt.
Wenn Sie Vorschläge für andere Bereiche oder Mailinglisten haben, um die Diskussion fortzusetzen, lassen Sie es mich bitte wissen.
Ich glaube, es ist eindeutig beides.
1. Es geht nicht nur um Dateigröße und Auflösung. Das mag meistens das Problem sein, aber es ist auch wahrscheinlich, dass Sie unterschiedliche Versionen eines Bildes in unterschiedlichen Größen anzeigen möchten. Zum Beispiel kann es sinnvoll sein, auf einem kleinen Bildschirm in das Gesicht einer Person zuzuschneiden. Beispiele dafür
http://www.useit.com/alertbox/9611.html
http://www.slideshare.net/bryanrieger/prime-sky (Folie 20)
2. Manchmal geht es um Datei und Auflösung und wie sich dies auf den Dienst einer Person auswirkt. Zum Beispiel Retina-Bilder auf einem iPad. Es wäre hilfreich, diese Bilder nur dann zu liefern, wenn die Person eine Breitbandverbindung hat, wenn sie noch viel Bandbreite in ihrem Vertrag übrig hat und nur, wenn sie explizit gesagt hat, dass sie keine hochauflösenden Bilder möchte.
Für den zweiten Fall glaube ich, dass der Browser beteiligt sein muss. Die Netzwerkgeschwindigkeit ist transient. Nur der Browser, der die Netzwerkgeschwindigkeit überwachen kann und mehr über die Vertragsituation des Trägers einer Person wissen kann, kann Entscheidungen darüber treffen, welche Auflösung am besten zu einem bestimmten Zeitpunkt heruntergeladen werden soll.
Kurzfristig würden Lösungen wie die von Apple vorgeschlagene `image-set`-Spezifikation dieses Problem lösen, indem sie angeben, wo Dateien zu finden sind, die dieselbe Datei in unterschiedlichen Auflösungen darstellen, und dann dem Browser die Entscheidung überlassen, welche angezeigt werden soll. Langfristig wäre etwas wie JPEG2000, bei dem die Datei progressiv in verschiedenen Auflösungen heruntergeladen werden kann, ideal.
Aber mir scheint klar, dass wir beides brauchen. Auf der CSS-Seite haben wir diese Flexibilität bereits und sie wird nur besser, wenn Bildsätze übernommen werden. Für Bilder, die Inhalte sind, insbesondere das IMG-Tag, brauchen wir etwas Ähnliches.
Die Verwendung neuer Attribute für hoch- und niedrigauflösende Bilder würde bedeuten
– alle Websites müssen die Unterstützung hinzufügen, damit es funktioniert
– mindestens zwei Versionen jedes Bildes müssen erstellt werden
Ein neues Picture-Tag würde dasselbe bedeuten.
Ein neues Format wie rpng wird
– es wird ewig dauern, bis es von Websites und Bildbearbeitungswerkzeugen übernommen wird
Erstellung neuer Media-Queries basierend auf Auflösung/Verbindungsgeschwindigkeit
– wird Zeit und zu viel Zeit zum Testen und Perfektionieren in Anspruch nehmen
Der beste Weg meiner Meinung nach ist, die Web-Entwickler damit nicht zu belästigen, sondern mobile Browser die gleiche Funktionalität wie Opera Mobile/Mini von Haus aus anbieten zu lassen. Auf diese Weise können die Benutzer wählen, ob sie Komprimierung wünschen oder nicht. Manchmal, auch wenn Leute im WLAN sind, möchten sie schnelle Ladezeiten. Manche möchten eine Fotoportfolio-Seite in ihrer besten Darstellung sehen, selbst wenn sie im
Sehr bald wird dies kein Problem mehr sein, da Netzwerke schneller werden. Das neue iPad hat eine höhere theoretische Downloadrate als mein Laptop über Kabel.
Wer hat gesagt… Opera?
Für mich, wie bei classicc, ist es nicht unsere Aufgabe, uns um solche Dinge zu kümmern, und es wird bereits von einigen der besten Browser hier erledigt, angefangen bei Opera.
Nun, das Problem mit der Verwendung von Opera Turbo und ähnlichen Diensten ist, dass TLS/SSL kaputt geht, so dass Sie zwischen Sicherheit und Funktionen wählen müssen – obwohl dies durch Hinzufügen einiger Dinge zum (noch unfertigen) HTML5-Standard behoben werden könnte.
Lassen Sie die Benutzer nicht nachdenken und belohnen Sie gute Praxis.
Warum nicht einfach auf das CMS verlassen, um Bilder zu liefern? Ich weiß, WordPress erstellt ein paar verschiedene Größen. Ich bin sicher, jemand kann einen Weg finden, dies zu nutzen.
@Brian: Es sei denn, Sie verwenden eine Gerät-Erkennungsdatenbank, das CMS weiß beim ersten Seitenaufruf nichts über die Geräte-/Browserfunktionen. Ich habe die Herausforderungen für das Bild-Tag unter http://blog.cloudfour.com/responsive-imgs/ dargelegt.
@Jason – Wenn Sie über Geräteerkennung nachdenken, ist hier, wo eine Ressource wie Categorizr helfen kann – http://goo.gl/SlIZ1
Ich weiß, wenn Kunden Bilder auf ihre WordPress-Seite hochladen, laden sie das Rohbild hoch, normalerweise JPEGs, von ihrer Kamera. Das ist normalerweise ein breites Bild von 2000-3000 Pixeln, was tatsächlich eine gute Sache ist.
Damit können Sie mit PHP alle benötigten Bilder aus dem Originalbild generieren, das der Benutzer hochlädt. Sie können Ihr Bild für Retina-Displays, ein Bild für normale „Desktop“-Geräte, ein Bild für Tablet-Geräte und ein Bild/s für mobile Geräte generieren. Auf diese Weise muss der Benutzer keine zusätzliche Arbeit leisten, um die anderen Bilder für die verschiedenen Quell-Tags im Picture-Element zu erstellen.
Ich mag das neue Format am meisten. Es könnte abwärtskompatibel gemacht werden, wie animierte GIFs und animierte PNGs es waren. Der Server ermittelt die benötigte Größe und sendet diese dann mit einem Mime-Typ von (zum Beispiel) image/png, überschreibt die .rpng-Endung im HTML. Der Browser würde nur sehen, was wie ein normales PNG-Bild aussieht.
Obwohl ich es nicht besonders mag, scheint das Element die am wenigsten schlechte Option zu sein.
Ein weiteres Bildformat ist nicht wirklich die Antwort, Entwickler/Designer/usw. haben sowieso schon genug Probleme, unsere aktuellen Bildoptionen zu optimieren, ohne noch eins hinzuzufügen.
Man sollte auch bedenken, dass, wenn Sie über 3G verbunden sind, oft automatisch über den Proxy Ihres Mobilfunkanbieters geleitet werden und viele Mobilfunkanbieter Bilder sowieso automatisch herunterskalieren.
Ein Format dafür könnte unser Leben wirklich einfacher machen.
Aber, wenn wir davon ausgehen, dass es 2012 ist, verlassen wir uns immer mehr auf JS/CSS-Animationen und wir haben immer noch kein Bildformat, das Transparenzabbildung + JPG-Kompression kombiniert, also setze ich meine Hoffnungen nicht auf irgendeine Formatlösung.
Meine größte Sorge bezüglich des Bildformats wäre: Akzeptieren CS5 und andere Bildbearbeitungsprogramme dieses neue Format, damit ich es in der Software erstellen kann, die ich bereits für Bilder verwende? Und wie lange wird es dauern, bis IE ein neues Bildformat akzeptiert? Ich bin sicher, Firefox, Chrome und andere werden es schnell übernehmen, aber IE könnte 2 oder 3 Jahre dauern und uns alle dazu bringen, JS und Hacks zu verwenden, um es sowieso zum Laufen zu bringen.
Ich weiß nicht viel über diese Dinge, aber ich denke an den HTML5-Videoplayer und wie es 3 verschiedene Videoformate, Flash-Fallback, Video-Link-Fallbacks geben muss, um alle Browser abzudecken. Wäre es eine ähnliche Situation, wenn ein neues offenes Bildformat in den Mix eingeführt würde?
Nach ein paar Versuchen habe ich ein Attribut data-responsive + JS-Code verwendet, um dieses „Problem“ zu lösen.
Pro
Kein htaccess oder GD-Bibliothek erforderlich
Kein JQuery oder andere JS-Bibliothek
Es ist kompatibel mit Low-End-Geräten, die alte XHTML-Browser verwenden
Kompatibel bis IE5
Contra
Sie müssen Ihr Bild in 4 verschiedenen Größen generieren (240, 480, 600, 800)
Ich sollte einen Blogbeitrag darüber schreiben… :)
Obwohl ich mir der Hürden bei der Implementierung eines neuen Bildformats völlig unwissend bin, stelle ich diese als das auf, was ich für ein neues Format zum Erfolg für absolut notwendig halte
• die Möglichkeit, einzelne Bilder „manuell“ in eine einzige Datei zu packen (z. B. unterschiedliche Beschnitte oder völlig andere Bilder für unterschiedliche Breakpoints, anstatt nur zu skalieren, was immer noch der Standard sein sollte),
• die Möglichkeit, Breakpoint-Kriterien an einen zentralen Controller zu delegieren – Anbindung an CSS- oder JS-Abfragen, eine externe Anweisungsdatei, was auch immer –, um die Kontrolle (darüber, was wann angezeigt wird) in den Händen des Designers zu belassen (auch dies sollte Zucker auf die Standarde des Formats sein),
• die Möglichkeit, mit Browsern, die das neue Format nicht unterstützen, einigermaßen rückwärtskompatibel zu sein – dies bedeutet wahrscheinlich, ein aktuelles Format mit fortschrittlicher responsiver Technologie zu erweitern und ein Basisbild für ältere Browser zugänglich zu halten,
• nicht exakt notwendig für Responsivität, aber ja, wir sollten definitiv auf Alpha-Transparenz UND großartige verlustfreie Komprimierung hoffen.
Nochmals, ich weiß nicht, ob IRGENDETWAS davon möglich ist, aber es wäre großartig, sie alle in einem glänzenden neuen Format zu haben.
Dies wurde wahrscheinlich bereits von der Community diskutiert, aber was ist mit einer Art neuem CSS-Eigenschaft?
So etwas wie
(Ich verwende hier SASS-Syntax)
Ich kann definitiv sehen, wie manche Leute argumentieren würden, dass dies einige Grenzen überschreitet, was die Trennung von Stil/Inhalt angeht, aber aus semantischer Sicht deklarieren wir bereits Bildquellen in der `background-image`-Eigenschaft… Ich weiß, es ist anders, aber irgendwann sollte die Semantik vielleicht ein wenig der Funktionalität weichen? Aus SEO-Sicht sollte dies keine Probleme verursachen, da Ihre Fallback-Bild in der tatsächlichen HTML-Bildquelle deklariert wird (vielleicht wäre die mobile Version des Bildes, das in meinem Code angegeben ist, nicht notwendig, aber es könnte helfen, Breakpoints klar zu definieren).
Ich bin mir nicht wirklich sicher, was die Probleme hier in Bezug auf die Leistung wären… welche Bilder würden geladen, wann vom Benutzer… Ich weiß nicht, wie CSS in dieser Hinsicht funktioniert.
Natürlich hilft diese Option auch nicht, wenn der Benutzer CSS deaktiviert hat…
Nun, ja… es gibt das. Ich bin sicher, es gibt Leistungsprobleme damit, aber was? Welche anderen Probleme könnte es geben? Das scheint ein gangbarer Weg zu sein…
… ah, nun, ich sehe plötzlich einige ernsthafte CMS-Probleme mit bildlastigen Websites
Je mehr ich darüber nachdenke…
1. Desto mehr tut es meinem Kopf weh.
2. Desto mehr denke ich, dass Benutzer die Kontrolle darüber haben sollten, anstatt Media-Queries.
Auch wenn es möglich ist, Gerätegrößen herauszufinden, und in Zukunft können wir möglicherweise Verbindungsgeschwindigkeiten und die Frage, ob der Benutzer für seine Daten bezahlt, herausfinden… es ist unmöglich, Zweck und Kontext zu bestimmen.
Besuche ich die Website des Fotografen, um einem Kunden seine brillanten Bilder zu zeigen? Oder gehe ich dorthin, um seine Nummer schnell zu bekommen, weil ich zu einem Shooting spät dran bin?
Grober Beispiel – http://jsfiddle.net/MerlinMason/LmgdQ/
Keine schlechte Idee, ein 240px breites Bild bereitzustellen, das beim Anklicken zum bestmöglichen wechselt
Ich bin wirklich ein Print-Typ, aber ich werde die Theorie „Es gibt keine dummen Fragen“ mit einigen Fragen testen, die ich zu einem möglichen neuen Bildformat habe.
Da Websites jetzt so flexibel sind, erwarte ich, dass verschiedene Dateitypen für dasselbe Bild derzeit unter verschiedenen Umständen von Vorteil sind. Zum Beispiel, sagen wir, Sie haben ein transparentes PNG verwendet, aber wenn sich eine Website für ein anderes Gerät umstrukturiert, ist Transparenz möglicherweise nicht wichtig und ein JPEG bietet eine bessere Komprimierung.
Würde dieses neue Dateiformat also wie eine Zip-Datei funktionieren, in die ich beliebige Dateitypen packen kann? Oder wäre es ein völlig neues Bildformat, das aktuelle (und zukünftige) Vorteile in Kombinationen nachahmt, die ich wähle? Oder wären es einfach nur progressiv kleinere Versionen desselben Dings, und das war's?
Ich kann mir vorstellen, dass die Antworten auf diese Fragen auch beeinflussen könnten, wie einfach das Aktualisieren dieser Dateien mit neuen Versionen des Bildes wäre.
Es klingt für mich, als ob der Vorteil von weniger Code in diesem Fall auch mit weniger Flexibilität einhergehen könnte. Liege ich falsch, und spielt das eine Rolle?
Ich entwickle seit etwa 3 Monaten WebHD, bei dem ich zuerst ein normales Bild mit 1:1 Pixel-Dichte lade und versteckt das hochauflösende Bild (im Hintergrund) lade und nach dem Laden das niedrigauflösende Bild durch das hochauflösende ersetze. Dies nutzt Retina-Displays (wenn das Originalbild doppelt so groß ist und mit CSS skaliert wird).
Derzeit gibt es, wie im Artikel erwähnt, keine native Möglichkeit zu wissen, wie man Inhalte herunterlädt (3G oder WLAN), aber es beschleunigt den Seitenfluss-Vorschau und die Basisbilder.
Der andere Weg wäre, eine mobile und eine Tablet-Website zu haben, die die entsprechenden Bilder anzeigt.
Es ist traurig, dass sich alles andere schneller entwickelt, als das Web mithalten kann. Das alles, weil Unternehmen um Standards kämpfen.
Ich habe einmal etwas Ähnliches gebaut, mit dem Unterschied, dass Benutzer den HD-Modus initiiert haben. Sie erhalten das Bild in Basisqualität und wenn gewünscht, klicken sie auf eine HD-Schaltfläche, um das größere Bild zu erhalten.
Beachten Sie jedoch, dass Ihre Technik, wenn ich sie richtig verstehe, in allen Fällen beide Bilder lädt. Dies löst nicht das Bandbreitenproblem, es erweckt nur den Eindruck von Leistung.
So viele Lösungen da draußen, es ist großartig zu sehen, dass unsere Branche dieses Rätsel wirklich ernst nimmt. :) lowsrc scheint auch ein sehr interessanter Ansatz zu sein, aber ich zweifle nicht daran, dass bald ein offizieller Standard kommen wird (hoffentlich).
Für diejenigen, die Less.js mögen, habe ich hier meinen Versuch mit responsiven Bildern gemacht: http://forr.st/~VE1 (oder Sie können direkt zu TinkerBin gehen, denken Sie daran, CSS auf LESS einzustellen. Ein Hinweis: Es ist rein experimentell. Vielleicht wäre es in einer separaten „images.less“-Datei nützlich, wo Sie alle Bilder handhaben würden, aber pff… es ist immer noch so mühsam!
Ich bürge jedoch für das unicorn.rpng ;) Frohe Ostern!
CSS ist für Layout, ich würde keine CSS-basierte Lösung für dieses Problem verwenden… eindeutig nicht zukunftssicher und noch nicht einmal gegenwärtig bereit, da es auf Windows Phone (auch 7.5) und WebOS und Blackberry < 5 nicht funktionieren würde. Gute Chance, dass es auch im neuesten Nokia Symbian Belle Browser nicht funktioniert.
Ich bevorzuge das Bilder-Element… hier ist warum
1.) Behält die vollständige Kontrolle darüber, welche Bilder wann gerendert werden, in den Händen des Frontend-Designers… da er/sie die Breakpoints bestimmen darf.
2.) Ist vollständig abwärts- und aufwärtskompatibel… bedeutet abwärtskompatibel, da Sie einen Fallback auf die ursprüngliche Vollbild- oder Mittlere Bilddatei haben (wieder – Ihre Wahl)… und aufwärtskompatibel, da Sie jederzeit zurückgehen und Ihre Breakpoints bearbeiten oder eliminieren können.
Ich habe nichts gegen die zusätzliche Syntax… sicherlich muss es weniger Schreibarbeit und weniger rechenintensiv sein als das Schreiben komplexer JavaScript oder das Anstoßen des Servers zum automatischen Ändern der Bildgröße…
3.) Dieses Picture-Element kann ich mir vorstellen, wie das Image-Element, kann jedes Bildformat enthalten, das von den Browserherstellern für Webkompatibilität vereinbart wurde… was bedeutet, dass es jedes aktuelle oder zukünftige Web-Bildformat (wie dieses WebP-Format, das faszinierend aussieht) verarbeiten könnte…
Das sind nur meine Gedanken… eine von Hunderten hier… tolle Diskussion….
Wie wäre es, wenn man Hintergrundbilder verwendet, um ALLE Bilder zu ersetzen? Sie fügen einfach eine verkleinerte Version in Ihr HTML ein und ersetzen sie durch die richtige über CSS – je nach Bildschirmgröße oder was auch immer Sie möchten (Media Queries).
Die Kenntnis der Netzwerkgeschwindigkeit des Benutzers scheint das Schwierigste zu sein. Ich frage mich, ob Browser etwas Ähnliches wie das iOS App SDK für hochauflösende Bilder übernehmen würden (d. h. `background.jpg` und [email protected]) und es würde das richtige Asset für einen hochauflösenden Bildschirm abrufen. Dann könnte der an das Gerät angehängte Webbrowser zwischen WLAN und Mobilfunknetz unterscheiden und das Bild nicht nur basierend auf der Auflösung des Bildschirms, sondern auch auf der Verbindung abrufen. Das Problem ist, dass dies bei WLAN-Verbindungen zu vielen zusätzlichen HTTP-Anfragen führen würde.
Schwieriges Problem.
Ist es nicht gefährlich für uns anzunehmen, dass nur weil jemand mit einer langsameren Verbindung verbunden ist, er tatsächlich niedrigere Auflösungsbilder möchte….
Bildschirmgröße macht für mich Sinn, da es keinen großen Sinn hat, große Bilder für kleine Bildschirme herunterzuladen… aber wenn jemand mit einem Laptop über 3G oder eine langsame Verbindung verbunden ist, sollen wir annehmen, dass er ein verschlechtertes visuelles Erlebnis wünscht… vielleicht tut er das oder vielleicht auch nicht… Punkt ist, wir wissen es nicht…
@michaelwhyte,
Ich würde es nicht nach Geschwindigkeit drosseln, sondern nach Art der Verbindung. WLAN gegenüber Mobilfunk statt schnell gegenüber langsam. Eine 4G-LTE-Verbindung könnte schneller sein als eine Breitband-WLAN-Verbindung, aber ein 4G-Benutzer hat wahrscheinlich immer noch einen begrenzten Datentarif. Das bedeutet, auch wenn sie die Geschwindigkeit für ein hochauflösendes Bild haben, haben sie möglicherweise nicht die Bandbreite dafür. Das Aufbrauchen des wertvollen Datentarifs eines Benutzers erscheint gefährlicher.
Browser sollten vielleicht eine zusätzliche Funktion haben, um ein- und auszuschalten, ob hochauflösende Assets heruntergeladen werden sollen, wenn sie verfügbar sind. So etwas wäre für Mobilfunkbenutzer am besten. Etwas, das ihnen die Wahl gibt.
Wir haben Inhaltsverhandlung seit mehreren Jahren, zumindest seit HTTP/1.1 veröffentlicht wurde. Eine Standard-HTTP-Anfrage enthält Header, die bevorzugte Dokumenttypen, Zeichensätze, Encodings und Sprachen angeben.
Die Einführung eines neuen Headers mit der Breite und Höhe des Viewports wäre keine leichte Aufgabe. Und es wäre zu 100 % abwärtskompatibel.
Um heute responsive Bilder zu liefern, ist die JavaScript-Lösung bei weitem die beste. Sie ist abwärtskompatibel, cachebar und relativ einfach zu warten. Sie erfordert zwar erweiterte HTML-Modifikationen, aber nichts, was nicht leicht mit einem regexp-Filter gemacht werden kann.
Die UA-Sniffing- und Cookie-Lösungen erstellen Bilder, die weder von HTTP-Beschleunigern noch von Proxys gecacht werden können (oder sollten). Die UA-Sniffing-Technik ist außerdem sehr fehleranfällig und erfordert viel Wartung.
Ich kam hierher, um das zu schreiben, aber Sie haben es besser formuliert, als ich es könnte, also danke. Ich denke, wenn man sich diesen Thread und all die Bedenken, Vorbehalte und Fragezeichen ansieht, wird klar, dass HTML und neue abstrakte Formate nicht die endgültige vollständige Antwort sind. Dies ist ein Seitenmanipulationsproblem, das weiterhin von JavaScript gehandhabt werden sollte. Wenn es Inhaltsverhandlungen gibt, sollten sie über einen Header erfolgen.
Genau – lassen Sie den Client dem Server sagen, was er will. Zusätzlich zur Viewport-Breite und -Höhe würde ich einen Header für „bevorzugt [niedrig/hoch] auflösende Bilder“ hinzufügen. Mobile Clients könnten dann diesen Header umschalten, je nachdem, ob das Gerät mit einem Mobilfunk- oder WLAN-Netzwerk verbunden war, mit einer Benutzereinstellung, um „immer niedrig“, „immer hoch“, „automatisch“ zu wählen.
Danke für alles ;) großartig
Nur eine andere Idee zur Überlegung… wie wäre es mit einem einzigen hochauflösenden Bild mit einer Proxy-Verhaltensdatei (wie einem Codec), um zu definieren, wie viele Pixel (oder wie viel Auflösung) basierend auf dem Geräte-Pixel-Verhältnis oder der Gerätebreite (mit @media-Queries) angezeigt werden sollen?
Stellen Sie es sich wie die Bearbeitung von HD-Videos vor, bei der nur eine Vorschau mit geringerer Auflösung verwendet wird, um die Neuberechnung zu beschleunigen, oder die Vorschauqualität von verknüpften hochauflösenden Bildern in Indesign-Layouts.
Vorteile: Eine src-Datei für jedes Bild, nicht auf JS angewiesen, kann global oder auf einzelnen Bildern eingestellt werden, keine Änderung der HTML-Syntax, vollständig responsiv über CSS.
Nachteile: Möglicherweise Leistungsprobleme beim Herunterskalieren großer Bilder im laufenden Betrieb für kleinere Geräte?
Nur mal so in den Raum geworfen.
Kann nicht jemand einfach **Portable Network Graphics** in **Progressive Network Graphics** verwandeln?
Aktualisieren Sie einfach das Format, damit bestehende Anwendungen das Standardbild sehen und Anwendungen, die das ‚progressive‘ Bit unterstützen, die verschiedenen Größen, Proportionen usw. (was auch immer sie spezifizieren) laden können.
Voilà, Sie haben eine fehlerfreie Abwärtskompatibilität! :-)
FlashPix speichert mehrere Bilder in einem Bild, das wollen/brauchen wir nicht. Wir haben 1 Hauptbild und für die kleineren Bilder (sogar Thumbnails, zugeschnittene Versionen etc.) wollen wir nur einen Bruchteil dieses Bildes nehmen und es liefern.
Ich verschwende Stunden damit, Duplikate von Bildern in verschiedenen Größen, Thumbnails usw. zu erstellen. Ich wünschte, ich könnte diese einfach in 1 PNG-Datei spezifizieren und hochladen. Dann nur das img-Tag verwenden, um es zu laden. Das könnte der img-Tag-Syntax einige Ergänzungen hinzufügen, aber nur, um zu definieren, welche Version des Bildes Sie verwenden möchten.
Realistisch gesehen denke ich, dass die neue Bildsyntax der wahrscheinlichere Kandidat für die Zukunft ist, obwohl sie viel zu wünschen übrig lässt.
Meine Hauptsorge ist, dass die Mehrheit des „Webs“ dieses „Problem“ überhaupt nicht behandeln wird. Sicher, Web-Handwerker, die Websites wie diese besuchen, werden den Weg weisen, aber der Rest des Webs wird überhaupt nicht oder nur sehr langsam folgen. Viele Websites sind wartungsarm/wartungsfrei, es gibt eine Menge selbstgemachter CMS oder gar kein CMS, und all diese Leute werden einfach nicht mehrere Versionen desselben Bildes erstellen. Das sehe ich einfach nicht passieren.
Daher denke ich, dass die Lösung mit der größten Automatisierung (durch Browser-Intelligenz, ein neues Bildformat, was auch immer) die überlegene Lösung aus den genannten Gründen sein wird.
Übrigens sehe ich in den obigen Kommentaren auch viel Überschätzung und falsche Annahmen über die verfügbare Bandbreite für Benutzer, bezahlt oder nicht. Die Verknüpfung dieser Annahmen mit der Inhaltsbereitstellung ist ein riskantes Geschäft.
Ich bin der Meinung, dass
<img rsrc=”responsive.rpng” src=”non-responsive.png”/>
ein guter Kompromiss wäre, wobei „src“ nur verarbeitet wird, wenn „rsrc“ nicht vorhanden ist.
Enthält .icns nicht mehrere Bilder?
Wäre es möglich, das neue Bildformat in ein progressiv verbessertes, „stummgeschaltetes“ Upgrade von Bildformaten zu integrieren? Wenn wir zum Beispiel PNGs aktualisieren und trotzdem die gleiche Erweiterung beibehalten könnten, vielleicht könnten wir ihnen Variablen in ihrer URL übergeben, wie hier
Vielleicht könnte das so eingerichtet werden, dass ältere Browser (IE) die Variablen einfach ignorieren und es trotzdem wie ein PNG servieren? Durch die Übergabe von Variablen an das neue Format könnten wir auch mehr Kontrolle darüber haben, wie es ausgeführt wird. Vielleicht könnte eine Art API uns Optionen dafür bieten, was bei unterschiedlichen Bandbreiten passiert und wie responsiv die Bilder auf die Bildschirmgröße reagieren?
Ich weiß nicht genug über Bildformatbehandlung, um zu wissen, ob das möglich wäre, aber es könnte großartig sein.
Wie ist der Stand der Meinung zu TimThumb?
http://code.google.com/p/timthumb/
Ich verfolge dieses Problem seit einiger Zeit und habe jetzt das Gefühl, dass wir viel Arbeit investieren, um das Problem von gestern zu lösen. Mobile Bandbreite wächst rapide (obwohl Datenlimits das nicht tun, zugegeben) und ist manchmal höher als Desktop-Bandbreite. Ich könnte diese Diskussion führen, wenn die Lösung nur ein kleiner Eingriff hier und da wäre, aber wir sprechen von neuen Bildformaten, neuem HTML – ist dieses Problem es wirklich wert? 500 KB decken sehr große, sehr hochwertige JPEGs ab. Das ist im Vergleich zu meinem 3 GB iPhone-Cap kaum messbar, verglichen mit sogar einem kleinen Video.
Als Fotograf optimiere und schärfe ich meine Bilder für eine Zielgröße. Das würde mit einem neuen Bildformat mit mehreren Versionen funktionieren, aber jetzt haben wir eine riesige Datei, die der Server zerlegen muss. Sicher, das kann gemacht werden, aber lohnt es sich, wenn die Einführung ziemlich langsam wäre?
Ich denke, wir haben größere Fische zu braten – vielleicht bessere Textformatkontrolle für mehrere Spalten; Kerning- und Ligaturenkontrolle; alle möglichen Dinge, die nichts mit Bandbreite oder Bildschirmgröße zu tun haben.
Meine Lösung ist also, sich keine Sorgen zu machen; weiterhin das gleiche img-Tag verwenden. Bin ich faul? Ich ziehe es vor, den Begriff „pragmatisch“ zu verwenden, habe aber keine große Entgegnung auf „faul“.
Einige wirklich gute Punkte. Wenn Sie Ihre Websites mit Webfonts und vielen per CSS erstellten Elementen gestalten, sehen diese Elemente auf hochauflösenden Displays großartig aus. Wenn Sie möchten, dass Ihre Logos gut aussehen, sollten Sie erwägen, SVG-Bilder zu verwenden, wo immer Sie können. JPEG-Fotos sehen immer noch ziemlich gut aus, solange sie keine Menge an Strichzeichnungen enthalten.
Außerdem ist es eine Tugend und kein Problem, ein fauler Programmierer zu sein. :)
Die mobile Bandbreite wächst rasant...
Moment, lassen Sie mich das klarstellen: Die mobile Bandbreite wächst in den Vereinigten Staaten rasant...
Eigentlich, lassen Sie mich das ein wenig verfeinern: Die mobile Bandbreite wächst in städtischen Gebieten der Vereinigten Staaten rasant...
Okay, wenn ich jetzt darüber nachdenke, wächst die mobile Bandbreite in den meisten städtischen Gebieten der Vereinigten Staaten rasant, aber nicht einheitlich, was bedeutet, dass die Leute auch in Gebieten, die angeblich 4G unterstützen, langsame Verbindungen haben können.
4G/LTE wird uns nicht retten, und selbst wenn es das würde, haben Google, Amazon, Yahoo und Microsoft alle dokumentiert, wie Millisekunden-Verbesserungen bei der Leistung die Benutzerfreundlichkeit und Nutzung verbessern.
Sie kümmern sich vielleicht nicht darum, zusätzliche Leistung aus Ihrer Website herauszuholen, aber Sie haben wahrscheinlich auch nicht Millionen von Dollar auf dem Spiel, die durch eine langsame Benutzererfahrung beeinträchtigt werden könnten. Für diese Unternehmen sind Lösungen für diese Probleme von größter Bedeutung.
Eines der Unternehmen, dem die Leistung am wichtigsten ist, ist Google. Apple hat bereits image-set vorgeschlagen, um bei Auflösungsproblemen zu helfen, also sehen sie das Problem auch. Beide Unternehmen tragen zufällig auch zu den führenden Beiträgen zu WebKit bei. Es erscheint sehr unwahrscheinlich, dass es keine Änderung an der Art und Weise geben wird, wie wir Bilder handhaben, um diese Probleme angesichts der beteiligten Personen anzugehen.
Glücklicherweise warten sie nicht darauf, dass Bandbreitenverbesserungen uns retten.
Ich denke, die meisten von Ihnen verpassen den Punkt von Forest Tanaka, den ich für einen Realisten halte.
Schauen wir uns PNGs an, die als besseres, bildfreundlicheres Format für das Web und andere digitale Medien entwickelt wurden. Laut Wikipedia begannen die Diskussionen über PNGs 1995, als das Web noch in den Kinderschuhen steckte und 56k-Modems Hightech waren... Jetzt ist es 2012 und es gibt immer noch Leute, die IE6 unterstützen müssen, der transparente PNGs nicht vollständig unterstützt... 17 Jahre später und wir haben immer noch keine universelle Unterstützung für PNG... bis wir das haben, sieht es so aus, als ob wir uns mit einem weiteren Bildformat beschäftigen werden....
Für Mega-Seiten wie Google und Apple kann ich sehen, wie wichtig es ist, jedes Quäntchen Bandbreite aus ihren Websites herauszuholen... aber für Leute, die kleinere Seiten erstellen... was meiner Meinung nach Forest sagt, ist, dass es andere Bereiche gibt, auf die wir unsere Bemühungen konzentrieren sollten, wo sie jetzt einen Unterschied machen können...
Persönlich baue ich meine Seiten gerne für die Zukunft... Ja, Leute in der Dritten Welt haben keine Hochgeschwindigkeit... aber einige haben nicht einmal das Internet... drucken wir die Seite auf Papier aus und verteilen sie in die entlegensten Winkel der Erde.... Internetgeschwindigkeiten werden immer schneller und schneller.... Mobiltelefone werden immer günstiger und günstiger.... Stellen Sie sich in fünf Jahren vor, wie günstig ein iPhone 4 auf dem Gebrauchtmarkt sein wird.... stellen Sie sich vor, welche Auflösungen wir in der entwickelten Welt verwenden werden.... stellen Sie sich vor, wie schnell unsere Internetverbindungen hier sein werden.... vielleicht werden unsere heutigen Geschwindigkeiten hier den meisten Bürgern in weniger glücklichen Ländern zur Verfügung stehen...
Wenn ich wählen müsste, würde ich kein neues Bildformat entwickeln, sondern die mehrzeilige Bildauswahl in unserem HTML vornehmen... was ähnlich wie das Video- oder Audiotag ist... aber ich glaube, in 5 oder 10 Jahren wird diese Diskussion insgesamt lächerlich erscheinen, wenn wir unsere 100 Mbit/s-Downloads genießen und die entwickelte Welt ihre 5 Mbit/s-Downloads erhält...
Übrigens, laut dieser Seite: http://www.netindex.com/download/2,97/Sudan/ ... Die durchschnittliche Internetverbindungsgeschwindigkeit im Land Sudan beträgt 0,97 Mbit/s... etwa 18-mal schneller als das, was unsere High-Tech-Modems von 1995 hier in der entwickelten Welt leisten konnten.... stellen Sie sich vor, was in 17 Jahren die Internetgeschwindigkeiten im Sudan und im Rest der entwickelten Welt sein werden...
Ich denke, Forest hat einen guten Punkt gemacht.
Ich denke, wir müssen es so einfach wie möglich halten. Ich mag die 'rpng'-Idee, und sie könnte immer ein beliebtes .png-Format liefern, um die Abwärtskompatibilität zu gewährleisten.
Angesichts der Anzahl von Internetnutzern weltweit, die eine geringere Bandbreite haben als wir glücklichen Leute mit Hochgeschwindigkeitsinternet, lokalem WLAN und unbegrenzten mobilen Paketen, muss es eine Lösung geben, die global inklusiv ist.
Wenn diese Lösung (zumindest am Anfang) sperriger als elegant ist, denke ich, dass wir Entwickler (und Designer) das gerne ertragen sollten.
Würden Sie sich nicht besser fühlen, wenn Sie wüssten, dass Sie mehr Benutzern auf der ganzen Welt ermöglichen? Ein wenig mehr (sagen wir) JS mag ein kleiner Preis für die Bereitstellung viel kleinerer Dateien für Nutzer mit geringer Bandbreite oder alter Ausrüstung sein.
Was die Lösung betrifft, nun, ich weiß nicht, was es ist oder was es sein sollte; alles, was ich weiß, ist, dass diejenigen, die die Standards definieren, und diejenigen, die die Browser-Engines entwickeln, sich beeilen und sich darauf konzentrieren müssen, Inhalte angemessen bereitzustellen.
Persönlich würde ich mir jedoch hybride / Media-Query-Tags wünschen (mit den Inline-Media-Queries, die einen Stylesheet überschreiben, wie man es erwarten würde).
Hier ist meine Lösung mit dem Cloudinary-Dienst in einer Rails-App
Die obigen Lösungen sehen sehr schwierig zu implementieren aus – Abwärtskompatibilität, das Umschreiben von Seiten oder das Chaos mit Caches scheinen alles Probleme zu sein.
Wie wäre es mit etwas in CSS?
Haben Sie etwas serverseitig in der CSS-Datei wie
Das obige listet die Filter auf, die der Server unterstützt, wobei "none" und "100%" die Standardwerte sind. Der Client fügt beim Anfordern eines Bildes den Filternamen und -wert irgendwo im HTTP-Anfrageheader hinzu. Wahrscheinlich zuerst als 'X-...' Wert, später aber als etwas Standardmäßigeres, ähnlich wie ETags.
Richten Sie dann einfach eine Media-Query für mobile Benutzer ein, die eine Größenänderung erzwingt
Mit der obigen Lösung, wenn der Browser sie nicht unterstützt, ist es kein großes Problem, sie erhalten einfach Vollbildbilder und es wird Druck geben, aufzurüsten und zusätzliche Header zu unterstützen, um das Surfen zu beschleunigen. Da es HTTP-Header-Felder gibt, sollten Caches diese erkennen und die richtige Version des Bildes cachen, wobei standardmäßig Vollbild angezeigt wird, bis ein Upgrade erfolgt.
Das obige ist aus dem Stegreif – sagen Sie mir ruhig, wenn ich etwas Offensichtliches übersehen habe.
Im Moment probiere ich Riloadr aus, einen in Javascript geschriebenen responsiven Bilderlader, und ich muss sagen, ich bin wirklich beeindruckt von der Flexibilität, die diese Bibliothek bietet.
Keine Abhängigkeiten außer JS, HTML & CSS, Bildgruppen, unbegrenzte Breakpoints, die ähnlich wie CSS-Media-Queries funktionieren, Callbacks, Lazy Loading... kurz gesagt, es ist das bisher vollständigste Tool, das ich ausprobiert habe, und... es funktioniert einfach!!
@Chris: Hast du es ausprobiert? https://github.com/tubalmartin/riloadr
Ich würde keine UA-Erkennung verwenden, da sie schwer zu warten ist und möglicherweise nicht jedes erwartete Gerät/jeden Browser abdeckt.
Die meisten Lösungen verlassen sich nicht auf UA-Erkennung, daher würde ich vorschlagen, dies anders anzugehen und eine der bekannten Lösungen zu verwenden oder einige neue auszuprobieren, wie Riloadr (https://github.com/tubalmartin/riloadr) oder foresight.js (https://github.com/adamdbradley/foresight.js).
Ich werde einfach sagen, dass die Browser vieler Telefone eine Option für Bilder mit niedriger, mittlerer und hoher Auflösung haben. Ein Beispiel dafür ist Opera Mini. Dasselbe kann in Chrome erreicht werden. Bei einigen Smartphone-Browsern ist dies jedoch ein ernstes Problem. Während es wichtig für mich ist, meinen Lesern zu helfen. Deshalb werde ich den obigen Code-Schnipsel verwenden, den Sie hinzugefügt haben. Danke fürs Teilen.
Ich stimme für ein neues Highsrc-Attribut für das gute alte img-Tag.
Schon die Überlegung, ein neues Bildformat zu übernehmen, ist ziemlich unrealistisch. Wie jemand anderes bereits angemerkt hat, verwenden wir immer noch iepngfix, um die richtige Transparenzunterstützung in IE6 zu erhalten, 17 Jahre nach der Entwicklung von PNG. Die Einführung neuer Bildformate und die Fehlerbehebung durch Browser und Grafiktools sind einfach viel zu langsam für etwas so Wichtiges und *zeitkritisches* wie dieses. (Wie viele von uns lesen diesen Artikel bereits auf einem iPad 3, hm? Wir brauchen JETZT eine standardisierte Lösung).
Ein neues Bildformat mit mehreren Versionen in einer Datei passt auch nicht gut zum Caching (im Browser, transparent im Netzwerkpfad und am Serverende mit CDNs), und Caching ist für die Leistung von *größter Bedeutung*. Einfaches, effektives Caching ist *alles*.
Langfristig ist das vorgeschlagene <picture>-Tag wahrscheinlich lohnenswert und bietet eine schöne, allgemeine Lösung für das Kernproblem, vorausgesetzt, der Browser ist intelligent genug, um keine wahnsinnig große Version bei einer sehr langsamen Verbindung zu wählen, und hoffentlich gibt er dem Benutzer irgendeine Art von Kontrolle über diese Entscheidung in seinen Einstellungen. Ich bin ganz für <picture>, aber...
<picture> ist sehr wortreich für etwas so Übliches wie Bilder. Diese Wortreichheit und die daraus resultierende Flexibilität sind großartig für <video>, da Sie wahrscheinlich nicht mehr als eines auf einer Seite haben werden, und Sie können sehen, dass die Flexibilität in vielen Fällen nützlich, sogar notwendig sein wird. Aber Bilder sind viel häufiger, daher sind Kürze und Einfachheit viel wichtiger. Und wir wollen Kompatibilität mit all diesen Skripten, die img-Elemente lesen oder manipulieren. Und vor allem wissen wir, dass der überwältigend häufigste Fall für Bilder nur 2 Versionen sein wird, eine normale Version und eine High-DPI-Version mit 2-facher Auflösung. Das wird 99 % aller Anwendungen ausmachen.
Warum also nicht einfach halten, indem wir diesen häufigen Fall direkt zum guten alten <img>-Tag hinzufügen, als neues Attribut namens highsrc, mit dem Verhalten:
1) Der Browser kann jederzeit src auf den Wert von highsrc setzen. Dies würde normalerweise beim anfänglichen Laden der Seite auf High-DPI-Systemen geschehen, es sei denn, der Benutzer hat dies in den Browsereinstellungen deaktiviert. Aber es könnte auch nach dem Laden der anfänglichen src-Bilder geschehen, wenn die Verbindung langsam, aber nicht zu langsam ist, wo es sich lohnt, zuerst die normalen zu laden und dann im Hintergrund zu ersetzen, wenn die High-DPI-Bilder während der Leerlaufzeit eintreffen.
2) Wenn JavaScript src festlegt, legt dies implizit auch highsrc auf denselben Wert fest. JavaScript muss highsrc explizit nach dem Festlegen von src setzen, wenn es etwas wie ein High-DPI-Rollover tut, um sicher und einfach zu sein und keine bestehenden Skripte zu beeinträchtigen, während eine einfache Übernahme des neuen Attributs ermöglicht wird.
Ich kann an diesem Ansatz selbst nichts offensichtlich Problematisches erkennen. Er deklariert die verfügbaren Versionen im HTML auf einfache, knappe Weise und überlässt dann dem Browser die Entscheidung, was der richtige Ort zu sein scheint. Das bedeutet, der Benutzer kann über die Browsereinstellungen Einfluss nehmen, und die aktuelle Verbindungsgeschwindigkeit kann ebenfalls berücksichtigt werden. Wenn ein Benutzer also pro MB bezahlt, kann er High-DPI-Bilder deaktivieren, genauso wie er heute in den meisten Browsern alle Bilder deaktivieren kann. Und bei einer langsamen Verbindung kann der Browser sich anpassen, entweder automatisch oder mit einer Art Benutzereinstellung zur Hilfe – persönlich würde ich eine einfache Einstellung bereitstellen wie "Lade keine High-DPI-Bilder, die länger als X Sekunden dauern".
Einfach. Leicht zu verstehen (und zu lehren). Leicht, schnell in heutigen Browsern zu implementieren. Leicht zu standardisieren. Bricht keine bestehenden Seiten oder Codes.
Wenn jemand WordPress für seine responsiven Layouts verwendet, kann er sich ein kleines Plugin ansehen, das ich geschrieben habe, um mobile Bilder über PHP bereitzustellen.
Für die derzeitigen Standards ist eine serverseitige Lösung meiner Meinung nach der beste Weg, obwohl die Abhängigkeit vom User-Agent-String erforderlich ist, was nicht so effizient ist wie die Browserbreite.
Wenn jemand interessiert ist, hier ist der Link
http://www.spaceheadconcepts.com/blog/wordpress/responsive-images-responsage/
Ja, ich stimme zu. PHP ist eine relativ gute Lösung, da es serverseitige Bildgrößenänderungen durchführen kann... Angesichts der Unpraktikabilität für den Webdesigner, 3 oder mehr Bildgrößen zu erstellen... und CMS, hmmm, meiner Meinung nach kein guter Weg... Also ja, PHP-serverseitige Größenänderung scheint gut.
Ich versuche, eine responsive Webanwendung zu entwickeln, die auflösungsunabhängig ist.
Ich möchte wissen, welche Einheiten ich für die Höhe eines Divs verwenden kann.
Derzeit verwende ich Prozent (%) Einheiten für Breite und Höhe, aber es funktioniert nicht immer, z. B. bei float-Divs und relativ positionierten Divs.
Aber wenn ich Pixel-Einheiten für die Höhe und Prozent (%) für die Breite verwende, funktioniert es gut.
Ist das die richtige Methode??
Bei responsiven Bild-Polyfills, werfen Sie einen Blick auf dieses Skript. Es macht genau dasselbe wie Scott Jehls Picturefill, aber mit einem JSON-orientierten Ansatz und besserer Unterstützung für IE8. https://github.com/verlok/picturePolyfill
Wäre das ein potenzielles Merkmal der serverseitigen Skripte? Nur eine Funktion wie "renderOptimum", die das Zielbild in einer Auflösung von 300 dpi nimmt und es für den Benutzer in der entsprechenden Auflösung rendert? Die Präferenz für Geschwindigkeit gegenüber Qualität könnte entweder durch Aufforderung des Benutzers oder durch Überschreibung per Code bestimmt werden; wenn seine Verbindung als "langsam" erkannt wird, sein Pixelverhältnis aber größer als 1 ist.