Градієнти в Internet Explorer 9


111

Хтось знає префікс постачальника для градієнтів в IE9 або ми все ще повинні використовувати свої фільтри власності?

Що я маю для інших браузерів:

background-image: -moz-linear-gradient(top, #444444, #999999); /* FF3.6 */
background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #444444),color-stop(1, #999999)); /* Saf4+, Chrome */
filter:  progid:DXImageTransform.Microsoft.gradient(startColorStr='#444444', EndColorStr='#999999'); /* IE6,IE7 */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#444444', EndColorStr='#999999')"; /* IE8 */

Як бонус хтось також знає префікс постачальника Opera?


Навіть незважаючи на те, що я вибрав відповідь - це актуально лише на даний момент часу. Якщо це зміниться, може хтось оновити потік? Цінується.
Sniffer

Повністю. Я сумніваюся, що IE 9 зараз реалізує градієнти, як це є в бета-версії.
Пол Д. Уейт

5
IE9 не підтримує градієнти, але IE10 буде.
Catch22

4
IE - це просто жахливий браузер разом, не підтримує вбудовані блоки, значення позицій порушуються без причини, не підтримують градієнти, повільно, як все пекло ... Давайте всі почнемо попереджати користувачів, що їм потрібно припинити використання IE, а не витрачати наші час підтримки субстандартного браузера. Особисто я протягом багатьох років відверто перешкоджаю користувачам IE переглядати будь-які мої сторінки (спрямовуючи їх отримати реальний браузер), і я ніколи не втрачав продаж. Проведіть деякі дослідження, і ви побачите, що IE складає <5% всього інтернет-трафіку та <1% від продажів. Чому ми підтримуємо це?

12
Ден, мені було б цікаво, звідки беруться ваші номери, я не можу знайти жодного джерела, який би сказав, що IE становить <5% трафіку.
Джеймі Тейлор

Відповіді:


44

Вам все одно потрібно використовувати їх власні фільтри, починаючи з IE9 бета-1.


2
За даними css3please.com , IE10 виглядає завдяки підтримці градієнтів CSS, що є хорошою новиною ...
Sniffer

css3please.com допоміг мені знайти рішення. Спасибі
повторне

57

Схоже, я трохи запізнююся на вечірку, але ось приклад для деяких найкращих браузерів:

/* IE10 */ 
background-image: -ms-linear-gradient(top, #444444 0%, #999999 100%);

/* Mozilla Firefox */ 
background-image: -moz-linear-gradient(top, #444444 0%, #999999 100%);

/* Opera */ 
background-image: -o-linear-gradient(top, #444444 0%, #999999 100%);

/* Webkit (Safari/Chrome 10) */ 
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #444444), color-stop(1, #999999));

/* Webkit (Chrome 11+) */ 
background-image: -webkit-linear-gradient(top, #444444 0%, #999999 100%);

/* Proposed W3C Markup */ 
background-image: linear-gradient(top, #444444 0%, #999999 100%);

Джерело: http://ie.microsoft.com/testdrive/Graphics/CSSGradientBackgroundMaker/Default.html

Примітка: усі ці браузери також підтримують rgb / rgba замість шістнадцяткових позначень.


10
Я б ще не вважав IE10 основним браузером.
Девід Мердок

3
@DavidMurdoch це технічно правда, але не має сенсу не додавати власний вигляд у свій CSS, оскільки ми знаємо, що це буде. Зрештою, IE10 судилося стати головним браузером.
thepeer

4
@Robotsushi, хоча він не відповідає на питання для IE9 (вибрана відповідь так, імовірно, саме тому і вибрано), це питання знаходиться на першій сторінці результатів Google для "Internet Explorer css градієнтів", тому немає будь-яка шкода мати щось корисне тут зараз, коли IE10 майже готовий до Windows 7.
Кевін Артур

Останні версії Firefox і Opera підтримують стандарт W3C. (Я тестував на Firefox 19 та Opera 12.14 на Windows 7)
JayVee

2
Оскільки це відповідь на головне для запитання, яке стосується IE9, він повинен додати фільтр: до кінця, щоб він включав підтримку IE9.
Joel Coehoorn

46

Найкраще рішення для крос-браузера

background: #fff;
background: -moz-linear-gradient(#fff, #000);
background: -webkit-linear-gradient(#fff, #000);
background: -o-linear-gradient(#fff, #000);
background: -ms-linear-gradient(#fff, #000);/*For IE10*/
background: linear-gradient(#fff, #000);
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#ffffff', endColorstr='#000000');/*For IE7-8-9*/ 
height: 1%;/*For IE7*/ 

37

В даний час IE9 не має підтримки для градієнта CSS3. Однак ось приємне вирішення способу використання PHP для повернення SVG (вертикального лінійного) градієнта, що дозволяє нам зберегти наш дизайн у наших таблицях стилів.

<?php

$from_stop = isset($_GET['from']) ? $_GET['from'] : '000000';
$to_stop = isset($_GET['to']) ? $_GET['to'] : '000000';

header('Content-type: image/svg+xml; charset=utf-8');

echo '<?xml version="1.0"?>
';

?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%">
    <defs>
        <linearGradient id="linear-gradient" x1="0%" y1="0%" x2="0%" y2="100%">
            <stop offset="0%" stop-color="#<?php echo $from_stop; ?>" stop-opacity="1"/>
            <stop offset="100%" stop-color="#<?php echo $to_stop; ?>" stop-opacity="1"/>
        </linearGradient>
    </defs>
    <rect width="100%" height="100%" fill="url(#linear-gradient)"/>
</svg>

Просто завантажте його на свій сервер і зателефонуйте так:

gradient.php?from=f00&to=00f

Це можна використовувати в поєднанні з вашими градієнтами CSS3 таким чином:

.my-color {
    background-color: #f00;
    background-image: url(gradient.php?from=f00&to=00f);
    background-image: -webkit-gradient(linear, left top, left bottom, from(#f00), to(#00f));
    background-image: -webkit-linear-gradient(top, #f00, #00f);
    background-image: -moz-linear-gradient(top, #f00, #00f);
    background-image: linear-gradient(top, #f00, #00f);
}

Якщо вам потрібно виконати націлювання нижче IE9, ви все одно можете використовувати старий власний метод "filter":

.ie7 .my-color, .ie8 .my-color {
    filter: progid:DXImageTransform.Microsoft.Gradient(startColorStr="#ff0000", endColorStr="#0000ff");
}

Звичайно, ви можете змінити код PHP, щоб додати більше зупинок на градієнті, або зробити його більш складним (радіальні градієнти, прозорість тощо), але це чудово підходить для тих простих (вертикальних) лінійних градієнтів.


Елегантне рішення. FYI: Я щойно підтвердив, що SVG не завантажується для веб-переглядачів linear-gradient.
Джонатан Хрест

Цікаво, чи існує спосіб кешування цих файлів SVG після їх створення.
Майк Корменді

Більш надійним питанням було б з’ясувати, яка ефективність є як для часу, так і для завантаження сервера для запиту кешованого файлу та генерування файлового потоку кожного разу.
Майк Корменді

1
PHP ніколи не повинен мати знань чи допомоги у дизайні вашого інтерфейсу. Оберігайте потреби клієнта у клієнта.
Алекс Уайт

11

Код, який я використовую для всіх градієнтів браузера:

background: #0A284B;
background: -webkit-gradient(linear, left top, left bottom, from(#0A284B), to(#135887));
background: -webkit-linear-gradient(#0A284B, #135887);
background: -moz-linear-gradient(top, #0A284B, #135887);
background: -ms-linear-gradient(#0A284B, #135887);
background: -o-linear-gradient(#0A284B, #135887);
background: linear-gradient(#0A284B, #135887);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0A284B', endColorstr='#135887');
zoom: 1;

Вам потрібно буде вказати висоту або zoom: 1застосувати hasLayoutдо елемента, щоб це працювало в IE.


Оновлення:

Ось менша версія Mixin (CSS) для всіх ваших менших користувачів там:

.gradient(@start, @end) {
    background: mix(@start, @end, 50%);
    filter: ~"progid:DXImageTransform.Microsoft.gradient(startColorStr="@start~", EndColorStr="@end~")";
    background: -webkit-gradient(linear, left top, left bottom, from(@start), to(@end));
    background: -webkit-linear-gradient(@start, @end);
    background: -moz-linear-gradient(top, @start, @end);
    background: -ms-linear-gradient(@start, @end);
    background: -o-linear-gradient(@start, @end);
    background: linear-gradient(@start, @end);
    zoom: 1;
}

Як МЕНШИЙ користувач, я шукав спосіб, щоб градієнти також працювали в IE9. Я знайшов статтю в блозі, де детально розповідається про те, як створити SVG: blog.philipbrown.id.au/2012/09/…
Джеймс Лонг

6

Незабаром Opera почне розробляти доступні з підтримкою градієнта, а також інші функції CSS.

Робоча група W3C CSS ще не закінчила CSS 2.1, ви все це знаєте, правда? Ми маємо намір закінчити зовсім скоро. CSS3 точно модульований, тому ми можемо переміщувати модулі до впровадження швидше, ніж цілу специфікацію.

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

Я впевнений, що багато, багато читачів добре знають, що якщо ви використовуєте що-небудь у CSS3, ви робите те, що називається "прогресивне вдосконалення" - браузери з найбільшою підтримкою отримують найкращий досвід. Інша частина цього - «витончена деградація», що означає, що досвід буде приємним, але, можливо, не найкращим або найпривабливішим, поки цей браузер не реалізує модуль або частини модуля, які стосуються того, що ви хочете зробити.

Це створює досить дивну ситуацію, що, на жаль, передові розробники вкрай засмучуються через: непослідовний термін виконання. Тож справжній виклик з обох сторін - чи звинувачуєте ви в браузерних компаніях, W3C або ще гірше - себе (бог знає, що ми не можемо це все знати!) Робите це ті з нас, хто працює для компанії-браузера та групи W3C члени звинувачують себе? Ти?

Звичайно, ні. Це завжди гра в рівновагу, і поки що ми не як галузь зрозуміли, де насправді ця точка балансу. Ось радість працювати в еволюційних технологіях :)


4

Я розумію, що IE9 все ще не підтримує градієнти CSS. Що прикро, адже це підтримка багатьох інших чудових матеріалів.

Ви можете розглянути CSS3Pie як спосіб отримати всі версії IE для підтримки різних функцій CSS3 (включаючи градієнти, але також межі радіусу та вікна-тіні) з мінімумом суєти.

Я вважаю, що CSS3Pie працює з IE9 (я спробував це на попередніх версіях, але ще не на поточній бета-версії).


Спасибі Спадлі. Я використовую CSS3Pie на IE6 до 8, але я сподівався втекти від використання його на IE9! У мене є окрема таблиця стилів для кожного IE зі своїми стилями CSS3Pie в IE8. Поки градієнти - це єдине, чого не вистачає у CSS3, який я зараз використовую, я додаватиму ще одну таблицю стилів для IE9, не використовуючи CSS3Pie, якщо я можу піти з нею.
Sniffer

Я навіть не бачив цієї публікації, моя погана. Просто написав відповідь і проголосував, щоб видалити її з тією ж інформацією. Примітка. Будьте уважні до відомих проблем: css3pie.com/documentation/known-isissue
NateDSaint

2

Не впевнений у IE9, але, схоже, Opera ще не підтримує градієнта:

На цій сторінці відсутня градієнт.

Є чудова стаття Роберта Німана про те, щоб градієнти CSS працювали у всіх браузерах, однак вони не оперують:

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


1
Це мене дивує, оскільки Opera зазвичай перебуває на передньому плані впровадження стандартів. Дякую за відповідь Пол.
Sniffer

1
Я не думаю, що градієнти ще не перетворили його на стандарт. Як я розумію процес, нові функції CSS, як правило, реалізуються в браузері, а згодом визначаються у стандарті. Я вважаю, що команда WebKit вперше впровадила градієнти в CSS (якщо ви не рахуєте Microsoft та їхні filterречі, які насправді не кваліфікуються як CSS у моїй книзі). Firefox тепер стежив за ними, але, здається, у технічній специфікації W3C CSS ще нічого немає: див. Google.co.uk/…
Пол Д. Уайт


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