Apakah ada solusi khusus css untuk menskalakan gambar ke dalam kotak pembatas (menjaga rasio aspek)? Ini berfungsi jika gambar lebih besar dari penampung:
img {
max-width: 100%;
max-height: 100%;
}
Contoh:
- Use case 1 (bekerja): http://jsfiddle.net/Jp5AQ/2/
- Use case 2 (bekerja): http://jsfiddle.net/Jp5AQ/3/
Tapi saya ingin memperbesar gambar sampai dimensinya 100% dari container.
- Use case 3 (tidak berfungsi): http://jsfiddle.net/Jp5AQ/4/
Jawaban:
Catatan: Meskipun ini adalah jawaban yang diterima, jawaban di bawah ini lebih akurat dan saat ini didukung di semua browser jika Anda memiliki opsi untuk menggunakan gambar latar belakang.
Tidak, tidak ada satu-satunya cara CSS untuk melakukan ini di kedua arah. Anda bisa menambahkan
Untuk elemen agar selalu memiliki lebar 100% dan secara otomatis menskalakan tinggi ke rasio aspek, atau kebalikannya:
untuk selalu menskalakan ke tinggi maksimum dan lebar relatif. Untuk melakukan keduanya, Anda perlu menentukan apakah rasio aspek lebih tinggi atau lebih rendah dari penampungnya, dan CSS tidak dapat melakukan ini.
Alasannya adalah CSS tidak tahu seperti apa halaman tersebut. Ini menetapkan aturan sebelumnya, tetapi hanya setelah itu elemen-elemen itu dirender dan Anda tahu persis ukuran dan rasio apa yang Anda hadapi. Satu-satunya cara untuk mendeteksinya adalah dengan JavaScript.
Meskipun Anda tidak mencari solusi JS, saya akan tetap menambahkannya jika seseorang mungkin membutuhkannya. Cara termudah untuk menangani ini dengan JavaScript adalah menambahkan kelas berdasarkan perbedaan rasio. Jika rasio lebar-tinggi kotak lebih besar dari gambar, tambahkan kelas "fillwidth", jika tidak tambahkan kelas "fillheight".
Tampilkan cuplikan kode
sumber
Berkat CSS3, ada solusinya!
Solusinya adalah dengan menempatkan gambar sebagai
background-image
dan kemudian mengaturbackground-size
kecontain
.HTML
CSS
Uji di sini: http://www.w3schools.com/cssref/playit.asp?filename=playcss_background-size&preval=contain
Kompatibilitas penuh dengan browser terbaru: http://caniuse.com/background-img-opts
Untuk menyelaraskan div di tengah, Anda dapat menggunakan variasi ini:
sumber
<div class=image style="background-image: url('/images/foo.jpg');"></div>
. Semua gaya lainnya harus diterapkan dengan CSS.Inilah solusi hackish yang saya temukan:
Ini akan memperbesar gambar sepuluh kali lipat, tetapi membatasinya hingga 10% dari ukuran akhirnya - sehingga membatasinya ke container.
Berbeda dengan
background-image
solusinya, ini juga akan bekerja dengan<video>
elemen.Contoh interaktif:
Tampilkan cuplikan kode
sumber
transform-origin: top left
untuk menghentikan pemotongan. / ZombieHari ini, katakan saja object-fit: contain. Dukungan adalah segalanya kecuali IE: http://caniuse.com/#feat=object-fit
sumber
object-fit
masih dalam pengembangan untuk itu.object-fit
: stackoverflow.com/a/46456673/474031html:
css:
sumber
Anda dapat melakukannya dengan CSS murni dan dukungan browser lengkap, baik untuk gambar dengan panjang vertikal maupun horizontal secara bersamaan.
Berikut cuplikan yang berfungsi di Chrome, Firefox, dan Safari (keduanya menggunakan
object-fit: scale-down
, dan tanpa menggunakannya):sumber
Solusi lain tanpa gambar latar belakang dan tanpa memerlukan wadah (meskipun ukuran maksimal kotak pembatas harus diketahui):
Jika penggunaan wadah diperlukan, maka lebar-maksimal dan tinggi-maksimal dapat diatur ke 100%:
Untuk ini, Anda akan memiliki sesuatu seperti:
sumber
Contoh ini untuk meregangkan gambar secara proporsional agar sesuai dengan seluruh jendela. Sebuah improvisasi ke kode yang benar di atas adalah menambahkan
$( window ).resize(function(){});
Ada dua kondisi if. Yang pertama terus memeriksa apakah tinggi gambar kurang dari div dan menerapkan
.fillheight
kelas sementara yang berikutnya memeriksa lebar dan menerapkan.fillwidth
kelas. Dalam kedua kasus, kelas lain dihapus menggunakan.removeClass()
Ini CSS nya
Anda dapat mengganti
100vh
dengan100%
jika Anda ingin meregangkan gambar dengan dalam sebuah div. Contoh ini untuk meregangkan gambar secara proporsional agar sesuai dengan seluruh jendela.sumber
Apakah Anda ingin meningkatkan skala tetapi tidak ke bawah?
Namun, ini tidak mengunci rasio aspek.
sumber
Saya telah menggunakan tabel untuk memusatkan gambar di dalam kotak. Itu menjaga rasio aspek dan menskalakan gambar dengan cara yang benar-benar ada di dalam kotak. Jika gambar lebih kecil dari kotak, maka gambar akan ditampilkan seperti di tengah. Kode di bawah ini menggunakan kotak lebar 40px dan tinggi 40px. (Tidak begitu yakin seberapa baik kerjanya karena saya menghapusnya dari kode lain yang lebih kompleks dan menyederhanakannya sedikit)
CSS:
HTML:
sumber
Cara terbersih dan termudah untuk melakukan ini:
Pertama beberapa CSS:
HTML:
Ini seharusnya berhasil!
sumber
Ini membantu saya:
Kemudian pada elemen (Anda dapat menggunakan javascript atau kueri media untuk menambahkan daya tanggap):
Semoga ini membantu!
sumber
Saya mengedit jawaban saya untuk menjelaskan lebih lanjut soluton saya karena saya mendapat suara negatif.
Dengan gaya yang diatur seperti yang ditunjukkan di atas dalam css, sekarang div html berikut akan menunjukkan gambar selalu pas dengan lebar dan akan menyesuaikan rasio tinggi lebar ke lebar. Dengan demikian gambar akan diskalakan agar sesuai dengan kotak pembatas seperti yang ditanyakan dalam pertanyaan.
sumber