Bagaimana cara mendapatkan div untuk secara otomatis menyesuaikan dengan ukuran latar belakang yang saya set untuk itu tanpa mengatur ketinggian tertentu (atau min-tinggi) untuk itu?
css
html
background
height
JohnIdol
sumber
sumber
img
markup Anda, mengapa tidak tidak menyembunyikan yang sebenarnya<img>
dan tidak repot dengan yangbackground-image
baik? Apa untungnya melakukan hal-hal seperti ini?background-image
adalah dapat menggunakan mode campuran CSS , sedangkanimg
tidak bisa.Ada cara yang sangat bagus dan keren untuk membuat gambar latar berfungsi seperti
img
elemen sehingga menyesuaikanheight
secara otomatis. Anda perlu tahu gambarwidth
danheight
rasio. Aturheight
wadah ke 0 dan aturpadding-top
persentase berdasarkan rasio gambar.Ini akan terlihat seperti berikut:
Anda baru saja mendapatkan gambar latar belakang dengan tinggi otomatis yang akan berfungsi seperti elemen img. Berikut adalah prototipe yang berfungsi (Anda dapat mengubah ukuran dan memeriksa ketinggian div): http://jsfiddle.net/TPEFn/2/
sumber
@mixin div-same-size-as-background-img($url) { background-image: url($url); background-size: contain; background-repeat: no-repeat; width: 100%; height: 0; padding-top: percentage(image-height($url) / image-width($url)); }
position:relative
div dan meletakkan div lain di dalam denganposition:absolute; top:0; bottom:0; left:0; right:0;
setTidak ada cara untuk secara otomatis menyesuaikan ukuran gambar latar belakang menggunakan CSS.
Anda dapat meretasnya dengan mengukur gambar latar belakang di server dan kemudian menerapkan atribut-atribut tersebut ke div, seperti yang telah disebutkan orang lain.
Anda juga dapat meretas beberapa javascript untuk mengubah ukuran div berdasarkan ukuran gambar (setelah gambar diunduh) - ini pada dasarnya adalah hal yang sama.
Jika Anda perlu div Anda untuk menyesuaikan gambar secara otomatis, saya mungkin bertanya mengapa Anda tidak menaruh
<img>
tag saja di dalam div Anda?sumber
src
suatuimg
dengan pertanyaan media, tetapi Anda dapat mengubah file yang digunakan sebagai gambar latar belakang dengan pertanyaan media.Jawaban ini mirip dengan yang lain, tetapi secara keseluruhan yang terbaik untuk sebagian besar aplikasi. Anda perlu mengetahui ukuran gambar sebelum tangan yang biasanya Anda lakukan. Ini akan memungkinkan Anda menambahkan teks overlay, judul, dll tanpa bantalan negatif atau posisi absolut gambar. Kuncinya adalah mengatur padding% agar sesuai dengan rasio aspek gambar seperti yang terlihat pada contoh di bawah ini. Saya menggunakan jawaban ini dan pada dasarnya hanya menambahkan latar belakang gambar.
sumber
Mungkin ini bisa membantu, itu bukan latar belakang, tetapi Anda mendapatkan ide:
sumber
float: left;
posisinya rusakCukup yakin ini tidak akan pernah terlihat di sini. Tetapi jika masalah Anda sama dengan masalah saya, ini adalah solusi saya:
Saya ingin memiliki div di tengah gambar, dan ini akan memungkinkan saya untuk itu.
sumber
Ada solusi CSS murni yang tidak dijawab oleh jawaban lain.
Properti "content:" sebagian besar digunakan untuk menyisipkan konten teks ke dalam elemen, tetapi juga dapat digunakan untuk menyisipkan konten gambar.
Ini akan menyebabkan div untuk mengubah ukuran tingginya menjadi ukuran piksel aktual dari gambar. Untuk mengubah ukuran lebar juga, tambahkan:
sumber
Anda dapat melakukannya dari sisi server: dengan mengukur gambar dan kemudian mengatur ukuran div, ATAU memuat gambar dengan JS, baca atributnya dan kemudian atur ukuran DIV.
Dan ini sebuah ide, letakkan gambar yang sama di dalam div sebagai tag IMG, tetapi berikan visibilitas: hidden + play with position relative + berikan div gambar ini sebagai latar belakang.
sumber
Saya memiliki masalah ini dan menemukan jawaban Hasanavi tetapi saya mendapat sedikit bug ketika menampilkan gambar latar belakang pada layar lebar - Gambar latar belakang tidak menyebar ke seluruh lebar layar.
Jadi di sini adalah solusi saya - berdasarkan kode Hasanavi tetapi lebih baik ... dan ini harus bekerja pada layar ekstra-lebar dan seluler.
Seperti yang mungkin Anda perhatikan,
background-size: contain;
properti doas tidak pas di layar ekstra lebar, danbackground-size: cover;
properti tidak cocok di layar seluler jadi saya menggunakan@media
atribut ini untuk bermain-main dengan ukuran layar dan memperbaiki masalah ini.sumber
Bagaimana dengan ini :)
Demo: http://jsfiddle.net/josephmcasey/KhPaF/
sumber
Jika itu adalah gambar latar tunggal yang telah ditentukan sebelumnya dan Anda ingin div untuk menjadi responsif tanpa mendistorsi rasio aspek dari gambar latar belakang, Anda dapat terlebih dahulu menghitung rasio aspek gambar dan kemudian membuat sebuah div yang mempertahankan aspek rasio itu dengan melakukan hal berikut :
Katakanlah Anda menginginkan rasio aspek 4/1 dan lebar div adalah 32%:
Ini hasil dari fakta bahwa padding dihitung berdasarkan lebar elemen yang mengandung.
sumber
Mungkin ini bisa membantu, itu bukan latar belakang, tetapi Anda mendapatkan ide sederhana
sumber
Anda bisa melakukan hal seperti itu
sumber
Jika Anda tahu rasio gambar pada waktu membangun, ingin ketinggian berdasarkan tinggi jendela dan Anda baik-baik saja menargetkan browser modern (IE9 +) , maka Anda dapat menggunakan unit viewport untuk ini:
Tidak seperti yang diminta OP, tapi mungkin cocok untuk banyak dari mereka yang melihat pertanyaan ini, jadi ingin memberikan opsi lain di sini.
Fiddle: https://jsfiddle.net/6Lkzdnge/
sumber
Saya melihat beberapa solusi dan mereka hebat tetapi saya pikir saya menemukan cara yang sangat mudah.
Pertama, kita perlu mendapatkan rasio dari gambar latar belakang. Kami hanya membagi satu dimensi melalui dimensi lain. Maka kita mendapatkan sesuatu seperti misalnya 66,4%
Ketika kami memiliki rasio gambar, kami cukup menghitung ketinggian div dengan mengalikan rasio dengan lebar viewport:
Bagi saya, ini berfungsi, set tinggi div dengan benar dan ubah ketika jendela diubah ukurannya.
sumber
Misalkan Anda memiliki beberapa hal seperti ini:
dan Anda ingin menambahkan latar belakang untuk itu, tetapi Anda tidak tahu dimensi gambar.
Saya memiliki masalah yang sama, dan saya menyelesaikannya dengan menggunakan kotak:
HTML
CSS
z-index
hanya untuk menempatkan gambar di latar belakang, Anda tentu saja dapat menempatkan diimg.background
atasdiv.content
.CATATAN : Ini dapat menyebabkan
div.content
ketinggian gambar yang sama, jadi jikadiv.content
ada anak yang ditempatkan sesuai dengan tingginya, Anda mungkin ingin mengatur angka bukan sesuatu seperti 'otomatis'.sumber
Apakah masalah ini dengan CMS Umbraco dan dalam skenario ini Anda dapat menambahkan gambar ke div menggunakan sesuatu seperti ini untuk atribut 'style' dari div:
sumber
Saya telah menangani masalah ini untuk sementara waktu dan memutuskan untuk menulis plugin jquery untuk mengatasi masalah ini. Plugin ini akan menemukan semua elemen dengan kelas "show-bg" (atau Anda dapat memberikannya pemilih Anda sendiri) dan menghitung dimensi gambar latar belakangnya. yang harus Anda lakukan adalah memasukkan kode ini, tandai elemen yang diinginkan dengan class = "show
Nikmati!
https://bitbucket.org/tomeralmog/jquery.heightfrombg
sumber
Solusi terbaik yang dapat saya pikirkan adalah dengan menentukan lebar dan tinggi Anda dalam persen. Ini memungkinkan Anda untuk mengubah ukuran layar berdasarkan ukuran monitor Anda. itu lebih dari tata letak responsif ..
Sebagai contoh. kamu punya
Ini adalah pilihan terbaik jika Anda ingin tata letak responsif, saya tidak akan merekomendasikan float, dalam beberapa kasus float boleh digunakan. tetapi dalam kebanyakan kasus, kami menghindari penggunaan float karena akan memengaruhi banyak hal ketika Anda melakukan pengujian lintas-browser.
Semoga ini membantu :)
sumber
sebenarnya itu sangat mudah ketika Anda tahu bagaimana melakukannya:
triknya adalah hanya dengan mengatur div tertutup hanya sebagai div normal dengan nilai dimensi yang sama dengan nilai dimensi latar belakang (dalam contoh ini, 100% dan 40vw).
sumber
Saya memecahkan ini menggunakan jQuery. Sampai aturan CSS baru memungkinkan untuk jenis perilaku ini secara native saya menemukan itu adalah cara terbaik untuk melakukannya.
Siapkan div Anda
Di bawah ini Anda memiliki div yang Anda inginkan untuk menampilkan latar belakang ("pahlawan") dan kemudian konten batin / teks yang ingin Anda overlay di atas gambar latar belakang Anda ("batin"). Anda dapat (dan harus) memindahkan gaya inline ke kelas pahlawan Anda. Saya meninggalkan mereka di sini sehingga cepat dan mudah untuk melihat gaya apa yang diterapkan padanya.
Hitung rasio aspek gambar
Selanjutnya hitung rasio aspek Anda untuk gambar Anda dengan membagi tinggi gambar Anda dengan lebarnya. Misalnya, jika tinggi gambar Anda adalah 660 dan lebar Anda adalah 1280 rasio aspek Anda adalah 0,5156.
Siapkan acara penyesuaian ukuran jendela jQuery untuk menyesuaikan ketinggian
Terakhir, tambahkan pendengar acara jQuery untuk mengubah ukuran jendela dan kemudian hitung tinggi pahlawan Anda berdasarkan dari aspek rasio dan perbarui. Solusi ini biasanya meninggalkan piksel tambahan di bagian bawah karena perhitungan tidak sempurna menggunakan rasio aspek sehingga kami menambahkan -1 ke ukuran yang dihasilkan.
Pastikan itu berfungsi pada pemuatan halaman
Anda harus melakukan panggilan pengubahan ukuran di atas saat halaman memuat agar ukuran gambar dihitung sejak awal. Jika tidak, maka div pahlawan tidak akan menyesuaikan sampai Anda mengubah ukuran jendela. Saya mengatur fungsi terpisah untuk melakukan penyesuaian ukuran. Inilah kode lengkap yang saya gunakan.
sumber
Jika Anda dapat membuat gambar di Photoshop di mana lapisan utama memiliki opacity 1 atau lebih dan pada dasarnya transparan, letakkan img itu di div dan kemudian buat gambar nyata gambar latar belakang. KEMUDIAN atur opacity dari img ke 1 dan tambahkan dimensi ukuran yang Anda inginkan.
Gambar itu dilakukan dengan cara itu, dan Anda bahkan tidak dapat menarik gambar yang tidak terlihat dari halaman yang keren.
sumber
tambahkan saja
div
sumber