Saya bekerja dengan gambar, dan saya menemukan masalah dengan rasio aspek.
<img src="big_image.jpg" width="900" height="600" alt="" />
Seperti yang Anda lihat, height
dan width
sudah ditentukan. Saya menambahkan aturan CSS untuk gambar:
img {
max-width:500px;
}
Tetapi untuk big_image.jpg
, saya menerima width=500
dan height=600
. Bagaimana saya bisa mengatur ukuran gambar menjadi kembali, sambil menjaga rasio aspek mereka.
css
image
aspect-ratio
moonvader
sumber
sumber
<img>
itu sendiri yang mencakup lebar dan tinggi dan saya pikir itu berarti Anda perlu menggunakan!important
untuk menghindari info lebar / tinggi tag.!important
tidak dibutuhkan.Saya telah bergumul dengan masalah ini cukup sulit, dan akhirnya sampai pada solusi sederhana ini:
Anda dapat menyesuaikan lebar dan tinggi agar sesuai dengan kebutuhan Anda, dan properti objek-fit akan melakukan cropping untuk Anda.
Bersulang.
sumber
object-fit
is fantastic, great tip! Ada beberapa perpustakaan polyfill baik jika ada yang bertanya-tanya tentang kompatibilitas IE.object-fit: contain
dan menentukan lebar atau tinggi!Solusi di bawah ini akan memungkinkan penaikan dan penskalaan gambar , tergantung pada lebar kotak induk.
Semua gambar memiliki wadah induk dengan lebar tetap untuk tujuan demonstrasi saja . Dalam produksi, ini akan menjadi lebar kotak induk.
Praktik Terbaik (2018):
Solusi ini memberi tahu peramban untuk membuat gambar dengan lebar maksimum yang tersedia dan menyesuaikan tinggi sebagai persentase dari lebar itu.
Solusi yang lebih menarik:
Dengan solusi yang lebih bagus, Anda dapat memotong gambar terlepas dari ukurannya dan menambahkan warna latar belakang untuk mengimbangi pemangkasan.
Untuk garis yang menentukan padding, Anda perlu menghitung rasio aspek gambar, misalnya:
Jadi, top padding = 34,37%.
sumber
!important
diperlukan di sini.Properti ukuran latar belakang yaitu> = 9 saja, tetapi jika itu tidak masalah bagi Anda, Anda dapat menggunakan div dengan
background-image
dan mengaturbackground-size: contain
:Sekarang Anda hanya dapat mengatur ukuran div Anda ke apa pun yang Anda inginkan dan tidak hanya akan menjaga rasio aspek gambarnya, tetapi juga akan terpusat baik secara vertikal dan horizontal dalam div. Hanya saja, jangan lupa untuk mengatur ukuran pada css karena divs tidak memiliki atribut width / height pada tag itu sendiri.
Pendekatan ini berbeda dari jawaban setecs, menggunakan ini area gambar akan konstan dan ditentukan oleh Anda (meninggalkan ruang kosong baik secara horizontal atau vertikal tergantung pada ukuran div dan rasio aspek gambar), sedangkan jawaban setecs akan memberi Anda sebuah kotak yang persis seperti ukuran gambar yang diskalakan (tanpa spasi kosong).
Sunting: Menurut dokumentasi ukuran latar belakang MDN Anda dapat mensimulasikan properti ukuran latar belakang di IE8 menggunakan deklarasi filter berpemilik:
sumber
Sangat mirip dengan beberapa jawaban di sini, tetapi dalam kasus saya, saya memiliki gambar yang kadang lebih tinggi, kadang lebih besar.
Gaya ini bekerja seperti pesona untuk memastikan bahwa semua gambar menggunakan semua ruang yang tersedia, menjaga rasio dan tidak memotong:
sumber
object-fit
berfungsi untuk saya apakah itu berfungsi di semua browser?.img
kelas pada orang tua atau gambar? Bisakah Anda membuat jsfiddle dengan contoh untuk gambar potret dan lanskap?Hapus properti "height".
Dengan menentukan keduanya Anda mengubah rasio aspek gambar. Pengaturan saja akan mengubah ukuran tetapi mempertahankan rasio aspek.
Secara opsional, untuk membatasi oversizings:
sumber
height
atribut diimg
tag adalah bahwa browser tidak dapat menghitung berapa banyak ruang yang akan diambil gambar sebelum mengunduh gambar. Ini membuat halaman lebih lambat untuk di-render dan itu bisa menyebabkan lebih banyak "melompat".Cukup tambahkan ini ke css Anda, Ini akan secara otomatis menyusut dan berkembang dengan menjaga rasio asli.
sumber
100%
bukannya nilai piksel tertentu.display: block;
tidak perlu.Tidak ada cara standar untuk mempertahankan rasio aspek untuk gambar dengan
width
,height
danmax-width
ditentukan bersama.Jadi kami terpaksa menentukan
width
danheight
mencegah "lompatan" halaman saat memuat gambar, atau menggunakanmax-width
dan tidak menentukan dimensi untuk gambar.Menentukan hanya
width
(tanpaheight
) biasanya tidak masuk akal, tetapi Anda dapat mencoba untuk menimpaheight
atribut HTML dengan menambahkan aturan sepertiIMG {height: auto; }
pada stylesheet Anda.Lihat juga bug Firefox 392261 yang terkait .
sumber
!important
dalam CSS. Ini adalah retasan yang pada akhirnya akan kembali menghantui Anda.!important
sini.Ini solusinya:
Ini akan memastikan gambar selalu mencakup seluruh induk (penskalaan ke atas dan ke atas) dan menjaga rasio aspek yang sama.
sumber
Setel kelas CSS tag wadah gambar Anda ke
image-class
:dan tambahkan ini Anda stylesheet CSS Anda.
sumber
Untuk mempertahankan gambar responsif sambil tetap memaksakan gambar untuk memiliki rasio aspek tertentu Anda dapat melakukan hal berikut:
HTML:
Dan SCSS:
Ini dapat digunakan untuk menegakkan rasio aspek tertentu, terlepas dari ukuran gambar yang diunggah penulis.
Terima kasih kepada @Kseso di http://codepen.io/Kseso/pen/bfdhg . Periksa URL ini untuk mengetahui lebih banyak rasio dan contoh yang berfungsi.
sumber
border-radius
. Tapi sayangnya, itu memotong gambar dan tidak melakukannya dengan baik dengan membuat perbatasan untuk gambar di div sejauh yang saya coba.Untuk memaksa gambar yang pas dengan ukuran yang tepat, Anda tidak perlu menulis terlalu banyak kode. Ini sangat mudah
sumber
https://jsfiddle.net/sot2qgj6/3/
Berikut adalah jawabannya jika Anda ingin menempatkan gambar dengan persentase lebar tetap , tetapi piksel tidak tetap lebar .
Dan ini akan berguna ketika berhadapan dengan ukuran layar yang berbeda .
Triknya adalah
padding-top
untuk mengatur ketinggian dari lebar.position: absolute
untuk menempatkan gambar di ruang padding.max-height and max-width
untuk memastikan gambar tidak melebihi elemen induk.display:block and margin: auto
untuk memusatkan gambar.Saya juga berkomentar sebagian besar trik di dalam biola.
Saya juga menemukan beberapa cara lain untuk mewujudkan hal ini. Tidak akan ada gambar nyata di html, jadi saya pribadi memberikan jawaban atas ketika saya membutuhkan elemen "img" di html.
css sederhana dengan menggunakan latar belakang http://jsfiddle.net/4660s79h/2/
background-image dengan kata di atas http://jsfiddle.net/4660s79h/1/
konsep untuk menggunakan posisi absolut adalah dari sini http://www.w3schools.com/howto/howto_css_aspect_ratio.asp
sumber
Anda bisa menggunakan ini:
sumber
Anda dapat membuat div seperti ini:
Dan gunakan css ini untuk mengubahnya:
sumber
Saya akan menyarankan untuk pendekatan responsif praktik terbaik akan menggunakan unit Viewport dan atribut min / max sebagai berikut:
sumber
Ini akan membuat gambar menyusut jika terlalu besar untuk area yang ditentukan (karena downside, itu tidak akan memperbesar gambar).
Solusi oleh setec baik untuk "Shrink to Fit" dalam mode otomatis. Tetapi, untuk secara optimal BUKA agar sesuai dengan mode 'otomatis', Anda harus terlebih dahulu memasukkan gambar yang diterima ke dalam temp temp, Periksa apakah dapat diperluas tinggi atau lebar (tergantung pada rasio aspeknya v / s rasio aspek dari blok tampilan Anda),
Pendekatan ini berguna ketika gambar yang diterima lebih kecil dari kotak tampilan. Anda harus menyimpannya di server Anda dalam ukuran Asli Kecil daripada versi yang diperluas untuk mengisi Kotak tampilan Anda yang lebih besar untuk menghemat ukuran dan bandwidth.
sumber
sumber
Bagaimana kalau menggunakan elemen pseudo untuk penyelarasan vertikal? Kode yang lebih sedikit ini untuk korsel, tetapi saya kira itu berfungsi pada setiap kontainer ukuran tetap. Ini akan menjaga aspek rasio dan memasukkan bar abu-abu-gelap di atas / bawah atau kiri / tulis untuk dimensi terpendek. Sementara itu gambar dipusatkan secara horizontal oleh teks-align dan secara vertikal oleh elemen pseudo.
sumber
Presentasi layar penuh:
Ingatlah bahwa jika tinggi view-port lebih besar dari gambar, gambar akan secara alami menurun relatif terhadap perbedaan.
sumber
Saya pikir, pada akhirnya ini adalah solusi terbaik, mudah dan sederhana :
sumber