CSS: Simple Gradients dans Internet Explorer <= 8
Comme je suis sûr que vous le savez tous, Internet Explorer peut gérer simples dégradés. Voici un extrait de Twitter Bootstrap, par exemple:
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
Cependant, j'ai vu des personnes utiliser deux règles CSS (un pour IE < 8 et une pour IE 8), comme suit:
filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#7fbf4d', endColorstr='#63a62f'); /* For Internet Explorer 5.5 - 7 */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#7fbf4d', endColorstr='#63a62f')"; /* For Internet Explorer 8 */
Ma question est, est la deuxième règle vraiment nécessaire? Twitter Bootstrap est assez complet, mais il n'utilise pas du tout "-ms-filter" les règles. Selon cette page, le -ms-filter attribut est une extension de CSS, et peut être utilisé comme un synonyme pour filtre dans IE8 Normes de la mode.
OriginalL'auteur Nick | 2012-04-03
Vous devez vous connecter pour publier un commentaire.
Ma suggestion:
Utilisation CSS3Pie -- http://css3pie.com/
C'est une bibliothèque JavaScript pour IE6, IE7 et IE8 que des correctifs dans le support pour plusieurs CSS3, y compris les gradients.
Oui, vous pouvez utiliser l'horrible IE spécifiques
filter
styles si vous voulez, mais CSS3Pie vous permet d'utiliser les styles CSS pour ces fonctions. Beaucoup plus facile.À fait répondre à votre question directe:
Oui, le
-ms-filter
style est généralement requis. IE8 sera toujours de nous au lieu defilter
, qui est utilisé principalement pour IE6 et IE7. Dans certains cas,filter
marchera avec IE8, mais pas tous, il est donc préférable d'utiliser-ms-filter
pour assurer la compatibilité IE8.[ÉDITÉ]
Pourquoi ont-ils changer? Parce que quand ils ont sorti IE8, Microsoft a fait un gros point d'essayer d'être "conforme aux normes".
Pour un navigateur pour être conforme à la norme, il doit utiliser un fournisseur de préfixe pour toute propriété CSS il prend en charge qui n'est pas la version finale de la norme W3C. En ajoutant le
-ms-
préfixe, Microsoft ont essayé de (tardivement) annuler leur pollution des global CSS de l'espace de noms.En outre, les citations ont été ajoutés, car la vieille
filter
syntaxe sans les guillemets n'était pas valide CSS (principalement en raison du côlon aprèsprogid
), et a causé des problèmes avec certains navigateurs. (J'ai eu un exemple il y a quelques temps avec Firefox 3.6, où il était à la baisse de tous les styles à la suite d'unefilter
style qui a tourné à un élément a pris des siècles pour travailler sur ce qui se passait).Le fait que Microsoft ait conservé la compatibilité descendante avec l'original
filter
syntaxe, était en grande partie une question de pragmatisme. MS ne pouvait pas se permettre de briser tous les sites utilisant l'ancienne syntaxe. Mais il y a une forte implication de Microsoft que les développeurs doivent utiliser à la fois parce qu'ils laisseraient tomber du support pour les anciennesfilter
style dans les prochaines versions de IE. Comme il s'est avéré, ils ont abandonné la prise en charge pour les deuxfilter
et-ms-filer
d'un seul coup, mais les implications donné à la libération de IE8 étaient suffisantes pour qu'il devienne recommandé de prévoir deux syntaxes dans votre feuille de style.Au moment de IE8 a été libéré, le XHTML est la nouvelle saveur du mois, et l'écriture de code qui a validé parfaitement été en haut de la liste pour beaucoup de développeurs. C'était probablement un puissant moteur dans le changement de syntaxe pour inclure les guillemets. À cause de la divagation des deux points, il est impossible d'écrire du CSS qui permet de valider à l'aide de l'ancien
filter
style. À l'aide de la nouvelle-ms-filter
styles au lieu de cela a permis aux gens d'écrire CSS valide. Que de bonnes idées, ce n'est pas vraiment parce que bien sûr, les gens ont dû continuer à utiliser l'ancienne syntaxe de toute façon, mais l'intention était bonne.Il est intéressant de souligner que d'autres propriétaires de styles ont reçu le même traitement. Par exemple, vous pouvez utiliser
-ms-behavior
dans IE8 à la place de la vieillebehavior
style. Personne ne l'utilise. Pourquoi? Je ne sais pas vraiment.Un autre fait intéressant de savoir, c'est que le W3C sont dans le processus de normalisation d'une Propriété CSS
filtre
. Il va faire un emploi tout à fait différent de Microsoftfilter
style, et de travailler de façon totalement différente. Si/quand il est normalisé et les navigateurs commencer à le soutenir, il sera explicite de l'affrontement entre les deux syntaxes.J'ai mis à jour la réponse avec beaucoup plus de détails sur les tenants et aboutissants des -ms-filter.
BTW - Vous avez raison, CSS3Pie peut être lent. Mais les filtres. Aucun d'entre eux sont des que lent, à moins que vous sérieusement sur-utiliser. Et CSS3Pie a un gros avantage de filtres qu'il prend en charge le canal alpha couleurs pour votre gradients de MS filtre du style n'est pas. Votre autre option, bien sûr, est tout simplement à utiliser une couleur unie de repli pour les vieux IE. À moins qu'il totalement les ruines de votre conception de site, ou de votre auditoire a une très forte proportion d'utilisateurs d'internet explorer, il est parfois plus simple de juste, de les laisser à plat des couleurs et les angles du carré.
Merci! Je pense que vous frappez le clou sur la tête avec ce: "les implications donné à la libération de IE8 étaient suffisantes pour qu'il devienne recommandé de prévoir deux syntaxes dans votre feuille de style." Depuis le -ms-filter version ne fonctionne que dans IE8 et IE9, je ne vois pas de raison de le garder. Je vais juste utiliser le filtre version. Merci pour m'aider à venir à cette conclusion!
OriginalL'auteur Spudley
Semble que vous avez répondu à votre propre question. Oui ils sont nécessaires. Microsoft essayer d'obtenir plus en ligne avec les normes signifie que certaines versions d'IE ont leur propre syntaxe légèrement différente des règles de la propriété filter.
Dans IE7 juste
filter:
suivie par laprogid:DXIma...
etc fonctionne. Mais pour IE8+, il est le IE7 de secours, il peut s'utiliser en mode de compatibilité, et la plus appropriée-ms-
préfixé bien pour le filtre, ce qui dénote un fournisseur spécifique d'une propriété css, et sa valeur à l'intérieur de qoutes.Je dois ajouter que le filtre version fonctionne dans IE10 est le mode de compatibilité, mais le -ms-filter version ne fonctionne jamais dans IE10—même en mode de compatibilité.
Microsoft a 2 politiques contraires à l'heure actuelle. La première étant qu'ils veulent être plus conformes aux normes. C'est ce qui fait d'eux d'introduire
-ms-filter
parce que c'est plus ou moins considdered correcte. Ensuite, la deuxième stratégie est de soutenir leur propre plate-forme et des fonctionnalités pour de longs moments, c'est la raison pour laquelle le mode de compatibilité et de toute une gamme de propriétés que de continuer à travailler parce que Microsoft chiffres qu'ils peuvent prédire avec précision ce que quelqu'un a voulu le faire même si c'est ciblé à une ancienne version d'IE. Il est demandé pour la confusion vraiment :sOriginalL'auteur sg3s
Quel mal y aurait-il faire pour le quitter?
Si le navigateur ne comprend pas la ligne de CSS, il suffit de l'ignorer.
Ces deux lignes de CSS sont presque identiques. Je risque une supposition que Microsoft a décidé de changer la syntaxe de la propriété CSS à partir de IE8 à partir de l'utilisation de l' - (trait d'union) préfixe à d'autres navigateurs ont été en utilisant des yonks.
Techniquement, le CSS n'est pas conforme aux normes W3C de toute façon, donc, une autre ligne de propriété CSS ne peut pas faire de mal.
Ce n'est pas la peine d'essayer de comprendre IE dans le meilleur des cas!
Ah oui, et aussi de aperçu de la consommation de IE10, la -ms-filter version n'est plus supportée, donc il semblerait que ce soit uniquement bonne pour IE8 et IE9.
OriginalL'auteur Chris Cannon