Saya menemukan utas ini - Bagaimana Anda meregangkan gambar untuk mengisi <div> sambil mempertahankan rasio aspek gambar? - Itu tidak sepenuhnya yang saya inginkan.
Saya memiliki div dengan ukuran tertentu dan gambar di dalamnya. Saya ingin selalu mengisi div dengan gambar terlepas dari apakah gambar tersebut lanskap atau potret. Dan tidak masalah jika gambarnya terpotong (div itu sendiri memiliki overflow tersembunyi).
Jadi jika gambar potret saya ingin width
menjadi 100%
dan height:auto
sehingga tetap proporsional. Jika gambarnya lanskap saya ingin height
menjadi 100%
dan width to be
otomatis. Kedengarannya rumit bukan?
<div class="container">
<img src="some-image.jpg" alt="Could be portrait or landscape"/>
</div>
Karena saya tidak tahu bagaimana melakukannya, saya hanya membuat gambaran singkat tentang apa yang saya maksud. Saya bahkan tidak bisa menggambarkannya dengan tepat.
Jadi, saya rasa saya bukan yang pertama menanyakan hal ini. Namun saya tidak dapat menemukan solusi untuk ini. Mungkin ada beberapa cara CSS3 baru untuk melakukan ini - saya memikirkan flex-box. Ada ide? Mungkin lebih mudah dari yang saya harapkan?
sumber
Jawaban:
Jika saya benar-benar memahami apa yang Anda inginkan, Anda dapat membiarkan atribut lebar dan tinggi di luar gambar untuk mempertahankan rasio aspek dan menggunakan flexbox untuk melakukan pemusatan untuk Anda.
JSFiddle di sini
Saya berhasil menguji ini di IE9, Chrome 31, dan Opera 18. Tetapi tidak ada browser lain yang diuji. Seperti biasa, Anda harus mempertimbangkan kebutuhan dukungan khusus Anda.
sumber
.fill img { min-height:100%; min-width: 100%; object-fit: cover; }
Ini agak terlambat tetapi saya hanya memiliki masalah yang sama dan akhirnya menyelesaikannya dengan bantuan pos stackoverflow lain ( https://stackoverflow.com/a/29103071 ).
Semoga ini masih membantu seseorang.
Ps: Juga bekerja bersama dengan properti css max-height , max-width , min-width dan min-height . Ini sangat berguna dengan menggunakan unit panjang seperti 100% atau 100vh / 100vw untuk mengisi wadah atau seluruh jendela browser.
sumber
object-position
aturan ke kelas ini akan membantu di sini. Hanya catatan tambahan.Pertanyaan lama tetapi perlu pembaruan karena sekarang ada cara.
Jawaban berbasis CSS yang benar adalah dengan menggunakan
object-fit: cover
, yang berfungsi sepertibackground-size: cover
. Pemosisian akan ditangani olehobject-position
atribut, yang defaultnya adalah pemusatan.Tetapi tidak ada dukungan untuk itu di browser IE / Edge, atau Android <4.4.4. Selain itu,
object-position
tidak didukung oleh Safari, iOS atau OSX. Polyfills memang ada, object-fit-images tampaknya memberikan dukungan terbaik.Untuk detail lebih lanjut tentang cara kerja properti, lihat artikel Trik CSS tentang
object-fit
penjelasan dan demo.sumber
Ini harus melakukannya:
sumber
Semua jawaban di bawah memiliki lebar dan tinggi tetap, yang membuat solusi "tidak responsif".
Untuk mencapai hasil tetapi gambar tetap responsif saya menggunakan berikut ini:
HTML:
sumber
Anda dapat melakukannya dengan menggunakan properti css flex. Silakan lihat kode di bawah ini
sumber
Pertimbangkan untuk menggunakan
background-size: cover
(IE9 +) bersama denganbackground-image
. Untuk IE8-, ada polyfill .sumber
background-size
masuk akal hanya denganbackground-image
ditentukan juga (saya telah memperbarui jawaban saya sesuai). Ini tidak berlaku untukIMG
elemen.Coba ini:
Semoga ini membantu
sumber
Anda dapat menggunakan div untuk mencapai ini. tanpa tag img :) harap ini membantu.
sumber
Satu-satunya cara saya mencapai skenario "kasus terbaik" yang dijelaskan, adalah dengan menempatkan gambar sebagai latar belakang:
sumber
Berikut adalah jawaban dengan dukungan untuk menggunakan IE
object-fit
sehingga Anda tidak akan kehilangan rasioMenggunakan cuplikan JS sederhana untuk mendeteksi apakah
object-fit
itu didukung dan kemudian menggantiimg
untuk asvg
Catatan: Ada juga beberapa
object-fit
polyfill di luar sana yang akanobject-fit
berfungsi.Berikut beberapa contohnya:
sumber
Di sini Anda memiliki contoh kerja saya. Saya telah menggunakan trik yaitu mengatur gambar sebagai latar belakang wadah div dengan background-size: cover dan background-position: center center
Saya telah menempatkan gambar dengan lebar: 100% dan opacity: 0 membuatnya tidak terlihat. Perhatikan bahwa saya menampilkan gambar saya hanya karena saya memiliki minat khusus untuk memanggil acara klik anak.
Harap dicatat bahwa meskipun saya menggunakan sudut, itu sama sekali tidak relevan.
Hasilnya adalah salah satu yang Anda definisikan sebagai optimal di semua kasus
sumber
Nilai CSS
object-fit: cover
danobject-position: left center
properti sekarang mengatasi masalah ini.sumber
sumber
Cukup perbaiki tinggi gambar & berikan lebar = otomatis
sumber