Як розтягнути фонове зображення, щоб заповнити діл


102

Я хочу встановити фонове зображення на різні диви, але мої проблеми:

  1. Розмір зображення фіксований (60 пікселів).
  2. Різні розміри діва

Як я можу розтягнути фонове зображення, щоб заповнити весь фон діва?

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

Перевірте код тут.

Відповіді:


154

Додайте

background-size:100% 100%;

до вашого css під фоновим зображенням.

Ви також можете вказати точні розміри, тобто:

background-size: 30px 40px;

Тут: JSFiddle


5
Я не підтримую цього. Wt робити?
KarSho

9
це не працює, для кращої відповіді див. нижче: розмір фону: 100% 100%;
chriscatfr

Чому це множення замість розтягування зображення, щоб вмістити контейнер: jsfiddle.net/qdzaw/424
SearchForKnowledge

Вам потрібно додатиbackground-repeat: no-repeat;
Rorrik

1
hendo, ваш JSFiddle більше не працює (мертві посилання на hootsuite), чи можете ви оновити його?
TylerH

71

Ви можете використовувати:

background-size: cover;

Або просто використовуйте велике фонове зображення за допомогою:

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

3
Обкладинка не strech, вона може вирізати картину
drdrej

Я не знаю, що ви намагаєтеся зробити з фоновим малюнком, але background-size: cover; background-position: centerзаповнить фон divбез розтягування зображення
Ouadie

1
Відмінно підходить для фотографій, де розтягнення може деформувати зображення!
Штійн Ван Баел

45

Сучасний CSS3 (рекомендується в майбутньому і, мабуть, найкраще рішення)

.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. */
}

Макс. розтягнення без обрізання або деформації (може не заповнити фон) : background-size: contain;
примусовий абсолютний розтягнення (може спричинити деформацію, але не обрізати) : background-size: 100% 100%;

"Старий" CSS "завжди працює" спосіб

Абсолютне позиціонування зображення як першої дитини (відносно розташованого) батька та розтягування його на батьківський розмір.

HTML

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

Еквівалент CSS3 background-size: cover;:

Щоб досягти цього динамічно, вам доведеться використати протилежний методу містять альтернативу (див. Нижче), і якщо вам потрібно центрувати вирізане зображення, вам потрібен JavaScript, щоб зробити це динамічно - наприклад, використовуючи jQuery:

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

Практичний приклад:
css обрізати як приклад

Еквівалент CSS3 background-size: contain;:

Це може бути дещо складним - розмір вашого фону, який переповнюватиме батьків, матиме CSS, встановлений на 100%, а інший - для автоматичного. Практичний приклад: css розтягування фону як зображення

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

Еквівалент CSS3 background-size: 100% 100%;:

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

PS: Щоб зробити еквіваленти обкладинки / містити "старим" способом повністю динамічно (так що вам не доведеться піклуватися про переливи / співвідношення), вам доведеться використовувати javascript для виявлення для вас співвідношень і встановлення розмірів, як описано. ..


2
Шлях більш повна відповідь, ніж інша відповідь "Обкладинка". На жаль, він застряг тут, внизу…
BillyNair

24

Для цього ви можете використовувати background-sizeвластивість CSS3 . Напишіть так:

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

Перевірте це: http://jsfiddle.net/qdzaw/1/


1
Я не підтримую цього. Wt робити?
KarSho

4
Для IE використовуйте тег IMG, дайте абсолютне положення з висотою та шириною 100%.
сн.

20

Ви можете додати:

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

Більше про це ви можете прочитати тут: css3 background-size


3
Набагато краще, ніж прийнята відповідь, з огляду на це видно, що розмір фону приймає 2 значення для ширини та висоти.
krb686

фоновий розмір - css3 і підтримується не у всіх браузерах
Махді Джазіні


1

використовуючи властивість css:

background-size: cover;

фоновий розмір - css3 і підтримується не у всіх браузерах
Махді Джазіні

1

Використання: розмір фону: 100% 100%; Щоб фонове зображення підходило до розміру div.


Це те, що я шукав - розтягнути, щоб відповідати без огляду на оригінальне співвідношення сторін. Дякую.
день

0

Щоб зберегти співвідношення сторін, використовуйте background-size: 100% auto;

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

0

Спробуйте щось подібне:

div {
    background-image: url(../img/picture1.jpg);
    height: 30em;
    background-repeat: no-repeat;
    width: 100%;
    background-position: center;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.