Bagaimana cara membuat ukuran latar bekerja di IE?


188

Apakah ada cara yang diketahui untuk membuat gaya CSS background-sizeberfungsi di IE?


1
Apa efek yang Anda coba dapatkan?
— ZippyV

@ ZippV Saya memiliki div yang lebarnya sekitar 250 piksel. tetapi gambar latar belakang lebarnya 300px. Saya ingin gambar latar belakang sepenuhnya masuk (ukuran latar: 100%) sehingga tidak terputus. Kemudian :hoversaya ingin ukuran latar belakang berubah ke lebar 300px penuh (ukuran latar: otomatis) untuk menciptakan ilusi zoom
— JD Isaacks

1
Anda dapat mencapai efek yang sama dengan menggunakan tag img. Jika Anda membutuhkan sesuatu di atasnya, gunakan indeks-z.
— ZippyV

1
@ John mempertimbangkan untuk mengubah jawaban yang diterima jika solusi Dan berhasil untuk Anda!
— Pekka

@ZippyV Tag IMG terkadang memiliki efek samping yang tidak diperlukan, misalnya ia dapat dipilih atau diklik kanan. Ini kadang-kadang OK, kadang tidak.
— peterh

Jawaban:


312

Agak terlambat, tapi ini juga bisa berguna. Ada filter IE, untuk IE 5.5+, yang dapat Anda terapkan:

filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(
src='images/logo.gif',
sizingMethod='scale');

-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(
src='images/logo.gif',
sizingMethod='scale')";

Namun, ini menskala seluruh gambar agar pas di area yang dialokasikan, jadi jika Anda menggunakan sprite, ini dapat menyebabkan masalah.

Spesifikasi: Filter AlphaImageLoader @ microsoft


12
Saya bertanya-tanya mengapa MS tidak hanya mengimplementasikan fungsi itu menggunakan CSS. Terima kasih banyak!
— Martin Andersson

2
Versi IE mana yang mendukung ini?
— ᆼ ᆺ ᆼ

8
Jika Anda menggunakan tautan dan tombol di dalam elemen yang kami tentukan ini, tautan dan tombol itu tidak akan berfungsi. Adakah yang tahu metode untuk memperbaikinya?
— rubyprince

2
Saya harus menambahkan position: relative; z-index: 999untuk input, tombol, di dalam
— div tersebut

10
Metode skala tidak mempertahankan rasio .. Jadi yang terbaik adalah elemen Anda memiliki rasio yang sama dengan gambar Anda.
— Yves Van Broekhoven

45

Saya membuat jquery.backgroundSize.js : plugin jquery 1.5K yang dapat digunakan sebagai fallback IE8 untuk nilai "cover" dan "mengandung". Lihatlah demo .


12
Menurut dokumentasi jquery.backgroundSize.js, plugin tersebut sudah usang, dan mereka merekomendasikan background-size-polyfill sebagai gantinya.
— VOIDHand

Versi yang diperbarui tidak berfungsi dengan background-position: fixed.
— Ryan Burney

@ VOIDTapi kedua filter dan polyfill tidak bekerja untuk saya, saya menggunakan jquery.backgroundSize untuk sukses
— Chris Marisic

21

Berkat posting ini, css lengkap saya untuk kebahagiaan lintas browser adalah:

<style>
    .backgroundpic {
        background-image: url('img/home.jpg');
        background-size: cover;
        filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(
        src='img/home.jpg',
        sizingMethod='scale');
    }
</style>

Sudah begitu lama sejak saya mengerjakan potongan kode ini, tetapi saya ingin menambahkan lebih banyak kompatibilitas browser. Saya menambahkan ini ke CSS saya untuk lebih banyak kompatibilitas browser:

-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;

@ Gaurav123 try-webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover;
— honk31

5
ini membuat ie8 saya untuk menampilkan gambar latar belakang dua kali - satu dengan dimensi skala dan yang kedua latar belakang tidak berukuran besar.
— arekk

ie7: Terlihat OK, tetapi tidak bisa lagi mengklik tautan. (Mengapa ie7? Situs pemerintah sangat lambat diperbarui)
— Robbie Matthews

5

Bahkan nanti, tapi ini bisa berguna juga. Ada jQuery-backstretch-plugin yang dapat Anda gunakan sebagai polyfill untuk ukuran latar belakang: sampul. Saya kira itu mungkin (dan cukup sederhana) untuk mengambil properti css-background-url dengan jQuery dan memasukkannya ke plugin jQuery-backstretch. Praktik yang baik adalah menguji dukungan ukuran latar belakang dengan modernizr dan menggunakan plugin ini sebagai cadangan.

Plugin backstretch disebutkan di SO di sini . Situs jQuery-backstretch-plugin ada di sini .

Dengan cara yang sama Anda bisa membuat jQuery-plugin atau skrip yang membuat ukuran latar berfungsi di situasi Anda (ukuran latar: 100%) dan di IE8-. Jadi untuk menjawab pertanyaan Anda: Ya ada cara tetapi atm tidak ada solusi plug-and-play (yaitu Anda harus melakukan beberapa pengkodean sendiri).

(Penafian: Saya tidak memeriksa backstretch-plugin dengan seksama tetapi sepertinya melakukan hal yang sama dengan ukuran latar: cover)


5

Ada polyfill yang bagus untuk itu: louisremi / background-size-polyfill

Mengutip dokumentasi:

Unggah backgroundsize.min.htc ke situs web Anda, bersama dengan .htaccess yang akan mengirim tipe mime yang diperlukan oleh IE (hanya Apache - ini dibangun di nginx, node dan IIS).

Di mana-mana Anda menggunakan ukuran latar belakang di CSS Anda, tambahkan referensi ke file ini.

.selector { 
    background-size: cover;
    /* The url is relative to the document, not to the css file! */
    /* Prefer absolute urls to avoid confusion. */
    -ms-behavior: url(/backgroundsize.min.htc);
}

Polyfill ini hanya berfungsi. ukuran latar: menutupi atau mengandung di IE8. Tanpa muss, tidak repot.
— jimlongo

pendekatan ini mendukung keduanya containdan cover. Ini berisi 5.7KB tidak terlalu buruk karena akan ditransfer dalam satu paket jaringan.
— SMMousavi

2

Di IE11 Windows 7 ini bekerja untuk saya,

background-size: 100% 100%;


0

Saya mencoba dengan skrip berikut -

.selector { 
background-image: url("img/image.jpg");
background-size: 100%;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-repeat: no-repeat;
}

Itu berhasil untuk saya!


untuk versi apa?
— nihiser
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.