2010-10-14 6 views
111

Quelqu'un connaît-il le préfixe du fournisseur pour les dégradés dans IE9 ou sommes-nous toujours supposés utiliser encore leurs filtres propriétaires?Dégradés dans Internet Explorer 9

Ce que j'ai pour les autres navigateurs est:

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

En prime ne sait le préfixe fournisseur d'Opera ainsi?

+0

Même si j'ai sélectionné une réponse - ceci n'est pertinent que pour le moment. Si cela change, quelqu'un peut-il mettre à jour le fil? Très appréciée. – Sniffer

+0

Totalement. Je doute que IE 9 implémente des dégradés maintenant, car c'est en version bêta. –

+4

IE9 ne supporte pas les dégradés mais IE10 le fera. – Catch22

Répondre

43

Vous devez toujours utiliser leurs filtres exclusifs comme la bêta IE9 1.

+9

Bummer! Pas la réponse que je voulais, mais merci quand même. – Sniffer

+2

Selon http://css3please.com, IE10 semble devoir supporter les dégradés CSS, ce qui est une bonne nouvelle ... – Sniffer

+0

css3please.com m'a aidé à trouver une solution à la mienne. Merci – redolent

2

ne suis pas sûr IE9, mais Opera ne semble pas avoir de support gradient encore:

Aucune occurrence de « gradient » sur cette page.

Il y a un article de Robert Nyman sur l'obtention de gradients CSS de travail dans tous les navigateurs qui ne sont pas Opera si:

Je ne sais pas si cela peut être étendu pour utiliser une image comme un repli.

+1

Cela me surprend, car Opera est généralement à la pointe de la mise en œuvre des normes. Merci pour la réponse Paul. – Sniffer

+1

Je ne pense pas que les gradients en aient fait un standard. Si je comprends bien le processus, les nouvelles fonctionnalités CSS ont tendance à être implémentées dans un navigateur, puis éventuellement spécifiées dans une norme. Je crois que l'équipe WebKit a tout d'abord implémenté des dégradés en CSS (à moins que vous ne comptiez Microsoft et leurs trucs 'filter', ce qui n'est pas vraiment considéré comme CSS dans mon livre). Firefox les a maintenant suivis, mais il ne semble pas y avoir encore quelque chose dans une spécification de brouillon CSS W3C: voir http://www.google.co.uk/search?hl=fr&source=hp&q=gradient+site:www. w3.org –

+0

Oh, en passant, vous êtes le bienvenu. –

4

Je comprends que IE9 encore ne sera pas soutenir des gradients CSS. Ce qui est dommage, car cela supporte beaucoup d'autres nouveautés. Vous voudrez peut-être regarder dans CSS3Pie comme un moyen d'obtenir toutes les versions de IE pour prendre en charge diverses fonctionnalités CSS3 (y compris les dégradés, mais aussi border-radius et box-shadow) avec le minimum de tracas.

Je crois que CSS3Pie fonctionne avec IE9 (je l'ai essayé sur les versions préliminaires, mais pas encore sur la version bêta actuelle).

+0

Merci Spudley. J'utilise CSS3Pie sur IE6 à 8, mais j'espérais éviter de l'utiliser sur IE9! J'ai une feuille de style séparée pour chaque IE avec mes styles CSS3Pie dans l'IE8. Tant que les dégradés sont la seule chose qui manque à la CSS3 que j'utilise actuellement, je vais ajouter une autre feuille de style pour IE9 sans utiliser CSS3Pie si je peux m'en sortir. – Sniffer

+0

Je n'ai même pas vu ce post, mon mauvais. Juste a écrit une réponse et a voté pour le supprimer avec la même information. Note: Méfiez-vous des problèmes connus: http://css3pie.com/documentation/known-issues/ – NateDSaint

6

Opera commencera bientôt à avoir des versions disponibles avec le support de dégradé, ainsi que d'autres fonctionnalités CSS.

Le groupe de travail CSS W3C n'est même pas fini avec CSS 2.1, vous le savez, non? Nous avons l'intention d'être finis très bientôt. CSS3 est modularisé avec précision afin que nous puissions déplacer les modules jusqu'à la mise en œuvre plus rapidement plutôt qu'une spécification entière.

Chaque société de navigation utilise une méthodologie différente de cycle de logiciel, de test, et ainsi de suite. Donc, le processus prend du temps. Je suis sûr que beaucoup, beaucoup de lecteurs savent que si vous utilisez quelque chose dans CSS3, vous faites ce qu'on appelle "l'amélioration progressive" - ​​les navigateurs avec le plus de soutien obtiennent la meilleure expérience. L'autre partie de cela est "dégradation gracieuse", ce qui signifie que l'expérience sera agréable mais peut-être pas la meilleure ou la plus attrayante jusqu'à ce que le navigateur ait implémenté le module, ou des parties du module qui correspondent à ce que vous voulez faire.

Cela crée une situation assez étrange que malheureusement les développeurs frontaux sont extrêmement frustrés par: un timing incohérent sur les implémentations. C'est donc un vrai challenge de part et d'autre - blâmez-vous les sociétés de navigateurs, le W3C, ou pire encore - vous-même (nous savons que nous ne pouvons pas tout savoir!) Ceux d'entre nous qui travaillent pour un navigateur et un groupe W3C Les membres se reprochent-ils? Toi?

Bien sûr que non. C'est toujours un jeu d'équilibre, et pour l'instant, nous n'avons pas encore compris en quoi consiste ce point d'équilibre. C'est la joie de travailler dans la technologie évolutive :)

46

La meilleure solution multi-navigateur est

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

IE9 manque actuellement de support de gradient de CSS3. Cependant, voici une bonne solution de contournement utilisant PHP pour renvoyer un dégradé SVG (linéaire vertical) à la place, ce qui nous permet de conserver notre design dans nos feuilles de style.

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

Il suffit de télécharger sur votre serveur et appeler l'URL comme ceci:

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

Ceci peut être utilisé en conjonction avec vos gradients CSS3 comme ceci:

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

Si vous avez besoin Pour cibler ci-dessous IE9, vous pouvez toujours utiliser l'ancienne méthode propriétaire de «filtre»:

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

Bien sûr, vous pouvez modifier le code PHP pour ajouter plus d'arrêts sur le dégradé, ou le rendre plus sophistiqué (dégradés radiaux, transparence, etc.) mais cela est idéal pour les dégradés linéaires simples (verticaux).

+1

truc cool; ça fonctionne vraiment! –

+0

Solution élégante. FYI: Je viens de confirmer que SVG est _not_ téléchargé pour les navigateurs supportant 'linear-gradient'. –

+0

Je me demande s'il existe un moyen de mettre en cache ces fichiers svg une fois qu'ils ont été créés. –

57

On dirait que je suis un peu en retard à la fête, mais voici un exemple pour certains des navigateurs principaux:

/* 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%); 

Source: http://ie.microsoft.com/testdrive/Graphics/CSSGradientBackgroundMaker/Default.html

Note: tous ces navigateurs prennent en charge également rgb/rgba à la place de la notation hexadécimale.

+10

Je ne considère pas encore IE10 comme un navigateur majeur. –

+3

@DavidMurdoch c'est techniquement vrai, mais cela n'a pas de sens de ne pas ajouter l'extension propriétaire à votre CSS, puisque nous savons ce que ce sera. Après tout, IE10 est destiné à devenir un navigateur majeur. – thepeer

+33

Cela ne répond pas à la question du tout ... downview – BentOnCoding

11

Le code que j'utilise pour tous les gradients de navigateur:

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; 

Vous devez spécifier une hauteur ou zoom: 1 à appliquer hasLayout à l'élément pour que cela fonctionne dans IE.


Mise à jour:

Voici une version pour vous tous les utilisateurs moins là MOINS 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; 
} 
+0

En tant qu'utilisateur MOINS, je cherchais un moyen de faire fonctionner les dégradés dans IE9.J'ai trouvé un article de blog détaillant comment générer le fichier SVG: http://blog.philipbrown.id.au/2012/09/base64-encoded-svg-gradient-backgrounds-in-less/ –