Saya mencoba mengubah ukuran img dengan persentase itu sendiri. Misalnya, saya hanya ingin mengecilkan gambar hingga setengahnya dengan mengubah ukurannya menjadi 50%. Tapi menerapkan width: 50%;
akan mengubah ukuran gambar menjadi 50% dari elemen kontainer (elemen induk yang mungkin <body>
misalnya).
Pertanyaannya adalah, dapatkah saya mengubah ukuran gambar dengan persentase itu sendiri tanpa menggunakan javascript atau sisi server? (Saya tidak memiliki informasi langsung tentang ukuran gambar)
Saya cukup yakin Anda tidak dapat melakukan ini, tetapi saya hanya ingin melihat apakah ada solusi khusus CSS saja. Terima kasih!
width: <number>%
. Saya rasa tidak ada cara untuk melakukannya!Jawaban:
Saya punya 2 metode untuk Anda.
Metode 1. Demo di jsFiddle
Metode ini mengubah ukuran gambar hanya visual bukan dimensi sebenarnya di DOM, dan status visual setelah mengubah ukuran dipusatkan di tengah ukuran aslinya.
html:
css:
Catatan dukungan browser : statistik browser menunjukkan inline in
css
.Metode 2. demo di jsFiddle
html:
css:
Catatan:
img.normal
danimg.fake
merupakan gambar yang sama.Catatan dukungan browser: Metode ini akan berfungsi di semua browser, karena semua browser mendukung
css
properti yang digunakan dalam metode.Cara kerjanya seperti ini:
#wrap
dan#wrap img.fake
mengalir#wrap
memilikioverflow: hidden
sehingga dimensinya identik dengan gambar bagian dalam (img.fake
)img.fake
adalah satu-satunya elemen di dalam#wrap
tanpaabsolute
pemosisian sehingga tidak merusak langkah kedua#img_wrap
memilikiabsolute
pemosisian di dalam#wrap
dan memperluas ukurannya ke seluruh elemen (#wrap
)#img_wrap
memiliki dimensi yang sama dengan gambar.width: 50%
padaimg.normal
, ukurannya50%
dari#img_wrap
, dan oleh karena itu50%
dari ukuran gambar asli.sumber
transform:scale()
solusi memiliki masalah meskipun besar. Itu tidak berinteraksi dengan baik dengan model kotak CSS. Maksud saya, itu tidak berinteraksi dengannya sama sekali , jadi Anda mendapatkan tata letak yang terlihat salah. Lihat: jsfiddle.net/kahen/sGEkt/8HTML:
CSS:
Ini harus menjadi salah satu solusi paling sederhana dengan menggunakan pendekatan elemen kontainer.
Saat menggunakan pendekatan elemen kontainer, pertanyaan ini adalah variasi dari pertanyaan ini . Triknya adalah membiarkan elemen penampung menyusut gambar anak, sehingga akan memiliki ukuran yang sama dengan gambar yang tidak berukuran. Jadi, saat menyetel
width
properti gambar sebagai nilai persentase, skala gambar tersebut relatif ke skala aslinya.Beberapa sifat shrinkwrapping-memungkinkan lain dan nilai properti adalah:
float: left/right
,position: fixed
danmin/max-width
, seperti yang disebutkan dalam pertanyaan terkait. Masing-masing memiliki efek sampingnya sendiri, tetapidisplay: inline-block
akan menjadi pilihan yang lebih aman. Matt telah menyebutkanfloat: left/right
dalam jawabannya, tetapi dia salah menghubungkannyaoverflow: hidden
.Demo di jsfiddle
Sunting: Seperti yang disebutkan oleh trojan , Anda juga dapat memanfaatkan modul ukuran intrinsik & ekstrinsik CSS3 yang baru diperkenalkan :
HTML:
CSS:
Namun, tidak semua versi browser populer mendukungnya pada saat penulisan .
sumber
<img src="https://www.google.com/images/srpr/logo11w.png"/>
CSS:img { display: inline-block; width: 15%; }
figure
adalahwidth: fit-content;
seperti yang sekarang. Dukungan browser juga jauh lebih baik hari ini.Coba
zoom
propertiEdit: Rupanya, FireFox tidak mendukung
zoom
properti. Kamu harus menggunakan;untuk FireFox.
sumber
Solusi lain adalah dengan menggunakan:
Ini tidak akan memvalidasi karena
src
atribut diperlukan, tetapi berfungsi (kecuali pada versi IE apa pun karenasrcset
tidak didukung).sumber
Ini sebenarnya mungkin, dan saya menemukan betapa tidak sengaja saat merancang situs desain responsif skala besar pertama saya.
Overflow: hidden memberikan tinggi dan lebar wrapper, meskipun isinya mengambang, tanpa menggunakan peretasan clearfix. Anda kemudian dapat memposisikan konten Anda menggunakan margin. Anda bahkan dapat membuat div pembungkus sebagai blok-sebaris.
sumber
Ini adalah utas yang sangat lama tetapi saya menemukannya saat mencari solusi sederhana untuk menampilkan tangkapan layar retina (resolusi tinggi) pada tampilan resolusi standar.
Jadi ada solusi khusus HTML untuk browser modern:
Ini memberi tahu browser bahwa gambar tersebut berukuran dua kali lebih besar dari ukuran tampilan yang diinginkan. Nilainya proporsional dan tidak perlu mencerminkan ukuran gambar yang sebenarnya. Seseorang dapat menggunakan 2w 1px juga untuk mencapai efek yang sama. Atribut src hanya digunakan oleh browser lama.
Efek bagusnya adalah ia menampilkan ukuran yang sama pada retina atau layar standar, menyusut pada layar standar.
sumber
Solusi ini menggunakan js dan jquery dan mengubah ukuran hanya berdasarkan properti gambar dan bukan induknya. Itu dapat mengubah ukuran satu gambar atau grup berdasarkan menggunakan parameter class dan id.
untuk lebih lanjut, buka di sini: https://gist.github.com/jennyvallon/eca68dc78c3f257c5df5
sumber
Ini adalah pendekatan yang tidak sulit:
sumber
Sebenarnya sebagian besar jawaban di sini tidak benar-benar menskalakan gambar dengan lebarnya sendiri .
Kita perlu memiliki lebar dan tinggi otomatis pada
img
elemen itu sendiri sehingga kita bisa mulai dengan ukuran aslinya.Setelah itu elemen container dapat menskalakan gambar untuk kita.
Contoh HTML sederhana:
Dan inilah aturan CSS. Saya menggunakan wadah absolut dalam kasus ini:
Anda dapat mengubah posisi gambar dengan aturan seperti
transform: translate(0%, -50%);
.sumber
Saya pikir Anda benar, hanya saja tidak mungkin dengan CSS murni sejauh yang saya tahu (maksud saya bukan lintas-browser).
Edit:
Oke, saya tidak terlalu menyukai jawaban saya jadi saya sedikit bingung. Saya mungkin telah menemukan ide menarik yang bisa membantu .. mungkin itu memang mungkin (walaupun bukan yang tercantik):
Edit: Diuji dan berfungsi di Chrome, FF dan IE 8 & 9. . Itu tidak bekerja di IE7.
Contoh jsFiddle di sini
html:
css:
sumber
inline-block
, itulah mengapa lebar#img_wrap
tidak hanya bergantung pada lebar html bagian dalam, tetapi juga pada lebar wadah konteks.