Как мне заставить фоновый размер работать в IE?

188

Есть ли какой-нибудь известный способ заставить стиль CSS background-sizeработать в IE?

JD Исаакс
источник
1
Какой эффект вы пытаетесь получить?
ZippyV
@ZippV У меня есть div, который составляет около 250 пикселей в ширину. но фоновое изображение имеет ширину 300 пикселей. Я хочу, чтобы фоновое изображение полностью поместилось (background-size: 100%), чтобы оно не обрезалось. Затем :hoverя хочу, чтобы размер фона изменился на полную ширину 300 пикселей (background-size: auto), чтобы создать иллюзию масштабирования
JD Isaacks
1
Вы можете достичь того же эффекта, используя тег img. Если вам что-то нужно, используйте z-index.
ZippyV
1
@ Джон подумайте об изменении принятого ответа, если обходной путь Дэна сработал для вас!
Пекка
@ZippyV У тега IMG иногда возникают ненужные побочные эффекты, например, его можно выбрать или щелкнуть правой кнопкой мыши. Это иногда хорошо, иногда нет.
Петер - Восстановить Монику

Ответы:

312

Немного поздно, но это также может быть полезно. Для IE 5.5+ есть фильтр IE, который вы можете применить:

filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(
src='images/logo.gif',
sizingMethod='scale');

-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(
src='images/logo.gif',
sizingMethod='scale')";

Однако это масштабирует все изображение, чтобы оно поместилось в выделенной области, поэтому, если вы используете спрайт, это может вызвать проблемы.

Спецификация: фильтр AlphaImageLoader @microsoft

Дэн
источник
12
Интересно, почему MS не просто реализовала эту функциональность, используя CSS. Большое спасибо!
Мартин Андерссон
2
Какие версии IE поддерживают это, пожалуйста?
ᆼ ᆺ ᆼ
8
Если вы используете ссылки и кнопки внутри элемента, который мы определили, эти ссылки и кнопки не будут работать. Кто-нибудь знает способ исправить это?
rubyprince
2
Мне пришлось добавить position: relative; z-index: 999для ввода, кнопку, внутри таких
divs
10
Однако метод масштабирования не сохраняет соотношение. Поэтому лучше, чтобы у вашего элемента было такое же соотношение, как и у вашего изображения.
Ив Ван Бройховен
45

Я создал jquery.backgroundSize.js : 1.5K плагин jquery, который можно использовать как запасной вариант IE8 для значений «cover» и «содержать». Посмотрите на демо .

Луи-Рэй
источник
12
Согласно документации jquery.backgroundSize.js, плагин устарел, и вместо этого они рекомендуют background-size-polyfill .
VOIDH и
Обновленная версия не работает с background-position: fixed.
Райан Берни
@VOIDHand И фильтр, и полифил не работали для меня, я использовал jquery.backgroundSize для успеха
Крис Марисик
21

Благодаря этому посту, мой полный CSS для кросс-браузерного счастья:

<style>
    .backgroundpic {
        background-image: url('img/home.jpg');
        background-size: cover;
        filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(
        src='img/home.jpg',
        sizingMethod='scale');
    }
</style>

Прошло так много времени с тех пор, как я работал над этим фрагментом кода, но я хотел бы добавить для большей совместимости браузера, я добавил это к своему CSS для большей совместимости браузера:

-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
Скотт Даллас
источник
@ Gaurav123 попробуй-webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover;
honk31
5
это заставляет мой ie8 отображать фоновое изображение дважды - одно с масштабированными размерами, а второе - большой не размерный фон.
arekk
ie7: выглядит хорошо, но больше не может нажимать на ссылки. (Почему ie7? Правительственные сайты очень медленно обновляются)
Робби Мэтьюз
5

Даже позже, но это тоже может быть полезно. Существует плагин jQuery-backstretch-plugin, который вы можете использовать в качестве полизаполнения для background-size: cover. Я предполагаю, что должно быть возможно (и довольно просто) получить свойство css-background-url с помощью jQuery и передать его плагину jQuery-backstretch. Хорошей практикой будет проверка поддержки background-size с помощью modernizr и использование этого плагина в качестве запасного варианта.

Backstretch-плагин был упомянут на SO здесь . JQuery-backstretch-plugin-site находится здесь .

Аналогичным образом вы можете создать плагин или скрипт jQuery, который заставит работать с размером фона в вашей ситуации (background-size: 100%) и в IE8-. Итак, чтобы ответить на ваш вопрос: Да, есть способ, но у него нет решения «включай и работай» (т.е. вы должны сами написать код).

(отказ от ответственности: я не исследовал плагин backstretch-плагина, но, похоже, он работает так же, как background-size: cover)

метатрон
источник
5

Для этого есть хороший polyfill: louisremi / background-size-polyfill

Цитировать документацию:

Загрузите фоныizeize.min.htc на свой веб-сайт вместе с .htaccess, который отправит MIME-тип, необходимый для IE (только для Apache - он встроен в nginx, node и IIS).

Везде, где вы используете background-size в вашем CSS, добавьте ссылку на этот файл.

.selector { 
    background-size: cover;
    /* The url is relative to the document, not to the css file! */
    /* Prefer absolute urls to avoid confusion. */
    -ms-behavior: url(/backgroundsize.min.htc);
}
Дориан
источник
Этот полифилл просто работает. background-size: обложка или содержание в IE8. Нет суеты, нет суеты.
Джимлонго
этот подход поддерживает как containи cover. Он содержит 5.7KB не очень плохо, потому что он будет передавать в один сетевой пакет.
С.М.Мусави
2

В IE11 Windows 7 это работало для меня,

background-size: 100% 100%;
Jana
источник
0

Вы можете использовать этот файл ( https://github.com/louisremi/background-size-polyfill «background-size polyfill») для IE8, который действительно прост в использовании:

.selector {
background-size: cover;
-ms-behavior: url(/backgroundsize.min.htc);
}

источник
0

Я попытался с помощью следующего скрипта -

.selector { 
background-image: url("img/image.jpg");
background-size: 100%;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-repeat: no-repeat;
}

Это сработало для меня!

выпуклость
источник
для какой версии?
nihiser