Come faccio a far funzionare la dimensione dello sfondo in IE?


188

Esiste un modo noto per far funzionare lo stile CSS background-sizein IE?


1
Che effetto stai cercando di ottenere?
ZippyV

@ZippV Ho un div largo circa 250 pixel. ma l'immagine di sfondo è larga 300 pixel. Voglio che l'immagine di sfondo si adatti perfettamente (dimensione dello sfondo: 100%) in modo che non venga tagliata. Quindi, :hovervoglio che le dimensioni dello sfondo cambino alla larghezza completa di 300 px (dimensioni dello sfondo: auto) per creare l'illusione dello zoom
JD Isaacks,

1
È possibile ottenere lo stesso effetto utilizzando un tag img. Se hai bisogno di qualcosa sopra di esso, usa z-index.
ZippyV

1
@Giovanni considera di cambiare la risposta accettata se la soluzione di Dan ha funzionato per te!
Pekka,

@ZippyV Il tag IMG ha talvolta effetti collaterali non necessari, ad esempio può essere selezionato o cliccato con il tasto destro. Questi a volte vanno bene, a volte no.
Peter - Ripristina Monica il

Risposte:


312

Un po 'in ritardo, ma potrebbe anche essere utile. Esiste un filtro IE, per IE 5.5+, che puoi applicare:

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

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

Tuttavia, questo ridimensiona l'intera immagine per adattarla all'area allocata, quindi se si utilizza uno sprite, ciò potrebbe causare problemi.

Specifica: AlphaImageLoader Filter @microsoft


12
Mi chiedo perché MS non abbia implementato quella funzionalità utilizzando i CSS. Molte grazie!
Martin Andersson,

2
Quali versioni di IE supportano questo per favore?
ᆼ ᆺ ᆼ

8
Se si utilizzano collegamenti e pulsanti all'interno dell'elemento che abbiamo definito, tali collegamenti e pulsanti non funzioneranno. Qualcuno conosce un metodo per risolvere questo problema?
rubyprince,

2
Ho dovuto aggiungere position: relative; z-index: 999un input, un pulsante all'interno di tali div
rubyprince,

10
Il metodo di ridimensionamento non mantiene il rapporto però .. Quindi è meglio che il tuo elemento abbia lo stesso rapporto dell'immagine.
Yves Van Broekhoven,

45

Ho creato jquery.backgroundSize.js : un plugin jquery da 1,5 KB che può essere utilizzato come fallback IE8 per i valori "cover" e "contenere". Dai un'occhiata alla demo .


12
Secondo la documentazione di jquery.backgroundSize.js, il plugin è obsoleto e raccomandano invece background-size-polyfill .
VUOTO

La versione aggiornata non funziona con background-position: fixed.
Ryan Burney,

@VOIDHand Sia il filtro che il polyfill non hanno funzionato per me, ho usato jquery.backgroundSize per il successo
Chris Marisic,

21

Grazie a questo post, il mio css completo per la felicità tra browser è:

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

È passato tanto tempo da quando ho lavorato su questo pezzo di codice, ma vorrei aggiungere una maggiore compatibilità con il browser. L'ho aggiunto al mio CSS per una maggiore compatibilità con il browser:

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

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

5
questo fa sì che il mio ie8 mostri due volte l'immagine di sfondo, una con dimensioni ridimensionate e la seconda con uno sfondo non dimensionato.
Arekk,

ie7: sembra OK, ma non è più possibile fare clic sui collegamenti. (Perché ie7? I siti Govt si aggiornano molto lentamente)
Robbie Matthews,

5

Anche più tardi, ma anche questo potrebbe essere utile. Esiste il plug-in jQuery-backstretch che puoi usare come polyfill per la dimensione dello sfondo: copertina. Immagino che debba essere possibile (e abbastanza semplice) afferrare la proprietà css-background-url con jQuery e inviarla al plugin jQuery-backstretch. La buona pratica sarebbe quella di testare il supporto delle dimensioni di sfondo con modernizr e utilizzare questo plugin come fallback.

Il plug-in backstretch è stato menzionato su SO qui . Il sito jQuery-backstretch-plugin è qui .

In modo simile potresti creare un plugin o uno script jQuery che faccia funzionare la dimensione dello sfondo nella tua situazione (dimensione dello sfondo: 100%) e in IE8-. Quindi, per rispondere alla tua domanda: Sì, c'è un modo, ma atm non esiste una soluzione plug-and-play (cioè devi fare un po 'di codice da solo).

(disclaimer: non ho esaminato a fondo il plug-in backstretch ma sembra fare lo stesso di background-size: cover)


5

C'è un buon polyfill per questo: louisremi / background-size-polyfill

Per citare la documentazione:

Carica backgroundsize.min.htc sul tuo sito web, insieme al file .htaccess che invierà il tipo mime richiesto da IE (solo Apache - è integrato in nginx, node e IIS).

Ovunque usi la dimensione dello sfondo nel tuo CSS, aggiungi un riferimento a questo file.

.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);
}

Questo polyfill funziona e basta. dimensione dello sfondo: copertina o contiene in IE8. Nessuna confusione, nessuna confusione.
jimlongo,

questo approccio supporta sia containe cover. Contiene 5,7 KB non molto male perché verrà trasferito in un pacchetto di rete.
SMMousavi,

2

In IE11 Windows 7 questo ha funzionato per me,

background-size: 100% 100%;


0

Ho provato con il seguente script -

.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;
}

Ha funzionato per me!


per quale versione?
Nihiser,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.