Setiap tutorial pengembangan situs web yang responsif merekomendasikan penggunaan display:none
properti CSS untuk menyembunyikan konten agar tidak dimuat di browser seluler sehingga situs web memuat lebih cepat. Apakah itu benar Tidak display:none
memuat gambar atau masih memuat konten di peramban seluler? Apakah ada cara untuk mencegah pemuatan konten yang tidak perlu di browser seluler?
css
responsive-design
menjijikan
sumber
sumber
Jawaban:
Browser semakin pintar. Hari ini browser Anda (tergantung pada versinya) mungkin melewatkan pemuatan gambar jika itu dapat menentukan itu tidak berguna.
Gambar memiliki
display:none
gaya tetapi ukurannya dapat dibaca oleh skrip. Chrome v68.0 tidak memuat gambar jika induknya disembunyikan.Anda dapat memeriksanya di sana: http://jsfiddle.net/tnk3j08s/
Anda juga bisa memeriksanya dengan melihat tab "jaringan" dari alat pengembang browser Anda.
Perhatikan bahwa jika browser menggunakan komputer CPU kecil, tidak harus membuat gambar (dan tata letak halaman) akan membuat seluruh operasi rendering lebih cepat tapi saya ragu ini adalah sesuatu yang benar-benar masuk akal hari ini.
Jika Anda ingin mencegah gambar dimuat, Anda mungkin tidak menambahkan elemen IMG ke dokumen Anda (atau mengatur
src
atribut IMG ke"data:"
atau"about:blank"
).sumber
Jika Anda menjadikan gambar sebagai latar-gambar dari div di CSS, ketika div itu diatur ke "display: none", gambar tidak akan memuat. Ketika CSS dinonaktifkan, itu masih tidak akan memuat, karena, well, CSS dinonaktifkan.
sumber
<div hidden style="display:none;width:0;height:0;visibility:hidden;background:url('test.jpg')"></div>
. Hasil: Firefox 29 & Opera 12 tidak dimuat. IE 11 & Chrome 34 dimuat.background-image
untuknone
untuk kasus-kasus di mana Anda tidak ingin gambar ke beban. Belum menemukan alternatif yang lebih baik untuk kasus penggunaan ini yang tidak menggunakan JS.display: none;
. Pengujian jaringan dengan jendela di bawah lebar itu: Chrome 35, IE11 dan Edge tidak memuat gambarJawabannya tidak semudah ya atau tidak. Lihat hasil tes yang baru-baru ini saya lakukan:
Jadi setelah menggali lebih jauh saya menemukan ini , yang menjelaskan bagaimana setiap browser menangani pemuatan aset img berdasarkan tampilan css: tidak ada;
Kutipan dari posting blog:
sumber
HTML5
<picture>
Tag akan membantu Anda untuk menyelesaikan sumber gambar yang tepat tergantung pada lebar layarTampaknya perilaku browser tidak banyak berubah selama 5 tahun terakhir dan banyak yang masih akan mengunduh gambar tersembunyi, bahkan jika ada
display: none
properti yang ditetapkan pada mereka.Meskipun ada solusi media query , itu hanya bisa berguna ketika gambar ditetapkan sebagai latar belakang di CSS.
Sementara saya berpikir bahwa hanya ada solusi JS untuk masalah ini ( lazy load , picturefill , dll.), Ternyata ada solusi HTML murni yang bagus yang keluar dari kotak dengan HTML5.
Dan itu adalah
<picture>
tag.Begini cara MDN menjelaskannya:
Dan inilah cara menggunakannya:
Logika di belakang
Browser akan memuat sumber
img
tag, hanya jika tidak ada aturan media yang berlaku. Ketika<picture>
elemen tidak didukung oleh browser, itu lagi akan mundur untuk menunjukkanimg
tag.Biasanya Anda akan menempatkan gambar terkecil sebagai sumber
<img>
dan karenanya tidak memuat gambar berat untuk layar yang lebih besar. Begitu juga sebaliknya, jika aturan media berlaku, sumbernya<img>
tidak akan diunduh, melainkan akan mengunduh konten url yang sesuai.<source>
tag yang .Satu-satunya kekurangan di sini adalah bahwa jika elemen tidak didukung oleh browser, itu hanya akan memuat gambar kecil. Di sisi lain pada 2017 kita harus berpikir dan kode di ponsel terlebih dahulu pendekatan .
Dan sebelum seseorang terlalu keluar, inilah dukungan browser saat ini untuk
<picture>
:Browser desktop
Browser seluler
Lebih lanjut tentang dukungan browser yang dapat Anda temukan di Dapatkah saya menggunakan .
Yang menyenangkan adalah kalimat html5please adalah menggunakannya dengan fallback . Dan saya pribadi berniat untuk mengambil saran mereka.
Lebih lanjut tentang tag Anda dapat menemukan dalam spesifikasi W3C . Ada penafian di sana, yang menurut saya penting untuk disebutkan:
Jadi yang dikatakannya adalah itu hanya membantu Anda meningkatkan kinerja saat memuat gambar, dengan memberikan konteks tertentu.
Dan Anda masih dapat menggunakan beberapa sihir CSS untuk menyembunyikan gambar di perangkat kecil:
Dengan demikian browser tidak akan menampilkan gambar aktual dan hanya akan mengunduh
1x1
gambar piksel (yang dapat di-cache jika Anda menggunakannya lebih dari sekali). Perlu diketahui, bahwa jika<picture>
tag tidak didukung oleh browser, bahkan pada layar descktop gambar yang sebenarnya tidak akan ditampilkan (jadi Anda pasti akan memerlukan cadangan polyfill di sana).sumber
Ya itu akan membuat lebih cepat, sedikit, hanya karena itu tidak harus membuat gambar dan elemen yang kurang untuk diurutkan di layar.
Jika Anda tidak ingin itu dimuat, biarkan DIV kosong di mana Anda dapat memuat html ke dalamnya nanti yang berisi
<img>
tag.Coba gunakan pembakar atau wireshark seperti yang saya sebutkan sebelumnya dan Anda akan melihat bahwa file DO ditransfer bahkan jika
display:none
ada.Opera adalah satu-satunya browser yang tidak akan memuat gambar jika tampilan tidak diatur.Opera sekarang telah pindah ke webkit dan akan membuat semua gambar bahkan jika tampilan mereka tidak diatur.Berikut ini adalah halaman pengujian yang akan membuktikannya:
http://www.quirksmode.org/css/displayimg.html
sumber
** 2019 Jawab **
Dalam situasi normal
display:none
tidak menghalangi gambar untuk diunduhTetapi jika elemen leluhur memiliki gambar
display:none
maka keturunan tidak akan diunduhSituasi lain yang mencegah gambar diunduh:
1- Elemen target tidak ada
2- Dua kelas yang sama memuat gambar yang berbeda
Anda dapat menyaksikan sendiri di sini: https://codepen.io/juanmamenendez15/pen/dLQPmX
sumber
Mode quirks: gambar dan tampilan: tidak ada
sumber
Gambar latar belakang elemen div akan dimuat jika div diatur ke 'display: none'.
Bagaimanapun, jika div yang sama memiliki orangtua dan orangtua itu diatur ke 'display: none', gambar latar belakang elemen anak tidak akan memuat . :)
Contoh menggunakan bootstrap:
sumber
menggunakan
<img src="" srcset="">
http://www.webdesignerdepot.com/2015/08/the-state-of-responsive-images/
https://caniuse.com/#feat=srcset
sumber
Jika Anda menjadikan gambar sebagai latar-gambar dari div di CSS, ketika div itu diatur ke 'display: none', gambar tidak akan memuat.
Hanya memperluas solusi Brent.
Anda dapat melakukan hal berikut untuk solusi CSS murni, itu juga membuat kotak img benar-benar berperilaku seperti kotak img dalam pengaturan desain responsif (itulah gunanya png transparan), yang sangat berguna jika desain Anda menggunakan responsif-dinamis - mengubah ukuran gambar.
Gambar hanya akan dimuat ketika kueri media yang dikaitkan dengan blok-lg dipicu dan ditampilkan: tidak ada yang berubah untuk menampilkan: blok. Png transparan digunakan untuk memungkinkan browser mengatur tinggi yang sesuai: rasio lebar untuk blok <img> Anda (dan dengan demikian gambar latar belakang) dalam desain yang cair (tinggi: otomatis; lebar: 100%).
Jadi Anda berakhir dengan sesuatu seperti berikut, untuk 3 viewports berbeda:
Dan hanya gambar ukuran viewport media default Anda yang dimuat selama pemuatan awal, kemudian setelah itu, tergantung pada viewport Anda, gambar akan dimuat secara dinamis.
Dan tidak ada javascript!
sumber
Untuk mencegah pengambilan sumber daya, gunakan
<template>
elemen Komponen Web .sumber
Hai teman-teman saya berjuang dengan masalah yang sama, bagaimana tidak memuat gambar di ponsel.
Tapi saya menemukan solusi yang bagus. Pertama-tama buatlah tag img dan kemudian muatkan svg kosong pada atribut src. Sekarang Anda dapat mengatur URL Anda ke gambar sebagai gaya inline dengan konten: url ('tautan ke gambar Anda') ;. Sekarang bungkus tag img Anda dalam bungkus pilihan Anda.
Atur pembungkus untuk menampilkan tidak ada pada breakpoint di mana Anda tidak ingin memuat gambar. Css inline dari tag img sekarang diabaikan karena gaya elemen yang dibungkus pembungkus dengan tampilan tidak akan diabaikan, oleh karena itu gambar tidak dimuat, sampai Anda mencapai breakpoint di mana pembungkus memiliki blok tampilan.
Ini dia, cara yang sangat mudah untuk tidak memuat img di breakpoint seluler :)
Lihat codepen ini, untuk contoh yang berfungsi: http://codepen.io/fennefoss/pen/jmXjvo
sumber
content
-properti untuk mengubah gambar yang ditampilkan, yaitu. Bisakah Anda memberikan beberapa statistik kompatibilitas ini?Tidak. Gambar akan dimuat seperti biasa dan masih akan menggunakan bandwidth pengguna jika Anda mempertimbangkan penghematan bandwidth pengguna ponsel. Yang dapat Anda lakukan adalah menggunakan kueri media dan memfilter perangkat yang Anda inginkan untuk memuat gambar Anda. gambar harus ditetapkan sebagai gambar latar belakang div, dll dan BUKAN tag karena tag gambar akan memuat gambar terlepas dari apakah ukuran layar dan kueri media diatur.
sumber
Kemungkinan lain adalah menggunakan
<noscript>
tag dan menempatkan gambar di dalam<noscript>
tag. Kemudian gunakan javascript untuk menghapusnoscript
tag saat Anda membutuhkan gambar. Dengan cara ini Anda dapat memuat gambar sesuai permintaan menggunakan peningkatan progresif.Gunakan polyfill ini yang saya tulis untuk membaca isi
<noscript>
tag di IE8https://github.com/jameswestgate/noscript-textcontent
sumber
Gunakan @media query CSS, pada dasarnya kami hanya merilis sebuah proyek di mana kami memiliki gambar pohon yang sangat besar di desktop di samping tetapi tidak ditampilkan di layar tabel / seluler. Jadi mencegah gambar dari memuatnya cukup mudah
Berikut ini cuplikan kecil:
Anda dapat menggunakan CSS yang sama untuk ditampilkan dan disembunyikan dengan tampilan / visibilitas / opacity tetapi gambar masih dimuat, ini adalah kode aman yang paling gagal kami buat.
sumber
kita berbicara tentang gambar yang tidak dimuat di ponsel, kan? jadi bagaimana jika Anda baru saja melakukan @ media (lebar minimum: 400px) {background-image: thing.jpg}
bukankah itu hanya mencari gambar di atas lebar layar tertentu?
sumber
Trik untuk menggunakan tampilan: tidak ada dengan gambar adalah untuk menetapkannya id. Ini tidak ada banyak kode yang diperlukan untuk membuatnya berfungsi. Berikut adalah contoh menggunakan kueri media dan 3 lembar gaya. Satu untuk ponsel, satu untuk tablet, dan satu untuk desktop. Saya memiliki 3 gambar, gambar ponsel, tablet, dan desktop. Pada layar ponsel hanya gambar telepon yang akan ditampilkan, tablet hanya akan menampilkan gambar tablet, desktop menampilkan gambar komputer desktop. Berikut adalah contoh kode untuk membuatnya berfungsi:
Kode sumber:
CSS telepon yang tidak memerlukan kueri media. Ini ponsel # img yang membuatnya bekerja:
Tablet css:
Dan css desktop:
Semoga beruntung dan beri tahu saya cara kerjanya untuk Anda.
sumber
display: none
pada gambar. Itu: Apakah "display: none" mencegah gambar dimuat?