In jedem Tutorial zur display:none
reaktionsschnellen Website-Entwicklung wird empfohlen, die CSS-Eigenschaft zu verwenden, um das Laden von Inhalten in mobilen Browsern zu verhindern, damit die Website schneller geladen wird. Ist es wahr? Lädt display:none
die Bilder nicht oder lädt es immer noch den Inhalt im mobilen Browser? Gibt es eine Möglichkeit, das Laden unnötiger Inhalte in mobilen Browsern zu verhindern?
css
responsive-design
böse
quelle
quelle
Antworten:
Browser werden schlauer. Heute überspringt Ihr Browser (abhängig von der Version) möglicherweise das Laden von Bildern, wenn er feststellt, dass dies nicht sinnvoll ist.
Das Bild hat einen
display:none
Stil, aber seine Größe kann vom Skript gelesen werden. Chrome v68.0 lädt keine Bilder, wenn das übergeordnete Element ausgeblendet ist.Sie können es dort überprüfen: http://jsfiddle.net/tnk3j08s/
Sie können dies auch überprüfen, indem Sie auf die Registerkarte "Netzwerk" der Entwicklertools Ihres Browsers schauen.
Beachten Sie, dass, wenn sich der Browser auf einem kleinen CPU-Computer befindet, das Nicht-Rendern des Bildes (und Layout der Seite) den gesamten Rendervorgang beschleunigt, aber ich bezweifle, dass dies heute wirklich sinnvoll ist.
Wenn Sie verhindern möchten, dass das Bild geladen wird, können Sie das IMG-Element einfach nicht zu Ihrem Dokument hinzufügen (oder das IMG-
src
Attribut auf"data:"
oder setzen"about:blank"
).quelle
Wenn Sie das Bild in CSS zu einem Hintergrundbild eines Div machen und dieses Div auf "display: none" gesetzt ist, wird das Bild nicht geladen. Wenn CSS deaktiviert ist, wird es immer noch nicht geladen, da CSS deaktiviert ist.
quelle
<div hidden style="display:none;width:0;height:0;visibility:hidden;background:url('test.jpg')"></div>
. Ergebnisse: Firefox 29 & Opera 12 werden nicht geladen. IE 11 & Chrome 34 laden.background-image
,none
dass das Bild nicht geladen werden soll. Ich habe keine bessere Alternative für diesen Anwendungsfall gefunden, der kein JS verwendet.display: none;
. Netzwerktests mit Fenstern unterhalb dieser Breite: Chrome 35, IE11 und Edge haben die Bilder nicht geladenDie Antwort ist nicht so einfach wie ein einfaches Ja oder Nein. Schauen Sie sich die Ergebnisse eines Tests an, den ich kürzlich durchgeführt habe:
Nachdem ich weiter gegraben hatte, fand ich dies , was erklärt, wie jeder Browser das Laden von img-Assets basierend auf der CSS-Anzeige handhabt: keine;
Auszug aus dem Blogbeitrag:
quelle
Das HTML5-
<picture>
Tag hilft Ihnen dabei, die richtige Bildquelle abhängig von der Bildschirmbreite aufzulösenAnscheinend hat sich das Verhalten des Browsers in den letzten 5 Jahren nicht wesentlich geändert, und viele haben die versteckten Bilder immer noch heruntergeladen, selbst wenn eine
display: none
Eigenschaft für sie festgelegt wurde.Obwohl es eine Problemumgehung für Medienabfragen gibt , kann dies nur nützlich sein, wenn das Bild im CSS als Hintergrund festgelegt wurde.
Während ich dachte, dass es nur eine JS-Lösung für das Problem gibt ( verzögertes Laden , Ausfüllen von Bildern usw.), schien es eine nette reine HTML-Lösung zu geben, die mit HTML5 sofort einsatzbereit ist.
Und das ist der
<picture>
Tag.Hier ist , wie MDN es beschreibt:
Und so geht's:
Die Logik dahinter
Der Browser lädt die Quelle des
img
Tags nur, wenn keine der Medienregeln gilt. Wenn das<picture>
Element vom Browser nicht unterstützt wird, wird dasimg
Tag erneut angezeigt .Normalerweise würden Sie das kleinste Bild als Quelle für das verwenden
<img>
und daher die schweren Bilder für größere Bildschirme nicht laden. Umgekehrt wird, wenn eine Medienregel gilt, die Quelle des<img>
nicht heruntergeladen, sondern der Inhalt der URL des entsprechenden<source>
Tags.Die einzige Gefahr besteht darin, dass das Element nur das kleine Bild lädt, wenn es vom Browser nicht unterstützt wird. Auf der anderen Seite sollten wir 2017 im mobilen ersten Ansatz denken und codieren .
Und bevor jemand zu aufgeregt wurde, finden Sie hier die aktuelle Browserunterstützung für
<picture>
:Desktop-Browser
Mobile Browser
Weitere Informationen zur Browserunterstützung finden Sie unter Kann ich verwenden ?
Das Gute ist, dass der Satz von html5please darin besteht, ihn mit einem Fallback zu verwenden . Und ich persönlich beabsichtige, ihren Rat anzunehmen.
Weitere Informationen zum Tag finden Sie in der W3C-Spezifikation . Dort gibt es einen Haftungsausschluss, den ich wichtig zu erwähnen finde:
Es heißt also, dass Sie die Leistung beim Laden eines Bildes nur verbessern können, indem Sie einen Kontext dafür bereitstellen.
Und Sie können immer noch CSS-Magie verwenden, um das Bild auf kleinen Geräten auszublenden:
So wird der Browser nicht angezeigt , das aktuelle Bild und wird nur auf das Download -
1x1
Pixelbild (die im Cache gespeichert werden kann , wenn Sie es mehr als einmal).<picture>
Beachten Sie jedoch, dass das tatsächliche Bild auch auf Descktop-Bildschirmen nicht angezeigt wird, wenn das Tag vom Browser nicht unterstützt wird (daher benötigen Sie dort auf jeden Fall ein Polyfill-Backup).quelle
Ja, es wird etwas schneller gerendert, nur weil es das Bild nicht rendern muss und ein Element weniger zum Sortieren auf dem Bildschirm ist.
Wenn Sie nicht möchten, dass es geladen wird, lassen Sie ein DIV leer, in das Sie später HTML mit einem
<img>
Tag laden können .Wenn Sie Firebug oder Wireshark verwenden, wie ich bereits erwähnt habe, werden Sie feststellen, dass die Dateien auch dann übertragen werden, wenn sie
display:none
vorhanden sind.Opera ist der einzige Browser, der das Bild nicht lädt, wenn die Anzeige auf keine eingestellt ist.Opera ist jetzt zum Webkit übergegangen und rendert alle Bilder, auch wenn ihre Anzeige auf keine eingestellt ist.Hier ist eine Testseite, die dies beweisen wird:
http://www.quirksmode.org/css/displayimg.html
quelle
** 2019 Antwort **
In einer normalen Situation
display:none
wird das Herunterladen des Bildes nicht verhindertWenn jedoch ein Ahnenelement vorhanden ist, werden
display:none
die Bilder des Nachkommen nicht heruntergeladenAndere Situationen, die das Herunterladen des Bildes verhindern:
1- Das Zielelement existiert nicht
2- Zwei gleiche Klassen, die unterschiedliche Bilder laden
Sie können sich hier selbst davon überzeugen: https://codepen.io/juanmamenendez15/pen/dLQPmX
quelle
Mackenmodus: Bilder und Anzeige: keine
quelle
Das Hintergrundbild eines div-Elements wird geladen, wenn div auf 'display: none' gesetzt ist.
Wenn dasselbe div ein übergeordnetes Element hat und dieses übergeordnete Element auf 'display: none' eingestellt ist, wird das Hintergrundbild des untergeordneten Elements nicht geladen . :) :)
Beispiel mit Bootstrap:
quelle
verwenden
<img src="" srcset="">
http://www.webdesignerdepot.com/2015/08/the-state-of-responsive-images/
https://caniuse.com/#feat=srcset
quelle
Wenn Sie das Bild in CSS zu einem Hintergrundbild eines Div machen und dieses Div auf 'display: none' gesetzt ist, wird das Bild nicht geladen.
Ich möchte nur die Lösung von Brent erweitern.
Für eine reine CSS-Lösung können Sie Folgendes tun: Außerdem verhält sich die IMG-Box in einer reaktionsschnellen Designeinstellung tatsächlich wie eine IMG-Box (dafür ist das transparente PNG vorgesehen). Dies ist besonders nützlich, wenn Ihr Design reaktionsschnell dynamisch verwendet. Ändern der Größe von Bildern.
Das Bild wird nur geladen, wenn die an den sichtbaren lg-Block gebundene Medienabfrage ausgelöst wird und display: none in display: block geändert wird. Das transparente PNG wird verwendet, um es dem Browser zu ermöglichen, geeignete Verhältnisse von Höhe zu Breite für Ihren <img> -Block (und damit das Hintergrundbild) in einem fließenden Design (Höhe: Auto; Breite: 100%) festzulegen.
Am Ende haben Sie also Folgendes: 3 verschiedene Ansichtsfenster:
Beim ersten Laden werden nur Bilder in der Standardgröße Ihres Medienansichtsfensters geladen. Anschließend werden Bilder abhängig von Ihrem Ansichtsfenster dynamisch geladen.
Und kein Javascript!
quelle
Verwenden Sie das
<template>
Element Webkomponenten, um das Abrufen von Ressourcen zu verhindern .quelle
Hallo Leute, ich hatte mit dem gleichen Problem zu kämpfen, wie man ein Bild nicht auf ein Handy lädt.
Aber ich habe eine gute Lösung gefunden. Erstellen Sie zuerst ein img-Tag und laden Sie dann ein leeres svg in das src-Attribut. Jetzt können Sie Ihre URL zum Bild als Inline-Stil mit Inhalt festlegen: URL ('Link zu Ihrem Bild');. Wickeln Sie nun Ihr img-Tag in einen Wrapper Ihrer Wahl.
Stellen Sie den Wrapper so ein, dass an dem Haltepunkt, an dem Sie das Bild nicht laden möchten, keine angezeigt wird. Das Inline-CSS des img-Tags wird jetzt ignoriert, da der Stil eines Elements, das in einen Wrapper mit Anzeige keine eingeschlossen ist, ignoriert wird. Daher wird das Bild erst geladen, wenn Sie einen Haltepunkt erreichen, an dem der Wrapper einen Anzeigeblock hat.
Los geht's, ganz einfach, um kein IMG auf den mobilen Haltepunkt zu laden :)
In diesem Codepen finden Sie ein funktionierendes Beispiel: http://codepen.io/fennefoss/pen/jmXjvo
quelle
content
-Eigenschaft verwendet, um das gezeigte Bild zu ändern. Können Sie einige Statistiken zur Kompatibilität dazu geben?Nein. Das Bild wird wie gewohnt geladen und verwendet weiterhin die Bandbreite des Benutzers, wenn Sie die Bandbreite des Mobiltelefonbenutzers einsparen möchten. Sie können die Medienabfrage verwenden und die Geräte filtern, auf die Ihr Bild geladen werden soll Das Bild muss als Hintergrundbild eines Div usw. und NICHT als Tag festgelegt werden, da das Image-Tag das Bild unabhängig von der Bildschirmgröße und der festgelegten Medienabfrage lädt.
quelle
Eine andere Möglichkeit besteht darin, ein
<noscript>
Tag zu verwenden und das Bild innerhalb des<noscript>
Tags zu platzieren. Verwenden Sie dann Javascript, um das zu entfernennoscript
Tag wenn Sie das Bild benötigen. Auf diese Weise können Sie Bilder bei Bedarf mithilfe der progressiven Verbesserung laden.Verwenden Sie diese Polyfüllung, die ich geschrieben habe, um den Inhalt von zu lesen
<noscript>
Tags in IE8https://github.com/jameswestgate/noscript-textcontent
quelle
Verwenden Sie @ media-Abfrage-CSS. Im Grunde veröffentlichen wir nur ein Projekt, bei dem wir ein riesiges Bild eines Baums auf dem Desktop an der Seite hatten, das jedoch nicht in Tabellen- / Mobilbildschirmen angezeigt wurde. Verhindern Sie also, dass das Bild ganz einfach geladen wird
Hier ist ein kleiner Ausschnitt:
Sie können dasselbe CSS zum Anzeigen und Ausblenden mit Anzeige / Sichtbarkeit / Deckkraft verwenden, aber das Bild wurde noch geladen. Dies war der ausfallsicherste Code, den wir entwickelt haben.
quelle
Wir sprechen über Bilder, die nicht auf Mobilgeräten geladen werden, oder? Was ist, wenn Sie gerade ein @media (min-width: 400px) {background-image: thing.jpg} erstellt haben?
würde es dann nicht nur über einer bestimmten Bildschirmbreite nach dem Bild suchen?
quelle
Der Trick bei der Verwendung der Anzeige: Keine mit Bildern besteht darin, ihnen eine ID zuzuweisen. Dies war, dass nicht viel Code benötigt wird, damit es funktioniert. Hier ist ein Beispiel mit Medienabfragen und 3 Stylesheets. Eine für das Telefon, eine für das Tablet und eine für den Desktop. Ich habe 3 Bilder, ein Bild eines Telefons, eines Tablets und eines Desktops. Auf einem Telefonbildschirm wird nur ein Bild des Telefons angezeigt, ein Tablet zeigt nur das Tablet-Bild an, ein Desktop wird auf dem Desktop-Computerbild angezeigt. Hier ist ein Codebeispiel, damit es funktioniert:
Quellcode:
Das Telefon-CSS, für das keine Medienabfrage erforderlich ist. Es ist das img # Telefon, mit dem es funktioniert:
Das Tablet CSS:
Und das Desktop-CSS:
Viel Glück und lassen Sie mich wissen, wie es bei Ihnen funktioniert.
quelle
display: none
ein Bild einstellt . Es ist: Verhindert "Anzeige: keine" das Laden eines Bildes?