Для этого есть свойство CSS3, а именно background-size
( проверка совместимости ). Хотя можно установить значения длины, обычно это используется со специальными значениями contain
и cover
. В вашем конкретном случае вы должны использовать cover
:
body {
background-image: url(images/background.svg);
background-size: cover; /* <------ */
background-repeat: no-repeat;
background-position: center center; /* optional, center the image */
}
Баклажан для contain
иcover
Извините за плохой каламбур, но я собираюсь использовать снимок дня Бисварупа Гангули для демонстрации. Допустим, это ваш экран, а серая область находится за пределами видимого экрана. Для демонстрации я собираюсь принять соотношение 16x9.
Мы хотим использовать вышеупомянутую картину дня в качестве фона. Однако по какой-то причине мы обрезали изображение до 4х3. Мы могли бы установить для background-size
свойства некоторую фиксированную длину, но мы сосредоточимся на contain
и cover
. Обратите внимание, что я также предполагаю, что мы не искали ширину и / или высоту body
.
contain
contain
Масштабируйте изображение, сохраняя его внутреннее соотношение сторон (если оно есть), до максимального размера, чтобы его ширина и высота могли поместиться в области позиционирования фона.
Это гарантирует, что фоновое изображение всегда полностью содержится в области расположения фона, однако background-color
в этом случае может быть некоторое пустое пространство, заполненное вашим :
cover
cover
Масштабируйте изображение, сохраняя его внутреннее соотношение сторон (если оно есть), до наименьшего размера, чтобы его ширина и высота могли полностью покрывать область позиционирования фона.
Это гарантирует, что фоновое изображение покрывает все. Там не будет никакого видимого background-color
, однако в зависимости от соотношения экрана большая часть вашего изображения может быть обрезана:
Демонстрация с актуальным кодом
div > div {
background-image: url(http://i.stack.imgur.com/r5CAq.jpg);
background-repeat: no-repeat;
background-position: center center;
background-color: #ccc;
border: 1px solid;
width: 20em;
height: 10em;
}
div.contain {
background-size: contain;
}
div.cover {
background-size: cover;
}
/********************************************
Additional styles for the explanation boxes
*********************************************/
div > div {
margin: 0 1ex 1ex 0;
float: left;
}
div + div {
clear: both;
border-top: 1px dashed silver;
padding-top:1ex;
}
div > div::after {
background-color: #000;
color: #fefefe;
margin: 1ex;
padding: 1ex;
opacity: 0.8;
display: block;
width: 10ex;
font-size: 0.7em;
content: attr(class);
}
<div>
<div class="contain"></div>
<p>Note the grey background. The image does not cover the whole region, but it's fully <em>contained</em>.
</p>
</div>
<div>
<div class="cover"></div>
<p>Note the ducks/geese at the bottom of the image. Most of the water is cut, as well as a part of the sky. You don't see the complete image anymore, but neither do you see any background color; the image <em>covers</em> all of the <code><div></code>.</p>
</div>
html, body { height: 100%; }
? Кроме того, кашель .