Beim Bereitstellen von Bildern für Betrachter sind verschiedene Dinge zu beachten.
- Halten Sie das Bildverhältnis auf den ursprünglichen Abmessungen
Wir tun dies, um zu verhindern, dass das Bild verzerrt wird, und um zu verhindern, dass Bilder verschwommen werden. Wir können entweder das Maßverhältnis gleich halten oder Teile abschneiden, die nicht passen.
Wenn Sie ein <img>
Element oder ähnliches verwenden, ist dies ziemlich einfach. Sie müssen lediglich eine Menge width
oder eine height
ODER-Menge max-width
oder verwenden max-height
.
Bei einem Bild mit voller Ansichtsfensterbreite ist dies jedoch etwas komplexer. Es gibt verschiedene CSS-Möglichkeiten, von denen die beste background-size:cover
wie das erste verknüpfte Beispiel im Artikel und in der Antwortshow von Talkingrock ist .
Darüber hinaus haben wir jetzt die Möglichkeit, die Funktionen zu verwenden, die in der Antwortbildspezifikation enthalten sind, einschließlich srcset
und des <picture>
Elements, die sehr nützlich sind. Ich spreche später in dieser Antwort mehr darüber.
- Geben Sie den Zuschauern nur die Bilder, die sie benötigen
Um das Laden der Seite zu beschleunigen und zu verhindern, dass Benutzer mehr Daten übertragen müssen, ist es von entscheidender Bedeutung, dem Endbenutzer nur die Bilder bereitzustellen, die er benötigt, wenn er sie benötigt. Dies bedeutet, dass wir ihnen ein Bild liefern, das dieselbe Größe hat oder nur ein wenig größer ist als das Ansichtsfenster, das sie verwenden, und darauf warten, Bilder zu laden, die erst unmittelbar nach dem ersten Laden der Seite angezeigt werden.
Wir können ein Bild mit angemessener Größe mithilfe von CSS @media
bereitstellen, indem wir Abfragen verwenden, wenn wir Hintergrundbilder verwenden. Die Bilder, die nicht in der verwendeten Medienabfrage enthalten sind, werden nicht geladen . Ich würde empfehlen, mindestens drei Fotogrößen zu verwenden (was mindestens drei Medienabfragen bedeutet), aber ein paar mehr zu haben, könnte in Bezug auf die Leistung sehr hilfreich sein. Das Folgende ist ein Beispiel, sollte jedoch normalerweise mit einigen allgemeinen Haltepunkten für das Layout Ihrer Site übereinstimmen.
@media (max-width: 320px) { /* For phones (this breakpoint is the one I'm least sure about) */
... background-image(imageURLforPhones.png); ...
}
@media (min-width:501px) and (max-width: 1024px) { /* For tablets and such */
... background-image(imageURLforTablets.png); ...
}
@media (min-width: 1025px) { /* For large screens */
... background-image(imageURLforLargeScreens.png); ...
}
Aber seien wir ehrlich: Wir sind nicht gut darin, Haltepunkte auszuwählen, und wir sind auch nicht perfekt darin, Bildabmessungen bei einer bestimmten Bildschirmgröße auszuwählen. Wäre es nicht großartig, wenn wir das etwas "magisch" für uns tun lassen könnten?
Die gute Nachricht ist, dass wir jetzt können !
Mit der reaktionsschnellen Bildspezifikation können wir den Browser all dies für uns entscheiden lassen, vorausgesetzt, wir helfen ein wenig. Die sehr nützliche srcset
Eigenschaft kann mit einem <img>
oder einem <picture>
Element verwendet werden. Für die Auflösungsumschaltung wie hier sollten wir ein <img>
Element verwenden.
Das Folgende ist ein Beispiel für den HTML-Code, der benötigt wird, um srcset
seine Arbeit zu erledigen. Weitere Informationen finden Sie in Yoav Weiss ' großartigem Artikel zu diesem Thema. Das Beispiel wird daraus gezogen.
<img src="cat_500px.jpg"
srcset="cat_750px.jpg 1.5x, cat_1000px.jpg 2x"
width="500" alt="lolcat">
Randnotiz: Wenn Sie dasselbe Bild mit bestimmten Abmessungen bei bestimmten Ansichtsfenstergrößen bereitstellen müssen, können Sie das sizes
Attribut verwenden.
Ich sage nicht, dass die Verwendung srcset
notwendigerweise besser ist als die Verwendung eines CSS-Hintergrundbilds. Ich habe selbst nicht genug damit gearbeitet, um dies sicher zu sagen, aber es ist möglicherweise ein besserer Weg.
Um die Leistung zu verbessern, können wir auch Bilder "verzögert laden", die anfangs nicht sichtbar sind. Dies bedeutet, dass wir verhindern, dass sie anfänglich geladen werden, aber mit dem Laden beginnen, sobald die erste Seite geladen ist. Auf diese Weise können wir den Betrachter dazu bringen, die Seite so schnell wie möglich zu sehen und später einige Details einzugeben. Hier ist eine Möglichkeit , dies zu tun. Ich werde im Moment nicht auf Details eingehen.
- Stellen Sie sicher, dass der Inhalt des Bildes, das Sie anzeigen möchten, angezeigt wird
Wenn wir die richtigen Abmessungen und eine hervorragende Leistung haben, ist das fantastisch, aber wenn der Betrachter nicht sieht, was er sehen soll, hat das keinen Sinn. Wenn wir das Bild die ganze Zeit vollständig anzeigen, ist dies kein Problem, aber wenn wir das Bild zuschneiden müssen, kann dies ein Problem sein.
Wir können background-image
s mit CSS zuschneiden, indem wir background-size
und verwenden background-position
(und eine Art von Verwendung clip
, aber das wird normalerweise für künstlerischere, komplexere Formen verwendet). Die genauen Details variieren von Bild zu Bild, je nachdem, wie es implementiert wird.
Die zweite Option ist die Verwendung des <picture>
Elements. Wir verwenden dies, wenn wir nur einen Teil des Bildes zeigen möchten, wie hier gezeigt , aber hier ist ein einfaches Beispiel dafür in der Praxis (entnommen aus Jason Grigsbys großartigem Artikel zu diesem Thema).
<picture>
<source media="(min-width: 45em)" srcset="large.jpg">
<source media="(min-width: 32em)" srcset="med.jpg">
<img src="small.jpg" alt="The president giving an award.">
</picture>
Ich möchte wiederholen, wenn Sie nur die Auflösung umschalten müssen, verwenden Sie das <picture>
Element nicht , sondern nur das <img>
Element mit srcset
. Das einzige Mal, dass wir das <picture>
Element brauchen , ist für diese Kunstrichtung, dh Clipping usw.
Es besteht auch die Möglichkeit, Server-Seiten zu beschneiden, eine SVG-Maske zu verwenden oder einige Dinge mit Canvas zu tun, aber das liegt etwas außerhalb des Rahmens dieser Antwort.
Einige andere Notizen
Bestimmte Haltepunkte sind nicht so wichtig. Wie bei allen reaktionsschnellen Designs ist es wichtig, für alle Ansichtsfenster das Beste zu geben , aber es gibt keine Medienabfragen, die für alle Websites perfekt sind.
Die Ladezeit der Seite ist sehr wichtig , und Bilder können die anfängliche Ladezeit erheblich verlangsamen. Stellen Sie sicher, dass Sie Bilder laden, die sofort angezeigt werden, dann andere. Versuchen Sie zu verhindern, dass Bilder (wie JPEGs) einen Teil des Bildes anzeigen, während der Rest geladen wird. Optimieren Sie außerdem alle Ihre Bilder so, dass sie die kleinstmögliche Dateigröße haben und dennoch die von Ihnen gewünschte Qualität aufweisen.
Es ist wichtig, sich daran zu erinnern, dass Bilder in den meisten Fällen ein Zubehörteil und keine Notwendigkeit sein sollten. Ich empfehle immer zu testen, wie eine Webseite ohne Bilder aussieht, um sicherzustellen, dass sie verwendbar ist.
Hinweis : Wir können eine Polyfüllung namens Picturefill verwenden , um ältere Browser zu bedienen, die die Spezifikation für reaktionsfähige Bilder nicht unterstützen.