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

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

  1. размер изображения фиксирован (60px).
  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;
}

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

10 ответов


добавить

background-size:100%;

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

вы также можете указать точные размеры, т. е.:

background-size: 30px 40px;

здесь: JSFiddle


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

background-size: cover;

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

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

современный CSS3 (рекомендуется для будущего & prob. лучшее решение)

.selector{
   background-size: cover;
   /* streches 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; :

чтобы добиться этого динамически, вам придется использовать противоположность метода contain alternative (см. ниже) и если вам нужно центрировать обрезанное изображение, Вам понадобится 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 crop like example

эквивалент с помощью CSS3 background-size: contain; :

это может быть немного сложно-размер вашего фона, который переполнит родителя, будет иметь CSS, установленный на 100%, а другой-на авто. практический пример: css streching background as image

.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 для определения соотношений для вас и установить размеры как описанные...


для этого вы можете использовать CSS3 background-size собственность. Напишите так:

#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/


можно добавить:

#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 фон-в размере


С помощью свойства CSS:

background-size: cover;

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

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


чтобы сохранить соотношение сторон, используйте background-size: 100% auto;

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

попробуйте что-то вроде этого:

div {
    background-image: url(../img/picture1.jpg);
    height: 30em;
    background-repeat: no-repeat;
    width: 100%;
    background-position: center;
}