Як змусити фоновий розмір працювати в IE?


188

Чи є відомий спосіб змусити CSS-стиль background-sizeпрацювати в IE?


1
Який ефект ви намагаєтеся отримати?
ZippyV

@ZippV У мене є div, який становить близько 250 пікселів. але фонове зображення шириною 300 пікселів. Я хочу, щоб фонове зображення повністю вписувалося (розмір фону: 100%), щоб воно не відсікалося. Потім :hoverя хочу, щоб розмір фону змінився на повну ширину 300 пікселів (розмір фону: авто), щоб створити ілюзію масштабування
JD Isaacks

1
Ви можете досягти такого ж ефекту, використовуючи тег img. Якщо вам потрібно щось над цим, скористайтеся z-індексом.
ZippyV

1
@John подумайте про зміну прийнятої відповіді, якщо вирішення Дана спрацювало на вас!
Pekka

@ZippyV Тег IMG іноді має непотрібні побічні ефекти, наприклад, його можна вибрати або клацнути правою кнопкою миші. Це іноді добре, іноді ні.
петерх

Відповіді:


312

Трохи пізно, але це також може бути корисним. Існує IE-фільтр для IE 5.5+, який ви можете застосувати:

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

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

Однак це масштабує все зображення для розміщення у виділеній області, тому, якщо ви використовуєте спрайт, це може спричинити проблеми.

Специфікація: AlphaImageLoader Filter @microsoft


12
Цікаво, чому MS не просто реалізували цю функціональність за допомогою CSS. Дуже дякую!
Мартін Андерссон

2
Які версії IE підтримують це, будь ласка?
ᆼ ᆺ ᆼ

8
Якщо ви використовуєте посилання та кнопки всередині елемента, який ми це визначили, ці посилання та кнопки не працюватимуть. Хтось знає метод виправити це?
rubyprince

2
Мені довелося додати position: relative; z-index: 999для введення, a, кнопку всередині таких
divs

10
Метод масштабу не підтримує співвідношення. Тому найкраще, щоб ваш елемент мав таке ж співвідношення, як ваше зображення.
Ів Ван Брукховен

45

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


12
Відповідно до документації jquery.backgroundSize.js, плагін застарілий, і вони замість цього рекомендують background-size-polyfill .
VOIDHand

Оновлена ​​версія не працює 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 відображати фонове зображення вдвічі - один зі зменшеними розмірами, а другий - великим не розміром фоном.
арекк

ie7: Виглядає нормально, але більше не може натискати на посилання. (Чому ie7? Веб-сайти Govt дуже повільно оновлюються)
Роббі Меттьюз

5

Навіть пізніше, але це також може бути корисним. Є плагін jQuery-backstretch, який ви можете використовувати як поліфактор для фонового розміру: cover. Я думаю, що це повинно бути можливо (і досить просто) схопити властивість css-background-url за допомогою jQuery і подати його в плагін jQuery-backstretch. Доброю практикою було б перевірити підтримку фонового розміру за допомогою модернізатора та використовувати цей плагін як резервний.

Бекстретч-плагін був згаданий на SO тут .Готель JQuery-Бекстретч-плагін-сайт тут .

Аналогічним чином ви можете зробити jQuery-плагін або скрипт, який робить розмір фону у вашій ситуації (розмір фону: 100%) та в IE8-. Тож, щоб відповісти на ваше запитання: Так, є спосіб, але atm немає рішення для підключення та програвання (тобто ви повинні зробити кодування самостійно).

(відмова від відповідальності: я не вивчив плагін backstretch ретельно, але, схоже, це робиться так само, як і розмір фону: cover)


5

Для цього є хороший поліфайл : louisremi / background-size-polyfill

Для цитування документації:

Завантажте backgroundsize.min.htc на свій веб-сайт разом з .htaccess, який надсилатиме потрібний для mE тип mime (лише Apache - він вбудований у nginx, вузол та IIS).

Скрізь, де ви використовуєте розмір фону у своєму 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);
}

Цей поліфіл просто працює. фоновий розмір: обкладинка або вміст у IE8. Ні мус, ні суєти.
jimlongo

цей підхід підтримує containі cover. Він містить 5,7 КБ не дуже погано, тому що він передаватиметься в одному мережевому пакеті.
SMMousavi


0

Ви можете використовувати цей файл ( https://github.com/louisremi/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;
}

Це працювало для мене!


для якої версії?
нихізер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.