Градиенты в Internet Explorer 9

Кто-нибудь знает префикс поставщика для градиентов в 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?

10 ответов

Решение

Вы все еще должны использовать их фирменные фильтры начиная с IE9 beta 1.

Похоже, я немного опоздал на вечеринку, но вот пример для некоторых лучших браузеров:

/* 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 вместо шестнадцатеричной записи.

Лучшее кросс-браузерное решение

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*/ 

В 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>

Просто загрузите его на свой сервер и назовите URL следующим образом:

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, чтобы добавить больше градиентов или сделать его более сложным (радиальные градиенты, прозрачность и т. Д.), Но это отлично подходит для тех простых (вертикальных) линейных градиентов.

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

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.


Обновить:

Вот версия LESS Mixin (CSS) для всех пользователей LESS:

.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;
}

Вскоре в Opera появятся сборки с поддержкой градиента, а также другие функции CSS.

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

В каждой браузерной компании используются разные методологии программного цикла, тестирования и так далее. Так что процесс требует времени.

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

Это создает довольно странную ситуацию, к которой, к сожалению, интерфейсные разработчики крайне разочарованы: непоследовательная синхронизация реализаций. Так что это реальная проблема с обеих сторон - вы обвиняете компании-браузеры, W3C или еще хуже - самих себя (боже мой, мы не можем знать всего этого!). Те из нас, кто работает в браузерной компании и группе W3C Члены винят себя? Вы?

Конечно, нет. Это всегда игра баланса, и до сих пор мы еще не поняли, где находится эта точка баланса. Это радость работы в эволюционных технологиях:)

Я понимаю, что IE9 по-прежнему не будет поддерживать CSS-градиенты. Это позор, потому что он поддерживает множество других замечательных новинок.

Возможно, вы захотите взглянуть на CSS3Pie как на способ заставить все версии IE поддерживать различные функции CSS3 (включая градиенты, а также border-radius и box-shadow) с минимумом суеты.

Я считаю, что CSS3Pie работает с IE9 (я пробовал его в предварительных версиях, но еще не в текущей бета-версии).

Начиная с версии 11, Opera поддерживает линейные градиенты с префиксом -o-vendor. Крис Миллс написал об этом статью в Dev.Opera: http://dev.opera.com/articles/view/css3-linear-gradients/

Радиальные градиенты все еще находятся в разработке (как в спецификации, так и в Opera).

Не уверен насчет IE9, но Opera пока не поддерживает градиент:

Нет появления "градиента" на этой странице.

Есть отличная статья Роберта Наймана о том, как заставить CSS-градиенты работать во всех браузерах, которые не являются Opera:

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

Используйте генератор градиента - и все будет идеально;) http://www.colorzilla.com/gradient-editor/

Другие вопросы по тегам