Ini tampak sepele tetapi setelah semua penelitian dan pengkodean saya tidak bisa membuatnya berfungsi. Ketentuannya adalah:
- Ukuran jendela browser tidak diketahui. Jadi tolong jangan usulkan solusi yang melibatkan ukuran piksel absolut.
- Dimensi asli gambar tidak diketahui, dan mungkin sudah sesuai atau belum sesuai dengan jendela browser.
- Gambar dipusatkan secara vertikal dan horizontal.
- Proporsi gambar harus dipertahankan.
- Gambar harus ditampilkan secara keseluruhan di jendela (tanpa pemotongan).
- Saya tidak ingin scrollbar muncul (dan seharusnya tidak muncul jika gambarnya cocok.)
- Gambar secara otomatis mengubah ukuran ketika dimensi jendela berubah, untuk menempati semua ruang yang tersedia tanpa lebih besar dari ukuran aslinya.
Pada dasarnya yang saya inginkan adalah ini:
.fit {
max-width: 99%;
max-height: 99%;
}
<img class="fit" src="pic.png">
Masalah dengan kode di atas adalah bahwa itu tidak berfungsi: gambar mengambil semua ruang vertikal yang dibutuhkan dengan menambahkan bilah gulir vertikal.
Yang saya miliki adalah PHP, Javascript, JQuery tetapi saya akan membunuh untuk solusi khusus CSS. Saya tidak peduli jika itu tidak berfungsi di IE.
Jawaban:
Perbarui 2018-04-11
Berikut adalah solusi khusus CSS tanpa Javascript . Gambar akan secara dinamis dipusatkan dan diubah ukurannya agar sesuai dengan jendela.
Solusi [lainnya, lama], menggunakan JQuery, menyetel tinggi penampung gambar (
body
dalam contoh di bawah) sehinggamax-height
properti pada gambar berfungsi seperti yang diharapkan. Gambar juga akan secara otomatis diubah ukurannya ketika jendela klien diubah ukurannya.Catatan: Pengguna gutierrezalex mengemas solusi yang sangat mirip dengan plugin JQuery di halaman ini.
sumber
Berikut adalah solusi hanya CSS sederhana ( JSFiddle ), berfungsi di mana-mana, termasuk seluler dan IE:
CSS 2.0:
HTML:
sumber
CSS3 memperkenalkan unit baru yang diukur relatif terhadap viewport, yang merupakan jendela dalam kasus ini. Ini adalah
vh
danvw
, yang masing-masing mengukur tinggi dan lebar viewport. Berikut adalah solusi hanya CSS sederhana:Satu-satunya peringatan untuk ini adalah bahwa ini hanya berfungsi jika tidak ada elemen lain yang berkontribusi tinggi pada halaman.
sumber
100vh
tidak membiarkan gambar sesuai tetapi97vh
berfungsi dengan baik?vh
secara harfiah berarti tinggi tampilan, jadi jika ada elemen lain yang menambahkan ketinggian ke laman Anda, seluruh laman akan> 100vh. Apakah itu masuk akal?.svg
file dirender dengan baik, tetapi mengganti namanya.html
menyebabkan ketidakakuratan): browser secara otomatis menambahkan<body>
tag dengan defaultmargin:8
meskipun file tersebut belum diberi<body>
tag. Jadi solusinya adalah menambahkan<style>body{margin:0}</style>
Jika Anda ingin meletakkan elemen kontainer di sekitar gambar Anda, solusi CSS murni sederhana. Soalnya, 99% height tidak ada artinya ketika elemen induk akan diperpanjang secara vertikal untuk menampung anaknya. Induk harus memiliki tinggi tetap, katakanlah ... tinggi viewport.
HTML
CSS
Mainkan biola .
sumber
<div>
bukan<img>
?Ubah Ukuran Gambar agar Sesuai dengan Layar pada Sisi Terpanjang dengan mempertahankan Rasio Aspeknya
width: 100vw
- lebar gambar akan 100% dari port tampilanheight: auto
- tinggi gambar akan diskalakan secara proporsionalmax-height: 100vw
- jika tinggi gambar menjadi lebih dari port tampilan, itu akan dikurangi agar sesuai dengan layar, akibatnya lebar gambar akan berkurang karena properti berikutobject-fit: contain
- konten yang diganti diskalakan untuk mempertahankan rasio aspeknya sambil menyesuaikan dengan kotak konten elemenCatatan:
object-fit
hanya didukung penuh sejak IE 16.0sumber
object-fit
atau Anda dapat secara eksplisit menggunakanobject-fit: fill;
yang default .Aturan umum lazy CSS saya:
Ini mungkin memperbesar gambar Anda jika awalnya beresolusi rendah (ini berkaitan dengan kualitas gambar dan ukuran dalam dimensi. Untuk memusatkan gambar, Anda juga dapat mencoba (di CSS)
untuk memusatkan gambar Anda
di HTML Anda:
sumber
Saya tahu sudah ada beberapa jawaban di sini, tetapi inilah yang saya gunakan:
sumber
Saya memiliki persyaratan serupa, dan harus melakukannya dengan CSS dan JavaScript dasar. Tidak ada JQuery yang tersedia.
Inilah yang saya kerjakan.
Catatan: Saya belum menggunakan 100% untuk lebar gambar karena selalu ada sedikit padding yang harus dipertimbangkan.
sumber
img
tag kebody
dalam halaman dan setelmax-height
ke49vh
. Menampilkan lebih dari dua gambar di area yang dapat dilihat dibiarkan sebagai latihan bagi pembaca.Sederhanakan. Terima kasih
sumber
Saya percaya itu seharusnya berhasil.
sumber
Atau mungkin lihat ini: http://css-tricks.com/how-to-resizeable-background-image/
sumber
Berdasarkan jawaban @ Rohit, ini memperbaiki masalah yang ditandai oleh Chrome, mengubah ukuran gambar dengan andal, dan juga berfungsi untuk beberapa gambar yang ditumpuk secara vertikal, misalnya
<img src="foo.jpg"><br><img src="bar.jpg"><br><img src="baz.jpg">
Mungkin ada cara yang lebih elegan untuk melakukan ini.sumber
Gunakan kode ini di tag gaya Anda
sumber