Як розтягнути фонове зображення, щоб охопити весь елемент 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;" або "background-size: sadrže;". Я створив поліфіл, який реалізує ці значення в 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% не зберігає пропорції вихідного зображення. "Обкладинка" масштабує зображення, зберігаючи при цьому його власне співвідношення сторін (якщо воно є), до найменшого розміру, щоб і його ширина, і його висота могли повністю покрити область позиціонування фону. Ви також можете використовувати 'вмістити' для масштабування зображення, зберігаючи при цьому його власне співвідношення сторін (якщо таке є), до найбільшого розміру, щоб і його ширина, і його висота могли поміститися всередині зони позиціонування фону.
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. Мати зображення, яке охоплює всю сторінку позаду всіх інших компонентів - це, мабуть, найкращий вибір (схоже, це рішення, наведене вище). У будь-якому випадку, швидше за все, це все одно буде виглядати жахливо. Я хотів би спробувати або зображення, достатньо велике, щоб охопити більшість роздільних здатностей екрана (скажімо, до 1600x1200, над ним менше), обмежити ширину сторінки або просто використати зображення, яке виглядає як плитка.


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! Щоб написати кращу відповідь, додайте міркування, чому це працює, і покажіть код у дії. Ви також можете прочитати про те, як написати хорошу відповідь .
переміщений

0

Просто створіть div, щоб бути прямим дочірнім елементом body (з назвою класу 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. Якщо для властивості розміру фону встановлено значення "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.