





Одним словом: нет. Единственный способ растянуть изображение - использовать тег <img>. Вы должны проявить изобретательность.
Раньше так было в 2008 году, когда был написан ответ. Сегодня современные браузеры поддерживают background-size, что решает эту проблему. Помните, что IE8 его не поддерживает.
Не сейчас. Он будет доступен в CSS 3, но пройдет некоторое время, прежде чем он будет реализован в большинстве браузеров.
Отличная статья доступна в A List Apart: Увеличьте размер фона, пожалуйста!
-1 Не думаю, что этот ответ очень актуален ... и не предлагает решения типа любой.
@Potherca, этот ответ был правильным в то время (почти 3 года назад).
Дата указана не зря. Его следует сохранить для исторических справок. Вы просматриваете все старые ответы на сайте и голосуете против них? ответ по-прежнему верен, даже если с тех пор была добавлена дополнительная информация. Также обратите внимание, что в других ответах здесь в основном указано то же самое (а некоторые действительно неверны - они заявляют, что это невозможно). У меня такое ощущение, что вы выбрали этот вариант, потому что он набрал несколько голосов.
Нет, я выбрал этот, потому что все, что он говорит: «Компьютер говорит нет», хотя даже в 2008 году было несколько решений этой проблемы ;-)
Дайте определение «растянуть и масштабировать» ...
Если у вас есть растровый формат, обычно не очень хорошо (с графической точки зрения) растягивать его и растягивать. Вы можете использовать повторяющиеся узоры, чтобы создать иллюзию того же эффекта. Например, если у вас есть градиент, который становится светлее в нижней части страницы, вы должны использовать графику шириной в один пиксель и такой же высотой, что и ваш контейнер (или, желательно, большего размера для учета масштабирования), а затем расположить его по размеру страница. Точно так же, если градиент проходил по странице, он был бы на один пиксель выше и шире, чем ваш контейнер, и повторялся бы вниз по странице.
Обычно, чтобы создать иллюзию растягивания, заполняющего контейнер, когда он растет или сжимается, вы делаете изображение больше, чем контейнер. Любое перекрытие не будет отображаться за пределами контейнера.
Если вам нужен эффект, основанный на чем-то вроде коробки с изогнутыми краями, вы должны приклеить левую сторону коробки к левой стороне контейнера с достаточным перекрытием, чтобы (в пределах разумного) независимо от размера контейнера, он никогда не выходит за пределы фона, а затем вы накладываете изображение правой стороны коробки с изогнутыми краями и размещаете его справа от контейнера. Таким образом, по мере того, как контейнер сжимается или растет, эффект изогнутого прямоугольника, кажется, сжимается или растет вместе с ним - на самом деле это не так, но он создает иллюзию того, что происходит.
Что касается того, чтобы изображение действительно уменьшалось и увеличивалось вместе с контейнером, вам нужно будет использовать некоторые уловки наслоения, чтобы изображение выглядело как фон, и некоторый javascript, чтобы изменить его размер вместе с контейнером. В настоящее время нет способа сделать это с помощью CSS ...
Боюсь, что если вы используете векторную графику, вы выходите за рамки моей компетенции.
Растянуть = изменить размеры x и y независимо, изменяя соотношение сторон изображения, Scale = изменить размеры x и y пропорционально, сохраняя соотношение сторон изображения.
@SoftwareMonkey: В качестве фона, тогда нет, вы не можете изменить растяжение и масштаб в истинном смысле терминов в чистом CSS. Вы должны использовать различные приемы CSS, чтобы создать иллюзию того, что происходит именно так, как я описал.
Масштабирование изображения с помощью CSS не совсем возможно, но подобный эффект может быть достигнут следующим образом.
Используйте эту разметку:
<div id = "background">
<img src = "img.jpg" class = "stretch" alt = "" />
</div>
со следующим CSS:
#background {
width: 100%;
height: 100%;
position: absolute;
left: 0px;
top: 0px;
z-index: 0;
}
.stretch {
width:100%;
height:100%;
}
и все должно быть готово!
Чтобы масштабировать изображение до "без полей" и сохранить соотношение сторон, вы можете сделать это вместо этого:
.stretch { min-width:100%; min-height:100%; width:auto; height:auto; }
Получается неплохо! Однако при обрезке одного измерения оно будет обрезано только с одной стороны изображения, а не равномерно по обеим сторонам (и по центру). Я тестировал его в Firefox, Webkit и Internet Explorer 8.
Это работает хорошо ... но искал что-то более надежное (вероятно, с javascript), которое также центрировало бы его и настраивало в зависимости от того, было ли изображение альбомным или портретным. Если у кого-то есть решение в этом ключе, хотелось бы получить ссылку ... спасибо!
В случае, если кому-то еще интересно, это вроде работало хорошо: buildinternet.com/project/supersized
Горизонтальное центрирование может быть выполнено с помощью margin: 0 auto на .stretch. При установке только width или height соотношение сторон остается прежним. Попробуйте использовать max-width и max-height, чтобы ограничить коэффициент масштабирования ...
Это не работает для меня в ie8 / ie9, но работает в ie6 / ie7 (и, конечно, во всех других браузерах). В ie8 / ie9 изображение отображается только на 3/4 div. У кого-нибудь есть такая же проблема?
Для ie7 установка .stretch { height: auto } работала в моем случае, а height:100% - нет. В противном случае отличное решение, спасибо!
Недостаток SO: нет возможности отмечать ответы, которые больше не являются правильными, что приводит к тому, что такие люди, как @Ullas, сбиваются с пути. Фон легко масштабировать во всех современных браузерах. developer.mozilla.org/en/CSS/background-size
На самом деле это не недостаток SO, если первоначальный автор ответа решает не отзывать / улучшать свой ответ, когда он больше не применяется. Вместо этого модератор или лицо с соответствующими привилегиями (и доверенное лицо) должны предпринять такие действия. Не стесняйтесь обсуждать этот вопрос на сайте meta.stackoverflow.com, поскольку я не буду здесь обсуждать этот вопрос.
Жалко, если допустим, например, компиляция chms для старых и новых машин. Но чтобы получить этот а также, принятый ответ, работающий как для чего-то вроде @СМИ, так и для jqery, вообще не будет выглядеть очень красиво!
Дополнительным советом для читерства SolidSmile является масштабирование (пропорциональное изменение размера) путем установки ширины и использования авто для высоты.
Бывший:
#background {
width: 500px;
height: auto;
position: absolute;
left: 0px;
top: 0px;
z-index: 0;
}
Вот что я из этого сделал. В классе stretch я просто изменил высоту на auto. Таким образом, ваше фоновое изображение всегда имеет тот же размер, что и ширина экрана, а высота всегда будет иметь правильный размер.
#background {
width: 100%;
height: 100%;
position: absolute;
margin-left: 0px;
margin-top: 0px;
z-index: 0;
}
.stretch {
width:100%;
height:auto;
}
Добавьте строку background-attachment:
#background {
background-attachment:fixed;
width: 100%;
height: 100%;
position: absolute;
margin-left: 0px;
margin-top: 0px;
z-index: 0;
}
.stretch {
width:100%;
height:auto;
}
Используйте атрибут размера фона в CSS3:
.class {
background-image: url(bg.gif);
background-size: 100%;
}
Обновлено:Modernizr поддерживает обнаружение поддержки размера фона. Вы можете использовать обходной путь JavaScript, написанный для работы, но он вам нужен, и загружать его динамически, когда нет поддержки. Это позволит поддерживать код в сопровождении, не прибегая к навязчивым взломам CSS для определенных браузеров.
Лично я использую сценарий, чтобы справиться с этим с помощью jQuery, это адаптация imgsizer. Поскольку в большинстве дизайнов я сейчас использую width% для плавных макетов на разных устройствах, есть небольшая адаптация к одному из циклов (с учетом размеров, которые не всегда 100%):
for (var i = 0; i < images.length; i++) {
var image = images[i],
width = String(image.currentStyle.width);
if (width.indexOf('%') == -1) {
continue;
}
image.origWidth = image.offsetWidth;
image.origHeight = image.offsetHeight;
imgCache.push(image);
c.ieAlpha(image);
image.style.width = width;
}
Обновлено: Вас также может заинтересовать jQuery CSS3 Finaliz [s] e.
Чтобы подчеркнуть, Modernizr НЕ включает поддержку размера фона в браузерах, которые изначально не поддерживают его. Просто для этого есть удобный кроссбраузерный тест. Вы должны подделать его, когда тест вернет false.
Попробуйте статью размер фона. Если вы используете все перечисленное ниже, оно будет работать в большинстве браузеров, кроме Internet Explorer.
.foo {
background-image: url(bg-image.png);
-moz-background-size: 100% 100%;
-o-background-size: 100% 100%;
-webkit-background-size: 100% 100%;
background-size: 100% 100%;
}
Спасибо! Это отличается от "размер фона: обложка"
это растянулось для меня на ipad, но не масштабировалось. спасибо за публикацию.
Это отлично подходит для уменьшения размера фона. Спасибо!
Если фоновое изображение является SVG, также необходимо указать preserveAspectRatio = "none" в SVG. Подробнее об этом здесь. Демо здесь.
вы можете использовать background-size: cover; background-attachment: исправлено; вы можете масштабировать это
В современных браузерах это можно сделать с помощью background-size:
body {
background-image: url(bg.jpg);
background-size: cover;
}
cover означает растягивание изображения по вертикали или горизонтали, чтобы оно никогда не мозаично / не повторялось.
Это будет работать для Safari 3 (или новее), Chrome, Опера 10+, Firefox 3.6+ и Internet Explorer 9 (или новее).
Чтобы он работал с более низкими версиями Internet Explorer, попробуйте эти CSS:
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='.myBackground.jpg', sizingMethod='scale');
-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='myBackground.jpg', sizingMethod='scale')";
Клементу: То, что вы предлагаете для фильтров в предыдущих версиях IE, работает только частично. Он масштабирует ширину изображения нормально, но масштабирование высоты идет не так, потому что не ограничивает его ничем. Чем выше страница, тем выше фоновое изображение .. = (Я пробовал это в IE8. А также, можно ли каким-либо образом использовать эти команды 'cover' и каким-то образом сделать это совместимым с мобильными телефонами, такими как iphone? Я знаю, что есть область просмотра проблема, но можно ли масштабировать область просмотра на весь экран таким образом, чтобы фон масштабировался здесь? Спасибо за ответы!
Специфичные для IE фильтры не являются идеальным решением, поэтому не стесняйтесь использовать IE с альтернативами CSS. Я лично использую «обложку» CSS3 на моем собственном сайте, и она отлично работает на устройствах iOS, просто не забудьте указать ширину устройства.
Чехол не растягивает бг. 100% 100% да.
Это решение лучше всего сработало для меня, когда я не хотел растягивать изображение по горизонтали или вертикали больше, чем его фактическое разрешение. Спасибо..!!
NB. Начиная с Chromium 78.0.3904.97, невозможно масштабировать изображения SVG независимо по каждой оси. Возможно, вам придется увеличить его и преобразовать в растровое изображение.
Хочу отметить, что это равносильно выполнению:
html { width: 100%; height: 100%; }
body { width: 100%; height: 100%; /* Add background image or gradient to stretch here. */}
Используйте свойство CSS 3background-size:
#my_container {
background-size: 100% auto; /* width and height, can be %, px or whatever. */
}
Это доступно для современных браузеров с 2012 года.
Чтобы сохранить соотношение сторон изображения, вы должны использовать "background-size: cover;" или "размер фона: содержать;". Я создал полифилл, который реализует эти значения в IE8: github.com/louisremi/background-size-polyfill
Я знаю, что этому год, но я должен (смеяться) согласиться с частью «приличных браузеров». Проверьте все свои браузеры, но с IE у меня было больше проблем, чем с любым из них.
Мне пришлось настроить background-size: 100% 100%;, чтобы добиться желаемого эффекта, если это кому-то поможет.
@ Луи-Реми Как центрировать в обоих направлениях при использовании "укрытия"?
@ceving добавить background-position:50% 50% - затем он используется в качестве источника.
объяснение cover и containна MDN
guanome спасибо, что решила мою проблему. cover и contain не работали в моем сценарии.
это на самом деле не работает. Вопрос в контейнере наполнять, что означает, что мы хотим, чтобы он растягивался, чтобы он не повторялся. С другой стороны, этот ответ будет повторяться в направлении высоты, если высота не покрывает область. «Растягивать до заполнения» означает растягивать, но вам нужно, чтобы это не повторялось. Правильный ответ - «прикрытие» снизу. На самом деле это решает тот случай, когда этого не происходит.
Еще одно отличное решение для этого - Backstretch Srobbin, который можно применить к телу или любому элементу на странице - http://srobbin.com/jquery-plugins/backstretch/
Ник, мы обычно просим вас указать основные части вашего ответа и предоставить внешнюю ссылку только для более подробной информации - это помогает ответам оставаться полезными в случае разрушения ссылок.
Моя вина. Вообще говоря, вы добавляете обратное растяжение к <head> вашего документа, а затем инициализируете его следующим образом: $ (". Your-element"). Backstretch ("path / to / image.jpg");
Попробуй это
body
{
background: url(http://p1.pichost.me/i/40/1639647.jpg) no-repeat fixed;
background-size: cover;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
}
.style1 {
background: url(images/bg.jpg) no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
Работает в:
Кроме того, вы можете попробовать это для решения IE
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='.myBackground.jpg', sizingMethod='scale');
-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='myBackground.jpg', sizingMethod='scale')";
zoom:1;
Кредит этой статье Криса Койера http://css-tricks.com/perfect-full-page-background-image/
Чем это лучше или отличается от "background-size: cover"?
@PKHunter, я не совсем понимаю, о чем вы говорите. Используется background-size: cover, за исключением префиксов браузера и решения IE.
Используйте свойство border-image : yourimage, чтобы установить изображение и масштабировать его до всей границы экрана или окна.
@Blowsie - Милый. Проверьте дату ответа. За последние 5 лет ландшафт браузеров немного изменился.