Saya telah mencoba memilah bagaimana memusatkan gambar yang terlalu besar dalam div menggunakan css saja.
Kami menggunakan tata letak yang cair, sehingga lebar wadah gambar bervariasi seperti lebar halaman (ketinggian div diperbaiki). Gambar duduk di dalam div, dengan nilai sebuah kotak bayangan inset sehingga muncul seolah-olah Anda melihat melalui halaman di gambar.
Gambar itu sendiri telah berukuran untuk mengisi div sekitarnya pada nilai seluas mungkin (desain memiliki max-width
nilai).
Sangat mudah dilakukan jika gambar lebih kecil dari div sekitarnya:
margin-left: auto;
margin-right: auto;
display: block;
Tetapi ketika gambar lebih besar dari div itu hanya mulai di tepi kiri dan dari pusat ke kanan (kami menggunakan overflow: hidden
).
Kami dapat menetapkan width=100%
, tetapi browser melakukan pekerjaan yang buruk untuk mengubah ukuran gambar dan desain web berpusat pada citra berkualitas tinggi.
Adakah ide untuk memusatkan gambar sehingga overflow:hidden
memotong kedua sisi secara merata?
Jawaban:
Coba sesuatu seperti ini. Ini harus memusatkan elemen besar di tengah secara vertikal dan horizontal sehubungan dengan induknya, tidak peduli ukurannya.
sumber
-100%
untuk atas / kanan / bawah / kiri? Dengan itu wadah itu bisa memiliki lebar apa pun .-100%
masalah ini ^^. Btw: jika Anda menambahkanmin-width
danmin-height
dari100%
Anda pada dasarnya mendapatkanbackground-size: cover;
perilaku dengan tag gambar -> jsfiddleIni adalah Q lama, tetapi solusi modern tanpa flexbox atau posisi benar-benar berfungsi seperti ini.
Tampilkan cuplikan kode
Jadi mengapa ini berhasil?
Pada pandangan pertama tampaknya kita menggeser 50% ke kanan dan kemudian 50% ke kiri lagi. Itu akan menghasilkan nol shift, jadi apa?
Tetapi 50% tidak sama, karena konteks itu penting. Jika Anda menggunakan unit relatif, margin akan dihitung sebagai persentase dari lebar elemen induk , sedangkan transformasi akan menjadi 50% relatif terhadap elemen yang sama .
Kami memiliki situasi ini sebelum kami menambahkan CSS
Dengan gaya tambahan yang
margin-left: 50%
kami milikiDan
transform: translateX(-50%)
bergeser kembali ke kiriSayangnya ini hanya berfungsi untuk pemusatan horizontal karena perhitungan persentase margin selalu relatif terhadap lebar. Yaitu tidak hanya
margin-left
danmargin-right
, tetapi jugamargin-top
danmargin-bottom
dihitung sehubungan dengan lebar.Kompatibilitas browser seharusnya tidak menjadi masalah: https://caniuse.com/#feat=transforms2d
sumber
margin-top: 50%
akan menjadi 50% dari lebar . bukan ketinggian yang diinginkan.-webkit-transform: translateX(-50%);
ukuran yang baik)Letakkan div besar di dalam div itu, tengah itu, dan tengah gambar di dalam div itu.
Ini berpusat secara horizontal:
HTML:
CSS:
Demo: http://jsfiddle.net/Guffa/L9BnL/
Untuk memusatkannya secara vertikal juga, Anda dapat menggunakan yang sama untuk div bagian dalam, tetapi Anda akan membutuhkan ketinggian gambar untuk menempatkannya di dalamnya.
sumber
width
pengaturan pada wadah, itu akan menjadi lebar induk, dan gambar berada di tengah bahkan jika halaman lebih sempit daripada gambar, yaitu sebanyak tepi kiri dan tepi kanan akan disembunyikan : jsfiddle.net/Guffa/L9BnL/2Terlambat dalam permainan, tetapi saya menemukan metode ini sangat intuitif. https://codepen.io/adamchenwei/pen/BRNxJr
CSS
HTML
sumber
display: flex
pada wadah induk danalign-self: center
pada gambar. Berikut adalah versi yang dioptimalkan: codepen.io/anon/pen/dWKyeyJangan gunakan lebar atau tinggi tetap atau eksplisit untuk tag gambar. Alih-alih, buat kode:
mis: http://jsfiddle.net/xwrvxser/1/
sumber
Saya penggemar berat membuat gambar latar belakang div / node - maka Anda bisa menggunakan
background-position: center
atribut untuk memusatkannya terlepas dari ukuran layarsumber
Lebar dan tinggi hanya sebagai contoh:
Ini harus bekerja untuk Anda jika bagian kiri dan atas div orang tua Anda bukan bagian paling atas dan kiri dari jendela layar Anda. Ini bekerja untuk saya.
sumber
Saya menemukan ini menjadi solusi yang lebih elegan, tanpa fleksibel:
sumber
Membangun jawaban hebat @ yunzen:
Saya menduga banyak orang yang mencari topik ini mencoba menggunakan gambar besar sebagai gambar latar belakang "pahlawan", misalnya di beranda. Dalam hal ini, mereka sering ingin teks muncul di atas gambar dan menurunkannya pada perangkat seluler.
Berikut ini adalah CSS yang sempurna untuk gambar latar belakang tersebut (gunakan pada
<img>
tag):sumber
Salah satu opsi yang dapat Anda gunakan adalah
object-fit: cover
berperilaku sepertibackground-size: cover
. Lebih lanjut tentang objek-fit .abaikan semua JS di bawah ini, itu hanya untuk demo.
Kuncinya di sini adalah bahwa Anda perlu mengatur gambar di dalam pembungkus dan memberikannya properti berikut.
Saya telah membuat demo di bawah ini di mana Anda mengubah tinggi / lebar pembungkus dan melihat bermain. Gambar akan selalu terpusat secara vertikal dan horizontal. Ini akan mengambil 100% dari lebar dan tinggi induknya, dan tidak akan diregangkan / tergencet. Ini berarti bahwa rasio aspek gambar dipertahankan. Perubahan diterapkan dengan cara memperbesar / memperkecil.
Satu-satunya downside
object-fit
adalah bahwa itu tidak berfungsi pada IE11.sumber