Ada beberapa hal yang perlu diingat saat menyajikan gambar kepada pemirsa.
- Pertahankan rasio gambar sama dengan dimensi aslinya
Kami melakukan ini untuk mencegah gambar menjadi miring dan untuk mencegah gambar menjadi buram. Kami dapat menjaga rasio dimensi tetap sama atau memotong bagian yang tidak cocok.
Ketika menggunakan <img>
unsur atau sesuatu yang mirip, ini cukup lurus ke depan, itu hanya membutuhkan menggunakan satu set width
atau height
OR set max-width
atau max-height
.
Namun dalam kasus gambar lebar viewport penuh ini sedikit lebih kompleks. Ada beberapa cara CSS untuk melakukannya , yang terbaik adalah background-size:cover
seperti contoh tertaut pertama dalam artikel dan acara jawaban Talkingrock .
Selain itu, kami sekarang memiliki kemampuan untuk menggunakan fitur yang terdapat dalam spesifikasi gambar responsif termasuk srcset
dan <picture>
elemen, yang sangat berguna. Saya membicarakan hal ini lebih lanjut dalam jawaban ini.
- Berikan pemirsa hanya gambar yang mereka butuhkan
Untuk memiliki pemuatan halaman yang lebih cepat dan mencegah pengguna perlu mentransfer lebih banyak data, sangat penting untuk melayani pengguna akhir hanya gambar yang mereka butuhkan, saat mereka membutuhkannya. Ini berarti kami menyajikan gambar dengan ukuran yang sama atau hanya sedikit lebih besar dari yang viewport mereka gunakan dan menunggu untuk memuat gambar yang tidak akan segera terlihat sampai setelah halaman awal dimuat.
Kami dapat menyajikan gambar berukuran lebih tepat menggunakan CSS dengan menggunakan @media
kueri saat kami menggunakan gambar latar belakang. Gambar yang tidak ada dalam kueri media yang digunakan tidak dimuat . Saya akan merekomendasikan menggunakan setidaknya tiga ukuran foto (yang berarti setidaknya 3 pertanyaan media), tetapi memiliki pasangan lebih banyak bisa menjadi kinerja yang bijaksana. Berikut ini adalah contoh, tetapi biasanya harus bertepatan dengan beberapa breakpoint umum untuk tata letak situs Anda.
@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); ...
}
Tapi, mari kita hadapi itu: kita tidak pandai memilih breakpoints juga tidak sempurna dalam memilih dimensi gambar yang diberikan ukuran layar tertentu. Bukankah lebih bagus jika kita bisa membiarkan sesuatu melakukan ini 'secara ajaib' bagi kita?
Berita baiknya adalah sekarang kita bisa !
Dengan spesifikasi gambar yang responsif, kami dapat membiarkan browser memutuskan semua ini untuk kami, asalkan kami sedikit membantu. Properti yang sangat berguna srcset
dapat digunakan dengan elemen <img>
atau <picture>
. Untuk peralihan resolusi seperti yang kami lakukan di sini, kita harus menggunakan <img>
elemen.
Berikut ini adalah contoh HTML yang diperlukan srcset
untuk melakukan tugasnya. Untuk lebih lanjut, Anda dapat membaca artikel hebat Yoav Weiss tentang masalah ini. Contohnya diambil dari itu.
<img src="cat_500px.jpg"
srcset="cat_750px.jpg 1.5x, cat_1000px.jpg 2x"
width="500" alt="lolcat">
Catatan: Jika Anda perlu menyajikan gambar yang sama dengan dimensi berbeda pada ukuran viewport tertentu, Anda dapat menggunakan sizes
atribut.
Saya tidak mengatakan bahwa menggunakan srcset
selalu lebih baik daripada menggunakan gambar latar belakang CSS, saya sendiri belum cukup banyak bekerja dengannya untuk mengatakannya dengan pasti, tetapi ini berpotensi cara yang lebih baik.
Selain itu, untuk membantu kinerja, kami dapat "malas memuat" gambar yang awalnya tidak akan terlihat. Ini berarti bahwa kami mencegah mereka memuat pada awalnya tetapi mulai memuatnya segera setelah halaman awal selesai memuat. Dengan begitu kita bisa membuat pengunjung untuk melihat halaman sesegera mungkin dan mengisi beberapa detail nanti. Inilah cara untuk melakukan itu, saya tidak akan membahas banyak detail sekarang.
- Pastikan konten dalam gambar yang ingin Anda tampilkan ditampilkan
Jika kita memiliki dimensi yang benar dan kinerja yang hebat itu luar biasa, tetapi jika pemirsa tidak melihat apa yang kita inginkan, tidak ada gunanya. Jika kita menunjukkan gambar sepenuhnya sepanjang waktu, ini bukan masalah, tetapi jika kita harus memotong gambar, ini bisa menjadi masalah.
Kita dapat memotong background-image
menggunakan CSS dengan menggunakan background-size
dan background-position
(dan semacam menggunakan clip
, tapi itu biasanya digunakan untuk bentuk yang lebih rumit dan kompleks). Rincian persisnya akan bervariasi dari gambar ke gambar tergantung pada bagaimana penerapannya.
Opsi kedua adalah menggunakan <picture>
elemen. Kami menggunakan ini ketika kami hanya ingin bagian dari gambar untuk ditampilkan, seperti yang terlihat di sini , tapi di sini adalah contoh sederhana dalam praktiknya (diambil dari artikel hebat Jason Grigsby tentang hal ini).
<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>
Saya ingin mengulangi, jika Anda hanya perlu melakukan resolusi switching tidak menggunakan <picture>
elemen , cukup gunakan <img>
elemen dengan srcset
. Satu-satunya waktu kita membutuhkan <picture>
elemen adalah untuk arah seni ini, yang berarti kliping, dll.
Ada juga kemungkinan melakukan pemotongan sisi server, menggunakan topeng SVG, atau melakukan beberapa hal dengan Canvas, tapi itu sedikit di luar cakupan jawaban ini.
Beberapa catatan lain
Breakpoint spesifik tidak begitu penting. Seperti halnya semua desain responsif, penting untuk melakukan yang terbaik yang kami bisa untuk semua viewports, tetapi tidak ada permintaan media yang akan sempurna untuk semua situs.
Waktu pemuatan halaman sangat penting , dan gambar dapat memperlambat waktu pemuatan awal dengan banyak. Pastikan Anda memuat gambar yang akan segera dilihat pertama, lalu yang lain. Cobalah untuk mencegah gambar (seperti JPEG) menampilkan bagian dari gambar saat memuat sisanya. Juga mengoptimalkan semua gambar Anda sehingga mereka adalah ukuran file sekecil mungkin sambil tetap memiliki jumlah kualitas yang Anda butuhkan.
Penting untuk diingat bahwa gambar, dalam banyak kasus, harus menjadi aksesori, bukan keharusan. Saya sarankan untuk selalu menguji bagaimana halaman web terlihat tanpa gambar untuk memastikan itu dapat digunakan.
Catatan : Kita dapat menggunakan polyfill yang disebut Picturefill untuk melayani browser lama yang tidak mendukung spesifikasi gambar responsif.