img
with srcset
attribute scheint eine großartige Möglichkeit zu sein, reaktionsschnelle Bilder zu erstellen. Gibt es eine äquivalente Syntax, die in CSS funktioniert?background-image
Eigenschaft ?
HTML
<img src="small.jpg" srcset="medium.jpg 1000w, large.jpg 2000w" alt="yah">
CSS
.mycontainer {
background: url(?something goes here?);
}
html
css
background-image
srcset
Martin Algesten
quelle
quelle
x
Deskriptoren zu unterstützen scheint sinnlos, ich meine, ein Hintergrundbild könnte auf einem 2x 'Retina'-Desktop (5120w) in voller Breite sein, was auf einem Handy mit 2x (720w) ein lächerlich großes Bild ist, das jedes mobile Gerät sogar als Webseite betrachten kann Hintergrund. Selbst die Verwendung von Medienabfragen mit maximaler Breite für einige verschiedene Größen ist nicht besonders hilfreich, da der Hintergrundcontainer nicht die maximale Breite und die maximale Bildschirmbreite aufweist.Ziemlich sicher, dass:
funktioniert genauso. Der Browser überprüft die Bilder, um festzustellen, welche am besten passen, und verwendet diese.
quelle
Ein anderer Ansatz, der offen gesagt robuster ist, besteht darin, die Eigenschaften und Optionen von Hintergrundbildern an ein Bild mit dem Attribut srcset anzupassen.
Stellen Sie dazu das Bild auf Breite ein: 100%; Höhe: 100%; und Objektanpassung: abdecken oder enthalten.
Hier ist ein Beispiel:
Dies ist möglicherweise nicht der beste Ansatz für alle, aber ich kann mir vorstellen, dass ohne Javascript-Problemumgehung die gewünschten Ergebnisse erzielt werden.
quelle
Für eine Polyfüllung können Sie ein Bild mit srcset als Mechanismus zum Herunterladen der richtigen Bildgröße verwenden. Anschließend können Sie es mit JS ausblenden und das Hintergrundbild eines übergeordneten Elements festlegen.
Hier ist eine Geige: http://jsbin.com/garetikubu/edit?html,output
Die Verwendung
onload
und das Einfügen des JS als Blockierungsskript in das<head>
ist wichtig. Wenn Sie das Skript später<body>
einfügen (z. B. am Ende von ), können Sie eine Race-Bedingung erhalten, bei der img.currentSrc noch nicht vom Browser festgelegt wurde. Warten Sie am besten, bis es geladen ist.In diesem Beispiel können Sie sehen, wie das Originalbild heruntergeladen wird. Sie können es einfach mit etwas CSS ausblenden.
quelle
Sie können Medienabfragen für Ihren Zweck verwenden. So einfach ist das:
Und ich denke, es funktioniert in jedem Browser, der Medienabfragen unterstützt;)
quelle
Ähnliche Lösung mit
<picture>
Element: Tutorial hierFall des Tutorials:
Beispielcode:
quelle
Wenn Sie das Foundation Framework ( https://foundation.zurb.com/ ) verwenden, können Sie das Interchange-Plugin dafür verwenden:
https://foundation.zurb.com/sites/docs/interchange.html#use-with-background-images
quelle
responsive-loader
für eine ziemlich süße Lösung verkabelt .Basierend auf der Antwort von @Weston habe ich eine allgemeinere jQuery-Lösung erstellt. Sie können JS und CSS einfach kopieren und einfügen und sich auf den HTML-Teil konzentrieren;)
TL; DR - Geige: https://jsfiddle.net/dpaa7oz6/
CSS
... um sicherzustellen, dass Bilder beim Laden kaum sichtbar sind
JS / jQuery
Dieses Skript durchläuft alle Bilder mit
srcSet
Klassen- und Bindungsereignissenload
, die ausgeführt werdencurrentSrc
(odersrc
nicht unterstützt werden), und legt sie alsbackground-image
CSS an das nächstgelegene übergeordnete Element mitbgFromSrcSet
Klasse weiter.Das selbst würde nicht reichen! Daher wird auch eine Intervallprüfung für das
window
load
Ereignis durchgeführt, um zu testen, ob die Ladeereignisse abgeschlossen wurden. Wenn nicht, werden sie ausgelöst. (Dasimg
load
Ereignis wird sehr oft nur beim erstmaligen Laden ausgelöst. Beimfolgenden Laden kann die Bildquelle aus dem Cache abgerufen werden, was dazu führt , dass das img-Ladeereignis NICHT ausgelöst wird! )HTML
... könnte so aussehen:
Hinweis: Klasse
bgFromSrcSet
darf nicht auf sichimg
selbst gesetzt werden! Es kann nur auf die Elemente imimg
übergeordneten DOM-Baum festgelegt werden.quelle