Как растянуть фоновое изображение, чтобы покрыть весь HTML-элемент?


89

Я пытаюсь получить фоновое изображение элемента HTML (body, div и т. Д.), Чтобы растянуть его по всей ширине и высоте.

Не повезло. Возможно ли это вообще или мне нужно сделать это каким-то другим способом, кроме фонового изображения?

Мой текущий css:

body {
    background-position: left top;
    background-image: url(_images/home.jpg);
    background-repeat: no-repeat;
}

Заранее спасибо.

Изменить: я не заинтересован в сохранении CSS в предложении Габриэля, поэтому вместо этого я меняю макет страницы. Но это кажется лучшим ответом, поэтому я отмечаю его как таковой.


Конечно, вы можете использовать JavaScript, чтобы делать это динамически, но это, вероятно, будет хуже, чем хаки CSS, предложенные ссылкой gabriel1836.
Джейсон Бантинг,

Чтобы сохранить соотношение сторон изображения, вы должны использовать "background-size: cover;" или "размер фона: содержать;". Я создал полифилл, который реализует эти значения в IE8: github.com/louisremi/background-size-polyfill
Луи-Реми,

Ответы:


194
<style>
    { margin: 0; padding: 0; }

    html { 
        background: url('images/yourimage.jpg') no-repeat center center fixed; 
        -webkit-background-size: cover;
        -moz-background-size: cover;
        -o-background-size: cover;
        background-size: cover;
    }
</style>

Это также работает как теги стиля в элементах html или в файлах css.
Натан

2
это лучшее решение на свете.
AFD

1
В чем разница между покрытием и 100% 100%?
Pacerier

4
100% 100% не сохраняет соотношение сторон исходного изображения. 'cover' масштабирует изображение, сохраняя его внутреннее соотношение сторон (если оно есть), до наименьшего размера, так что его ширина и высота могут полностью покрывать область позиционирования фона. Вы также можете использовать «содержать» для масштабирования изображения, сохраняя при этом его внутреннее соотношение сторон (если оно есть) до максимального размера, чтобы и его ширина, и его высота могли уместиться в области позиционирования фона.
Mike737

"-webkit-background-size: cover;" не является допустимым свойством CSS3.
VoidKing


8

Короче можно попробовать это ....

<div data-role="page" style="background:url('backgrnd.png'); background-repeat: no-repeat; background-size: 100% 100%;" >

Где я использовал несколько css и js ...

<link rel="stylesheet" href="css/jquery.mobile-1.0.1.min.css" />
<script src="js/jquery-1.7.1.min.js"></script>
<script src="js/jquery.mobile-1.0.1.min.js"></script>

И у меня все работает нормально.


Для тех, кто НЕ хочет сохранять соотношение сторон!
BillyNair

6

Не уверен, что можно растянуть фоновое изображение. Если вы обнаружите, что это невозможно или ненадежно во всех ваших целевых браузерах, вы можете попробовать использовать растянутый тег img с меньшим z-индексом и абсолютной позицией, чтобы другой контент отображался поверх него.

Дайте нам знать, что вы в итоге делаете.

Изменить: я предложил в основном то, что указано в ссылке Габриэля. Так что попробуйте :)


1
Я видел эту технику в действии как минимум десять лет назад. Я не могу представить, что это все равно не сработает.
век

5

Чтобы расширить ответ @PhiLho, вы можете центрировать очень большое изображение (или изображение любого размера) на странице с помощью:

{ 
background-image: url(_images/home.jpg);
background-repeat:no-repeat;
background-position:center; 
}

Или вы можете использовать изображение меньшего размера с цветом фона, который соответствует фону изображения (если это сплошной цвет). Это может соответствовать вашим целям, а может и не соответствовать.

{ 
background-color: green;
background-image: url(_images/home.jpg);
background-repeat:no-repeat;
background-position:center; 
}

4

Если вам нужно растянуть фоновое изображение при изменении размера экрана, и вам не нужна совместимость со старыми версиями браузера, это сработает:

body {
    background-image: url('../images/image.jpg');
    background-repeat: no-repeat;
    background-size: cover;
}

3

Если у вас большое альбомное изображение, в этом примере изменяется размер фона в портретном режиме, так что он отображается сверху, оставляя пустым внизу:

html, body {
    margin: 0;
    padding: 0;
    min-height: 100%;
}

body {
    background-image: url('myimage.jpg');
    background-position-x: center;
    background-position-y: bottom;
    background-repeat: no-repeat;
    background-attachment: scroll;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
}

@media screen and (orientation:portrait) {
    body {
        background-position-y: top;
        -webkit-background-size: contain;
        -moz-background-size: contain;
        -o-background-size: contain;
        background-size: contain;
    }
}

3

Следующий код, который я использую в основном для достижения заданного эффекта:

body {
    background-image: url('../images/bg.jpg');
    background-repeat: no-repeat;
    background-size: 100%;
}

3
Вам нужноbackground-size: 100% 100%;
Sablefoste

Я не знаю, какой браузер вы используете, но то, что я сказал, у меня работает в Firefox и Chrome.
Бадар


0

Вы не можете использовать чистый CSS. Лучше всего иметь изображение, покрывающее всю страницу за всеми другими компонентами (похоже, это решение, приведенное выше). В любом случае, скорее всего, это все равно будет выглядеть ужасно. Я бы попробовал либо изображение, достаточно большое, чтобы покрыть большинство разрешений экрана (скажем, до 1600х1200, выше оно реже), чтобы ограничить ширину страницы, либо просто использовать изображение этой плитки.


0

образ{

background-size: cover;
  background-repeat: no-repeat;
  background-position: center;
  padding: 0 3em 0 3em; 
margin: -1.5em -0.5em -0.5em -1em; 
  width: absolute;
  max-width: 100%; 

2
Добро пожаловать в SO! Чтобы написать лучший ответ, поясните, почему это работает, и покажите код в действии. Вы также можете прочитать о том, как написать хороший ответ .
displacedtexan

0

Просто сделайте div прямым потомком тела (например, с именем класса bg), охватывающим все остальные элементы тела, и добавьте это в файл CSS:

.bg {
    background-image: url('_images/home.jpg');//Put your appropriate image URL here
    background-size: 100% 100%; //You need to put 100% twice here to stretch width and height
}

Перейдите по этой ссылке: https://www.w3schools.com/css/css_rwd_images.asp Прокрутите вниз до той части, которая гласит:

  1. Если для свойства background-size установлено значение «100% 100%», фоновое изображение будет растягиваться, чтобы покрыть всю область содержимого.

Там он показывает img_flowers.jpg, растягивающийся до размера экрана или браузера, независимо от того, как вы его изменяете.


-1

Меня устраивает

.page-bg {
  background: url("res://background");
  background-position: center center;
  background-repeat: no-repeat;
  background-size: 100% 100%;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.