Как растянуть фоновое изображение, чтобы заполнить div

102

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

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

Как я могу растянуть фоновое изображение, чтобы заполнить весь фон 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;
}

Проверьте код здесь.

Мухаммад Усман
источник

Ответы:

154

Добавить

background-size:100% 100%;

в ваш CSS под фоновым изображением.

Вы также можете указать точные размеры, например:

background-size: 30px 40px;

Здесь: JSFiddle

hendos43
источник
5
IE не поддерживает это. Что делать?
KarSho
9
это не работает, см. лучший ответ ниже: background-size: 100% 100%;
chriscatfr
Почему он умножается, а не растягивает изображение, чтобы оно поместилось в контейнере: jsfiddle.net/qdzaw/424
SearchForKnowledge
Вам нужно добавитьbackground-repeat: no-repeat;
Роррик
1
hendo, ваш JSFiddle больше не работает (мертвые ссылки на hootsuite), не могли бы вы его обновить?
TylerH
71

Ты можешь использовать:

background-size: cover;

Или просто используйте большое фоновое изображение с:

background: url('../images/teaser.jpg') no-repeat center #eee;
Уади
источник
3
обложка не растягивается, она может вырезать картинку
drdrej 02
Я не знаю, что вы пытаетесь сделать со своим фоновым img, но background-size: cover; background-position: centerdiv
заполню
1
Отлично подходит для изображений, где растяжение искажает изображение!
Stijn Van
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: Чтобы сделать эквиваленты cover / contain «старым» способом полностью динамически (так что вам не нужно будет заботиться о переполнениях / соотношениях), вам нужно будет использовать javascript для определения соотношений для вас и установить размеры, как описано. ..

jave.web
источник
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/

Sandeep
источник
1
IE не поддерживает это. Что делать?
KarSho
4
Для IE используйте тег IMG, укажите абсолютную позицию с высотой и шириной 100%.
sandeep
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
Намного лучше, чем принятый ответ, поскольку он показывает, что background-size принимает 2 значения для ширины и высоты.
krb686 01
background-size - это css3 и поддерживается не во всех браузерах
Махди Джазини,
2
body{
  margin:0;
  background:url('image.png') no-repeat 50% 50% fixed;
  background-size: cover;
}
Курсат Туркай
источник
1

используя свойство css:

background-size: cover;
MrBii
источник
background-size - это css3 и поддерживается не во всех браузерах
Махди Джазини,
1

Использование: размер фона: 100% 100%; Чтобы фоновое изображение соответствовало размеру div.

Джаган Редди
источник
Это то, что я искал - растянуть по размеру без учета соотношения сторон оригинала. Спасибо.
dgig
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;
}
Диджей
источник