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