Bagaimana saya bisa mensimulasikan fungsi background-size:cover
pada elemen html seperti <video>
atau <img>
?
Saya ingin itu bekerja
background-size: cover;
background-position: center center;
javascript
jquery
css
khotbah
sumber
sumber
cover
. Lihat Background-size 101 pada tautan .Jawaban:
Ini adalah sesuatu yang saya tarik keluar untuk sementara waktu, tetapi saya menemukan solusi hebat yang tidak menggunakan skrip apa pun, dan dapat mencapai simulasi sampul yang sempurna pada video dengan 5 baris CSS (9 jika Anda menghitung pemilih dan kurung ). Ini memiliki 0 tepi-kasus di mana itu tidak berfungsi dengan baik, kekurangan kompatibilitas CSS3 .
Anda dapat melihat contohnya di sini
Masalah dengan solusi Timotius , adalah bahwa itu tidak menangani penskalaan dengan benar. Jika elemen di sekitarnya lebih kecil dari file video, itu tidak diperkecil. Bahkan jika Anda memberi tag video ukuran awal yang sangat kecil, seperti 16px oleh 9px,
auto
akhirnya memaksanya untuk ukuran minimum file aslinya. Dengan solusi terpilih saat ini di halaman ini, tidak mungkin bagi saya untuk menurunkan skala file video yang menghasilkan efek zoom yang drastis.Namun, jika rasio aspek video Anda diketahui, seperti 16: 9, Anda dapat melakukan hal berikut:
Jika elemen induk video diatur untuk menutupi seluruh halaman (seperti
position: fixed; width: 100%; height: 100vh;
), maka video juga akan.Jika Anda ingin video terpusat juga, Anda dapat menggunakan pendekatan pemusatan pasti:
Tentu saja,
vw
,vh
, dantransform
yang CSS3, jadi jika Anda perlu kompatibilitas dengan browser yang jauh lebih tua , Anda harus menggunakan skrip.sumber
vh
danvw
harus dilakukan dengan apa pun?jsFiddle
Menggunakan penutup latar belakang baik untuk gambar, dan lebar 100%. Ini tidak optimal untuk
<video>
, dan jawaban ini terlalu rumit. Anda tidak perlu jQuery atau JavaScript untuk menyelesaikan latar belakang video lebar penuh.Perlu diingat bahwa kode saya tidak akan mencakup latar belakang sepenuhnya dengan video seperti sampul akan, tetapi justru akan membuat video sebesar yang diperlukan untuk mempertahankan rasio aspek dan masih menutupi seluruh latar belakang. Setiap kelebihan video akan berdarah tepi halaman, sisi mana yang bergantung pada tempat Anda meletakkan video.
Jawabannya cukup sederhana.
Cukup gunakan kode video HTML5 ini, atau sesuatu seperti ini: (tes dalam Halaman Penuh)
Tinggi min dan lebar minimum akan memungkinkan video mempertahankan rasio aspek video, yang biasanya merupakan rasio aspek dari browser normal pada resolusi normal. Setiap kelebihan video berdarah di sisi halaman.
sumber
min-width
ataumin-height
triknya saja.position: absolute; left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%);
.Untuk beberapa browser, Anda dapat menggunakan
http://caniuse.com/object-fit
sumber
height: 100%; width: 100%;
. terima kasih atas jawaban modern iniBegini cara saya melakukan ini. Contoh kerja ada di jsFiddle ini .
sumber
video { min-width: 100%; min-height: 100%; }
dan itu berfungsi seperti pesona.background-size: cover
untuk video.Jawaban lainnya baik tetapi melibatkan javascript atau tidak memusatkan video secara horizontal DAN vertikal.
Anda dapat menggunakan solusi CSS lengkap ini untuk memiliki video yang mensimulasikan ukuran latar belakang: properti sampul:
sumber
Berdasarkan jawaban dan komentar Daniel de Wit , saya mencari sedikit lebih banyak. Terima kasih padanya untuk solusinya.
Solusinya adalah menggunakan
object-fit: cover;
yang memiliki dukungan hebat (setiap browser modern mendukungnya). Jika Anda benar-benar ingin mendukung IE, Anda dapat menggunakan polyfill seperti objek-fit-gambar atau objek-fit .Demo:
dan dengan orang tua:
sumber
object-fit: cover
danwidth
danheight
mengatur ke 100%, Anda mendapatkan skala-skalaimg
atauvideo
diperbesar di pusat tanpa keributan.Solusi M-Pixel sangat bagus karena memecahkan masalah penskalaan jawaban Timotius (video akan naik skala tetapi tidak turun, jadi jika video Anda benar-benar besar, ada peluang bagus Anda hanya akan melihat sedikit diperbesar di bagiannya). Namun, solusi tersebut didasarkan pada asumsi yang salah terkait dengan ukuran wadah video, yaitu harus 100% dari lebar dan tinggi viewport. Saya telah menemukan beberapa kasus di mana itu tidak berhasil untuk saya, jadi saya memutuskan untuk mengatasi masalah sendiri, dan saya percaya saya datang dengan solusi terbaik .
HTML
CSS
Ini juga didasarkan pada rasio video, jadi jika video Anda memiliki rasio selain 16/9 Anda akan ingin mengubah% padding-bottom. Selain itu, ia bekerja di luar kotak. Diuji dalam IE9 +, Safari 9.0.1, Chrome 46, dan Firefox 41.
EDIT (17 Maret 2016)
Karena saya diposting jawaban ini saya sudah menulis modul CSS kecil untuk mensimulasikan baik
background-size: cover
danbackground-size: contain
pada<video>
elemen: http://codepen.io/benface/pen/NNdBMjIni mendukung keberpihakan yang berbeda untuk video (mirip dengan
background-position
). Perhatikan juga bahwacontain
implementasinya tidak sempurna. Tidak sepertibackground-size: contain
itu, ini tidak akan menskala video melewati ukuran sebenarnya jika lebar dan tinggi wadah lebih besar, tapi saya pikir itu masih bisa berguna dalam beberapa kasus. Saya juga menambahkan kelas khususfill-width
danfill-height
yang dapat Anda gunakan bersamacontain
untuk mendapatkan campuran khususcontain
dancover
... mencobanya, dan merasa bebas untuk memperbaikinya!sumber
object-fit: cover
untuk FF dan chrome dan solusi Anda dengan Modernizr untuk IEobject-fit: cover
adalah jawaban terbaik dengan IE ini, Safari polyfill.https://github.com/constancecchen/object-fit-polyfill
Ini mendukung
img
,video
danpicture
elemen.sumber
CSS dan js kecil dapat membuat video menutupi latar belakang dan terpusat secara horizontal.
CSS:
JS: (ikat ini dengan ukuran jendela dan panggil sekali secara terpisah)
sumber
Tepat setelah bagian komentar panjang kami, saya pikir ini yang Anda cari, berdasarkan jQuery:
HTML:
JS:
CSS:
Kode di atas menggunakan lebar dan tinggi browser jika Anda melakukan ini dalam div, Anda harus mengubahnya menjadi seperti ini:
Untuk Div:
HTML:
JS:
CSS:
Saya juga harus menyatakan bahwa saya hanya menguji ini Google Chrome ... di sini adalah jsfiddle: http://jsfiddle.net/ADCKk/
sumber
Jawaban teratas tidak mengurangi video saat Anda memiliki lebar browser kurang dari lebar video Anda. Coba gunakan CSS ini (dengan #bgvid menjadi id video Anda):
sumber
z-index
perlu?Saya gunna memposting solusi ini juga, karena saya punya masalah ini tetapi solusi lain tidak bekerja untuk situasi saya ...
saya pikir untuk mensimulasikan
background-size:cover;
properti css dengan benar pada elemen alih-alih properti background-image elemen, Anda harus membandingkan rasio aspek gambar dengan rasio aspek windows saat ini, jadi apa pun ukurannya (dan juga dalam hal gambar tersebut adalah lebih tinggi daripada lebih luas) jendela adalah elemen yang mengisi jendela (dan juga memusatkannya, meskipun saya tidak tahu apakah itu persyaratan) ....menggunakan gambar, hanya demi kesederhanaan, saya yakin elemen video akan berfungsi dengan baik juga.
pertama-tama dapatkan rasio aspek elemen (setelah dimuat), lalu pasang handler ukuran jendela, picu sekali untuk ukuran awal:
kemudian pada handler ukuran Anda, Anda harus terlebih dahulu menentukan apakah akan mengisi lebar atau mengisi ketinggian dengan membandingkan rasio aspek jendela saat ini dengan rasio aspek asli gambar.
}
.gif
ukurannya jauh lebih besar, sementara juga blurrier. Pandangan saya telah berubah sejak saya menulis jawaban ini. Sayang sekali Anda tidak bisa menggabungkan yang terbaik dari keduanya.Pendekatan ini hanya menggunakan css dan html. Anda sebenarnya dapat menumpuk div di bawah video dengan mudah. Itu menutupi tetapi tidak di tengah saat Anda mengubah ukuran.
HTML:
CCS:
sumber
@ Hobbes Tersembunyi
Anda membuka hadiah untuk pertanyaan ini hanya untuk solusi CSS, jadi saya akan mencobanya. Solusi saya untuk masalah seperti ini adalah menggunakan rasio tetap untuk menentukan tinggi dan lebar video. Saya biasanya menggunakan Bootstrap, tetapi saya mengekstrak CSS yang diperlukan dari sana untuk membuatnya bekerja tanpa. Ini adalah kode yang saya gunakan sebelumnya untuk antara lain memusatkan video yang disematkan dengan rasio yang benar. Itu harus bekerja untuk
<video>
dan<img>
elemen juga. Itu adalah yang teratas yang relevan di sini, tetapi saya memberi Anda dua lainnya juga karena saya sudah memiliki mereka meletakkan di sekitar. Semoga berhasil! :)contoh jsfiddle layar penuh
sumber
Untuk menjawab komentar dari Weotch bahwa jawaban Timothy Ryan Carpenter tidak memperhitungkan
cover
pemusatan latar belakang, saya menawarkan perbaikan cepat CSS ini:CSS:
Menambahkan dua baris ini akan memusatkan elemen apa pun. Bahkan lebih baik, semua browser yang dapat menangani video HTML5 juga mendukung transformasi CSS3, jadi ini akan selalu berhasil.
CSS yang lengkap terlihat seperti ini.
Saya telah mengomentari langsung jawaban Timotius, tetapi saya tidak memiliki reputasi yang cukup untuk melakukannya.
sumber
Kawan, saya punya solusi yang lebih baik, pendek dan berfungsi sempurna untuk saya. Saya menggunakannya untuk video. Dan itu sempurna meniru opsi sampul dalam css.
Javascript
Jika Anda membalik if, kalau tidak Anda akan mendapatkan konten.
Dan ini css. (Anda tidak perlu menggunakannya jika Anda tidak ingin pemosisian tengah, div induk harus " posisi: relatif ")
CSS
sumber
Saya baru saja menyelesaikan ini dan ingin berbagi. Ini berfungsi dengan Bootstrap 4. Berhasil dengan
img
tetapi saya tidak mengujinyavideo
. Inilah HAML dan SCSSHAML
SCSS
sumber
Pertanyaan lama, tetapi jika ada yang melihat ini, jawaban terbaik menurut saya adalah mengubah video menjadi GIF animasi. Ini memberi Anda lebih banyak kontrol dan Anda bisa memperlakukannya seperti gambar. Ini juga satu-satunya cara agar bisa berfungsi di ponsel, karena Anda tidak bisa memutar video secara otomatis. Saya tahu pertanyaannya adalah meminta untuk melakukannya dalam
<img>
tag, tapi saya tidak benar-benar melihat sisi buruk dari penggunaan<div>
dan pelaksanaanbackground-size: cover
sumber
.gif
ukurannya jauh lebih besar, sementara juga blurrier. Pandangan saya telah berubah sejak saya menulis jawaban ini. Sayang sekali Anda tidak bisa menggabungkan yang terbaik dari keduanya.