W każdym samouczku dotyczącym programowania witryn responsywnych zaleca się korzystanie z display:none
właściwości CSS w celu ukrycia treści przed ładowaniem w przeglądarkach mobilnych, aby strona ładowała się szybciej. Czy to prawda? Nie display:none
ładuje zdjęć lub nadal ładuje zawartość w przeglądarce mobilnej? Czy jest jakiś sposób, aby zapobiec ładowaniu niepotrzebnych treści w przeglądarkach mobilnych?
css
responsive-design
paskudny
źródło
źródło
Odpowiedzi:
Przeglądarki stają się inteligentniejsze. Dzisiaj Twoja przeglądarka (w zależności od wersji) może pominąć ładowanie obrazu, jeśli może stwierdzić, że nie jest to przydatne.
Obraz ma
display:none
styl, ale jego rozmiar może być odczytany przez skrypt. Chrome v68.0 nie ładuje obrazów, jeśli rodzic jest ukryty.Możesz to sprawdzić tutaj: http://jsfiddle.net/tnk3j08s/
Można to również sprawdzić, patrząc na kartę „sieć” narzędzi programistycznych przeglądarki.
Zauważ, że jeśli przeglądarka znajduje się na małym komputerze z procesorem, brak konieczności renderowania obrazu (i układu strony) przyspieszy całą operację renderowania, ale wątpię, czy jest to dzisiaj sensowne.
Jeśli chcesz zapobiec ładowaniu obrazu, możesz po prostu nie dodać elementu IMG do dokumentu (lub ustawić
src
atrybut IMG na"data:"
lub"about:blank"
).źródło
Jeśli uczynisz obraz jako tło obrazu div w CSS, gdy div ten jest ustawiony na „display: none”, obraz nie zostanie załadowany. Gdy CSS jest wyłączony, nadal się nie ładuje, ponieważ cóż, CSS jest wyłączony.
źródło
<div hidden style="display:none;width:0;height:0;visibility:hidden;background:url('test.jpg')"></div>
. Wyniki: Firefox 29 i Opera 12 nie ładują się. Obciążenie IE 11 i Chrome 34.background-image
donone
przypadków, w których nie chcesz, aby załadować obraz. Nie znalazłem lepszej alternatywy dla tego przypadku użycia, który nie korzysta z JS.display: none;
. Testy sieciowe z oknem poniżej tej szerokości: Chrome 35, IE11 i Edge nie załadowały obrazówOdpowiedź nie jest tak prosta jak zwykłe tak lub nie. Sprawdź wyniki testu, który niedawno przeprowadziłem:
Po dalszym kopaniu znalazłem to , co wyjaśnia, jak każda przeglądarka obsługuje ładowanie zasobów img na podstawie wyświetlania css: none;
Fragment postu na blogu:
źródło
<picture>
Tag HTML5 pomoże ci znaleźć właściwe źródło obrazu w zależności od szerokości ekranuNajwyraźniej zachowanie przeglądarek niewiele się zmieniło w ciągu ostatnich 5 lat i wielu nadal pobierałoby ukryte obrazy, nawet gdyby była
display: none
na nich ustawiona właściwość.Mimo że istnieje obejście zapytań o media , może to być przydatne tylko wtedy, gdy obraz został ustawiony jako tło w CSS.
Podczas gdy myślałem, że istnieje tylko rozwiązanie JS problemu ( leniwe ładowanie , wypełnianie obrazów itp.), Okazało się , że istnieje ładne, czyste rozwiązanie HTML, które wychodzi z pudełka z HTML5.
I to jest
<picture>
tag.Oto jak MDN to opisuje:
A oto jak go użyć:
Logika z tyłu
Przeglądarka załaduje źródło
img
tagu, tylko jeśli żadna z reguł multimediów nie ma zastosowania. Gdy<picture>
element nie jest obsługiwany przez przeglądarkę, ponownie przejdzie do wyświetlaniaimg
tagu.Zwykle umieszczasz najmniejszy obraz jako źródło,
<img>
a tym samym nie ładujesz ciężkich obrazów na większe ekrany. Odwrotnie, jeśli obowiązuje reguła medialna, źródło<img>
nie zostanie pobrane, zamiast tego pobierze zawartość adresu URL odpowiedniego<source>
tagu.Jedyną pułapką jest to, że jeśli element nie jest obsługiwany przez przeglądarkę, załaduje tylko mały obraz. Z drugiej strony w 2017 r. Powinniśmy pomyśleć i kodować w pierwszym podejściu mobilnym .
I zanim ktoś zostanie zbyt podekscytowany, oto bieżąca obsługa przeglądarki dla
<picture>
:Przeglądarki stacjonarne
Przeglądarki mobilne
Więcej informacji na temat obsługi przeglądarki można znaleźć w części Czy mogę używać .
Dobrą rzeczą jest to, że zdaniem html5please jest użycie go z rezerwą . I ja osobiście zamierzam skorzystać z ich rad.
Więcej informacji o znaczniku można znaleźć w specyfikacji W3C . Jest tam zastrzeżenie, które uważam za ważne:
Mówi więc, że pomaga tylko poprawić wydajność podczas ładowania obrazu, zapewniając mu pewien kontekst.
Nadal możesz użyć magii CSS, aby ukryć obraz na małych urządzeniach:
W ten sposób przeglądarka nie wyświetli rzeczywistego obrazu i pobierze tylko
1x1
obraz pikselowy (który można buforować, jeśli użyjesz go więcej niż jeden raz). Należy jednak pamiętać, że jeśli<picture>
znacznik nie jest obsługiwany przez przeglądarkę, nawet na ekranach pulpitu rzeczywisty obraz nie będzie wyświetlany (więc na pewno będziesz potrzebować kopii zapasowej wypełniania wielu pól).źródło
Tak, renderuje się szybciej, tylko dlatego, że nie musi renderować obrazu i jest o jeden element mniejszy do sortowania na ekranie.
Jeśli nie chcesz, aby był ładowany, pozostaw DIV pusty, w którym możesz później załadować HTML zawierający
<img>
tag.Spróbuj użyć firebuga lub wiresharka, jak wspomniałem wcześniej, a zobaczysz, że pliki zostaną przesłane, nawet jeśli
display:none
są obecne.Opera jest jedyną przeglądarką, która nie załaduje obrazu, jeśli ekran jest ustawiony na none.Opera została teraz przeniesiona do pakietu Webkit i będzie renderować wszystkie obrazy, nawet jeśli ich wyświetlanie jest ustawione na brak.Oto strona testowa, która to udowodni:
http://www.quirksmode.org/css/displayimg.html
źródło
** Odpowiedź 2019 **
W normalnej sytuacji
display:none
obraz nie uniemożliwia pobrania obrazuAle jeśli element przodka ma
display:none
, obrazy potomka nie zostaną pobraneInne sytuacje, które uniemożliwiają pobranie obrazu:
1- Element docelowy nie istnieje
2- Dwie równe klasy ładujące różne obrazy
Tutaj możesz uważać: https://codepen.io/juanmamenendez15/pen/dLQPmX
źródło
Dziwactwa Tryb: obrazy i wyświetlanie: brak
źródło
Obraz tła elementu div zostanie załadowany, jeśli element div jest ustawiony na „display: none”.
W każdym razie, jeśli ten sam div ma element nadrzędny i ten element nadrzędny jest ustawiony na „display: none”, obraz tła elementu podrzędnego nie zostanie załadowany . :)
Przykład użycia bootstrap:
źródło
posługiwać się
<img src="" srcset="">
http://www.webdesignerdepot.com/2015/08/the-state-of-responsive-images/
https://caniuse.com/#feat=srcset
źródło
Jeśli uczynisz obraz jako tło obrazu div w CSS, gdy div ten jest ustawiony na „display: none”, obraz nie zostanie załadowany.
Rozwijam tylko rozwiązanie Brenta.
Możesz wykonać następujące czynności dla czystego rozwiązania CSS, dzięki temu pole img faktycznie zachowuje się jak pole img w responsywnym ustawieniu projektowym (do tego właśnie służy przezroczysty png), co jest szczególnie przydatne, jeśli twój projekt używa responsive-dynamicznie- zmiana rozmiaru zdjęć.
Obraz zostanie załadowany tylko wtedy, gdy uruchomione zostanie zapytanie o media powiązane z widocznym-lg-blokiem i display: none nie zmieni się na display: block. Przezroczysty png służy do umożliwienia przeglądarce ustawienia odpowiednich proporcji wysokości: szerokości dla bloku <img> (a tym samym obrazu tła) w płynnym projekcie (wysokość: auto; szerokość: 100%).
W rezultacie otrzymujesz coś takiego, jak na 3 różne rzutnie:
Podczas ładowania początkowego ładowane są tylko obrazy domyślnego rozmiaru rzutni multimediów, a następnie, w zależności od rzutni, obrazy będą ładowane dynamicznie.
I bez javascript!
źródło
Aby zapobiec pobieraniu zasobów, użyj
<template>
elementu Web Components .źródło
Cześć chłopaki, walczyłem z tym samym problemem, jak nie ładować obrazu na telefon komórkowy.
Ale wymyśliłem dobre rozwiązanie. Najpierw utwórz tag img, a następnie załaduj pusty plik svg do atrybutu src. Teraz możesz ustawić adres URL obrazu jako styl wbudowany z zawartością: url („link do obrazu”) ;. Teraz zawiń swój tag img w wybrane opakowanie.
Ustaw opakowanie, aby nie wyświetlało żadnego w punkcie przerwania, w którym nie chcesz ładować obrazu. Wbudowane css znacznika img jest teraz ignorowane, ponieważ styl elementu owiniętego w opakowanie z wyświetlaczem none nie zostanie zignorowany, dlatego obraz nie jest ładowany, dopóki nie osiągniesz punktu przerwania, w którym opakowanie ma blok wyświetlania.
Proszę bardzo, naprawdę prosty sposób, aby nie ładować obrazu na mobilny punkt przerwania :)
Sprawdź ten codepen, na działający przykład: http://codepen.io/fennefoss/pen/jmXjvo
źródło
content
-property do zmiany wyświetlanego obrazu. Czy możesz podać kilka statystyk na temat kompatybilności?Nie. Obraz zostanie załadowany w zwykły sposób i nadal będzie korzystał z przepustowości użytkownika, jeśli rozważasz oszczędność przepustowości użytkownika telefonu komórkowego. Możesz użyć zapytania mediów i filtrować urządzenia, które chcesz załadować. obraz musi być ustawiony jako obraz tła div itp., a NIE jako znacznik, ponieważ znacznik obrazu załaduje obraz niezależnie od rozmiaru ekranu i zestawu zapytań o media.
źródło
Inną możliwością jest użycie
<noscript>
znacznika i umieszczenie obrazu wewnątrz<noscript>
znacznika. Następnie użyj javascript, aby usunąćnoscript
znacznik, ponieważ potrzebujesz obrazu. W ten sposób można ładować obrazy na żądanie przy użyciu progresywnego ulepszania.Użyj tego wypełnienia, które napisałem, aby przeczytać zawartość
<noscript>
tagów w IE8https://github.com/jameswestgate/noscript-textcontent
źródło
Użyj @media zapytanie CSS, po prostu wypuszczamy projekt, w którym mieliśmy ogromny obraz drzewa na pulpicie z boku, ale nie pokazano go na ekranach tabel / urządzeń mobilnych. Więc nie pozwól, aby obraz ładował się dość łatwo
Oto mały fragment:
Możesz użyć tego samego CSS, aby wyświetlać i ukrywać za pomocą display / visibility / krycia, ale obraz wciąż się ładuje, był to najbardziej bezpieczny kod, jaki wymyśliliśmy.
źródło
mówimy o obrazach, które nie ładują się na telefon, prawda? więc co jeśli zrobiłeś @media (min-width: 400px) {background-image: thing.jpg}
czy nie szukałby wtedy obrazu tylko powyżej określonej szerokości ekranu?
źródło
Sztuką korzystania z display: none z obrazami jest przypisanie im identyfikatora. Było tak, że nie trzeba dużo kodu, aby działał. Oto przykład z wykorzystaniem zapytań o media i 3 arkuszy stylów. Jeden na telefon, jeden na tablet i jeden na komputer. Mam 3 zdjęcia, zdjęcie telefonu, tabletu i pulpitu. Na ekranie telefonu wyświetli się tylko obraz telefonu, tablet wyświetli tylko obraz tabletu, a pulpit zostanie wyświetlony na obrazie komputera stacjonarnego. Oto przykład kodu, aby to działało:
Kod źródłowy:
Telefon CSS, który nie wymaga zapytania o media. To telefon img # sprawia, że działa:
Tablet css:
I css na pulpicie:
Powodzenia i daj mi znać, jak to działa dla Ciebie.
źródło
display: none
obraz. To: Czy „display: none” uniemożliwia załadowanie obrazu?