CSS фоновое изображение, чтобы соответствовать ширине, высота должна автоматически масштабироваться пропорционально
у меня есть
body {
background: url(images/background.svg);
}
желаемый эффект заключается в том, что это фоновое изображение будет иметь ширину, равную ширине страницы, высота меняется для поддержания пропорции. например, если исходное изображение составляет 100*200 (любые единицы), а тело имеет ширину 600 пикселей, фоновое изображение должно быть 1200px высоким. Высота должна изменяться автоматически при изменении размера окна. Это возможно?
На данный момент Firefox выглядит так, как будто он делает высоту подходящей, а затем регулировка ширины. Возможно, это потому, что высота является самым длинным измерением, и он пытается избежать обрезки? Я хочу чтобы обрезать по вертикали, затем прокрутите: нет горизонтального повтора.
кроме того, Chrome помещает изображение в центр, без повтора, даже когда background-repeat:repeat задается явно, что является значением по умолчанию в любом случае.
10 ответов:
для этого есть свойство 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 */ }Eggsplanation для
containиcoverизвините за плохой каламбур, но я собираюсь использовать картина дня от Biswarup Ganguly для демонстрации. Допустим, что это ваш экран, и серая зона находится за пределами видимого экрана. Для демонстрации я собираюсь принять соотношение 16x9.
мы хотим использовать вышеупомянутую картину дня в качестве фона. Однако мы по какой-то причине обрезали изображение до 4x3. Мы могли бы установить
background-sizeсвойства до некоторой фиксированной длины, но мы сосредоточимся наcontainиcover. Обратите внимание, что я также предполагаю, что мы не искалечили ширину и / или высотуbody.
containcontainмасштабируйте изображение, сохраняя его внутреннее соотношение сторон (если таковое имеется), до наибольшего размера, чтобы его ширина и высота могли поместиться внутри области позиционирования фона.
это гарантирует, что фоновое изображение всегда полностью содержится в области позиционирования фона, однако может быть некоторое пустое пространство, заполненное вашим
background-colorв этом дело:
covercoverмасштабируйте изображение, сохраняя его внутреннее соотношение сторон (если таковое имеется), до наименьшего размера, чтобы его ширина и высота могли полностью покрывать область позиционирования фона.
это гарантирует, что фоновое изображение покрывает все. Там не будет видно
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>
на основе советов от https://developer.mozilla.org/en-US/docs/CSS/background-size я в конечном итоге со следующим рецептом, который работал для меня
body { overflow-y: hidden ! important; overflow-x: hidden ! important; background-color: #f8f8f8; background-image: url('index.png'); /*background-size: cover;*/ background-size: contain; background-repeat: no-repeat; background-position: right; }
Я не уверен, что вы ищете именно, но вы действительно должны проверить эти отличные сообщения в блоге, написанные Крисом Койером из CSS-Tricks:
http://css-tricks.com/how-to-resizeable-background-image/
http://css-tricks.com/perfect-full-page-background-image/
читать описания всех статей и посмотреть, если они то, что вы ищете.
первый отвечает на следующее вопрос:
есть ли способ сделать фоновое изображение изменяемым? Например, заполните фон веб-страницы от края до края изображением, независимо от размера окна браузера. Кроме того, он должен изменить размер больше или меньше по мере изменения окна браузера. Кроме того, убедитесь, что он сохраняет свое соотношение (не растягивается странно). Кроме того, не вызывает полосы прокрутки, просто отключается вертикально, если это необходимо. Кроме того, входит на страницу в качестве встроенного тега.
второй цель post-получить следующее, " фоновое изображение на веб-сайте, которое всегда охватывает все окно браузера. "
надеюсь, что это помогает.
попробуйте это,
element.style { background: rgba(0, 0, 0, 0) url("img/shopping_bgImg.jpg") no-repeat scroll center center / cover; }
просто добавьте эту строку:
.your-class { height: 100vh; }vh-высота видового экрана. Это автоматически масштабируется в соответствии с окном браузера устройства.
регистрация здесь: сделать div 100% высота окна браузера
фоновое изображение не установлено идеально, тогда его css-проблема, поэтому его css-файл изменяется на код ниже
html { background-image: url("example.png"); background-repeat: no-repeat; background-position: 0% 0%; background-size: 100% 100%; }%; background-size: 100% 100%;"
у меня была та же проблема, не удалось изменить размер изображения при настройке размеров браузера.
Плохой Код:
html { background-color: white; background-image: url("example.png"); background-repeat: no-repeat; background-attachment: scroll; background-position: 0% 0%; }
Хороший Код:
html { background-color: white; background-image: url("example.png"); background-repeat: no-repeat; background-attachment: scroll; background-position: 0% 0%; background-size: contain; }ключом здесь является добавление этого элемента ->background-size: contain;
body{ background-image: url(../url/imageName.jpg); background-attachment: fixed; background-size: auto 100%; background-position: center; }
установка размера фона не помогает, для меня сработало следующее решение:
.class { background-image: url(blablabla.jpg); /* Add this */ height: auto; }он в основном обрезает изображение и делает его пригодным,
background-size: contain/coverвсе равно не подошло.



Comments