Come allungare l'immagine di sfondo per riempire un div


102

Voglio impostare un'immagine di sfondo per diversi div, ma i miei problemi sono:

  1. La dimensione dell'immagine è fissa (60px).
  2. Variazione delle dimensioni del div

Come posso allungare l'immagine di sfondo per riempire l'intero sfondo del div?

#div2{
  background-image:url(http://s7.static.hootsuite.com/3-0-48/images/themes/classic/streams/message-gradient.png);
  height:180px;
  width:200px;
  border: 1px solid red;
}

Controlla il codice qui.

Risposte:


154

Inserisci

background-size:100% 100%;

al tuo css sotto l'immagine di sfondo.

Puoi anche specificare le dimensioni esatte, ad esempio:

background-size: 30px 40px;

Qui: JSFiddle


5
IE non lo supporta. Cosa fare?
KarSho

9
non funziona, vedi sotto per una risposta migliore: background-size: 100% 100%;
chriscatfr

Perché si moltiplica invece di allungare l'immagine per adattarla al contenitore: jsfiddle.net/qdzaw/424
SearchForKnowledge

È necessario aggiungerebackground-repeat: no-repeat;
Rorrik

1
hendo, il tuo JSFiddle non funziona più (collegamenti morti a hootsuite), puoi aggiornarlo per favore?
TylerH

71

Puoi usare:

background-size: cover;

Oppure usa un'immagine di sfondo grande con:

background: url('../images/teaser.jpg') no-repeat center #eee;

3
la copertina non si allunga, può tagliare l'immagine
drdrej

Non so cosa stai cercando di fare con il tuo sfondo img ma background-size: cover; background-position: centerriempirà lo sfondo divsenza allungare l'immagine
Ouadie

1
Funziona alla grande per le immagini in cui lo stretching deformerebbe l'immagine!
Stijn Van Bael

45

CSS3 moderno (consigliato per il futuro e probabilmente la soluzione migliore)

.selector{
   background-size: cover;
   /* stretches background WITHOUT deformation so it would fill the background space,
      it may crop the image if the image's dimensions are in different ratio,
      than the element dimensions. */
}

Max. allungamento senza ritaglio né deformazione (potrebbe non riempire lo sfondo) : background-size: contain;
forza l'allungamento assoluto (può causare deformazione, ma nessun ritaglio) : background-size: 100% 100%;

"Vecchio" CSS "funziona sempre"

Immagine di posizionamento assoluto come primo figlio del genitore (con posizionamento relativo) e allungamento alla dimensione del genitore.

HTML

<div class="selector">
   <img src="path.extension" alt="alt text">
   <!-- some other content -->
</div>

Equivalente di CSS3 background-size: cover;:

Per ottenere ciò dinamicamente, dovresti usare l' opposto dell'alternativa del metodo di contenimento (vedi sotto) e se hai bisogno di centrare l'immagine ritagliata, avresti bisogno di un JavaScript per farlo dinamicamente, ad esempio usando jQuery:

$('.selector img').each(function(){ 
   $(this).css({ 
      "left": "50%", 
      "margin-left": "-"+( $(this).width()/2 )+"px", 
      "top": "50%", 
      "margin-top": "-"+( $(this).height()/2 )+"px" 
   }); 
});

Esempio pratico:
css ritaglia come esempio

Equivalente di CSS3 background-size: contain;:

Questo può essere un po 'complicato: la dimensione del tuo sfondo che traboccherebbe dal genitore avrà CSS impostato al 100%, l'altra su auto. Esempio pratico: css che allunga lo sfondo come immagine

.selector img{
   position: absolute; top:0; left: 0;
   width: 100%;
   height: auto;
   /* -- OR -- */
   /* width: auto; 
      height: 100%; */
}

Equivalente di CSS3 background-size: 100% 100%;:

.selector img{
   position: absolute; top:0; left: 0;
   width: 100%;
   height: 100%;
}

PS: Per fare gli equivalenti di copertina / contenuto nel modo "vecchio" in modo completamente dinamico (quindi non dovrai preoccuparti di overflow / rapporti) dovresti usare javascript per rilevare i rapporti per te e impostare le dimensioni come descritto. ..


2
Risposta molto più completa rispetto all'altra risposta "Cover". Sfortunatamente, è bloccato quaggiù vicino al fondo ...
BillyNair

24

Per questo puoi usare la background-sizeproprietà CSS3 . Scrivi così:

#div2{
    background-image:url(http://s7.static.hootsuite.com/3-0-48/images/themes/classic/streams/message-gradient.png);
    -moz-background-size:100% 100%;
    -webkit-background-size:100% 100%;
    background-size:100% 100%;
    height:180px;
    width:200px;
    border: 1px solid red;
}

Controlla questo: http://jsfiddle.net/qdzaw/1/


1
IE non lo supporta. Cosa fare?
KarSho

4
Per IE utilizzare il tag IMG dare la posizione assoluta con altezza e larghezza 100%.
sandeep

20

Puoi aggiungere:

#div2{
    background-image:url(http://s7.static.hootsuite.com/3-0-48/images/themes/classic/streams/message-gradient.png);
    background-size: 100% 100%;
    height:180px;
    width:200px;
    border: 1px solid red;
}

Puoi leggere di più al riguardo qui: css3 background-size


3
Molto meglio della risposta accettata, dato che questo mostra che background-size accetta 2 valori per larghezza e altezza.
krb686

background-size è un css3 e non è supportato in tutti i browser
Mahdi Jazini

2
body{
  margin:0;
  background:url('image.png') no-repeat 50% 50% fixed;
  background-size: cover;
}

1

utilizzando la proprietà css:

background-size: cover;

background-size è un css3 e non è supportato in tutti i browser
Mahdi Jazini

1

Usa: dimensione dello sfondo: 100% 100%; Per fare in modo che l'immagine di sfondo si adatti alla dimensione del div.


Questo è quello che stavo cercando: allungare per adattarsi senza riguardo alle proporzioni dell'originale. Grazie.
dgig

0

Per mantenere le proporzioni, usa background-size: 100% auto;

div {
    background-image: url('image.jpg');
    background-size: 100% auto;
    width: 150px;
    height: 300px;
}

0

Prova qualcosa di simile:

div {
    background-image: url(../img/picture1.jpg);
    height: 30em;
    background-repeat: no-repeat;
    width: 100%;
    background-position: center;
}
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.