Less.js: Les couleurs hexagonales avec opacité s'emmêlent

Créé le 17 juil. 2018  ·  14Commentaires  ·  Source: less/less.js

Mis à jour vers [email protected] après quoi l'opacité des couleurs avec rendu comme

couleur d'arrière-plan : #55555599 ; --> #55555599 99 ; (pas valide)
couleur d'arrière-plan : #5559 ; --> #5559 9; (pas valide)

bug medium priority

Commentaire le plus utile

J'ai mis à jour la fonction color() pour reconnaître #RRGGBBAA ainsi que quelques mises à jour pour conserver les couleurs dans le même espace colorimétrique. Dans le passé, tout était converti en hexadécimal simple (si alpha = 1) ou en rgba() pour la compatibilité du navigateur. Maintenant, nous pouvons garder Moins plus cohérent en préservant les valeurs de couleur telles qu'elles sont utilisées. Les couleurs hexadécimales et les mots-clés étaient déjà sortis tels quels, mais avec mon PR, Less produira hsl() et hsla() tels quels (sauf lors du serrage des valeurs), et même préservera l'espace colorimétrique après la couleur opérations comme darken() ou spin() .

Tous les 14 commentaires

Less a-t-il même pris en charge la notation hexa rgba auparavant?

@rjgotten Pas directement, non. Mais il devrait simplement ignorer (préserver) les valeurs non reconnues. C'est probablement la régression.

@rjgotten @tapsaman Je ne pense pas qu'il Voir les tests dans le PR pour vérification.

Une chose que cela fait est de supprimer les couleurs "invalides" pour une compatibilité future. Ce n'est que lorsque vous essayez d'utiliser une couleur « invalide » dans une opération de couleur qu'elle devrait générer une erreur au moment de l'évaluation. Mais Less in 3.0+ est plus tolérant pour les valeurs dans les propriétés, il semblait donc raisonnable de les supprimer.

Une chose : Less devraient-ils convertir #RRGGBBAA pour les navigateurs incompatibles ? À ce jour, IE/Edge n'est pas pris en charge, et quelques autres navigateurs non plus. Microsoft n'a donné aucune indication sur la mise en œuvre prochaine. Cependant, la raison pour laquelle je l'ai implémenté est qu'il y avait certainement un problème d'analyse dans la fonction d'analyse des couleurs. Il saisissait la chaîne entière et enregistrait la couleur, mais n'avançait pas l'analyseur si la couleur était de 4 ou 8 caractères, c'est pourquoi il répétait les derniers chiffres.

EDIT : ce que j'ai fait, c'est autoriser la conversion par l'auteur au format rgba() via rgba(#55555599) .

Voici une liste de réflexions que j'ai à ce sujet.

  • Je ne suis pas sûr que ce soit le travail de Less d'être conscient de la prise en charge du navigateur.
  • Confondre une fonction Less avec une fonction CSS "semble" dangereux, mais je ne peux pas dire pourquoi.
  • Nous avons déjà la fonction argb() destinée à générer #AARRGGBB .
  • Nous avons également une fonction color() . Prend-il en charge #AARRGGBB , #ARGB ?
  • color: #AA334455; et color: #A345; sont des CSS valides (ou acceptables), même s'il n'y a pas beaucoup de navigateurs qui _comprennent_ cette forme.
  • Je me demande si le casting de rbga() est une pente glissante. rgb() , hsl() et hsla() sont également des fonctions CSS.
  • D'un autre côté, étant donné que Less est un sur-ensemble de CSS, rgba() a beaucoup de sens.

tl;dr : Je pense que ma première impression générale est que nous devrions nous assurer que la fonction color() prend en charge les chaînes ARGB à 8 et 4 chiffres, car cela semble être son objectif de toute façon.

Confondre une fonction Less avec une fonction CSS "semble" dangereux, mais je ne peux pas dire pourquoi.

Ce navire a navigué. rgba() existe en tant que fonction Less depuis longtemps. Mais la raison principale est que vous pouvez passer des couleurs à quelque chose comme lighten() . C'est-à-dire que rgba() doit renvoyer une couleur en interne. Donc, des fonctions comme rgba() _doit_ être des fonctions Less si vous voulez réellement utiliser les fonctions de couleur de Less. (par exemple lighten(rgba(50,50,50,0.5), 50%)) Sinon, il s'agirait simplement d'un appel de fonction inconnu. Nous devons savoir quelle est réellement la couleur afin de manipuler cette couleur.

Je me demande si le casting rbga() est une pente glissante. rgb(), hsl() et hsla() sont également des fonctions CSS.

Ouais je suppose. Mais le casting est la mauvaise façon de penser. Il active également ce formulaire : rgba(#777777, 0.5) , qui est autorisé ou sera autorisé dans les navigateurs. Cela ne l'étend pas à hsla() , c'est vrai, mais l'implémentation interne est beaucoup plus difficile et n'est pas non plus nécessaire si vous avez une méthode qui fonctionne.

Nous avons également une fonction color(). Prend-il en charge #AARRGGBB, #ARGB ?

Non, merci de l'avoir signalé. Je peux ajouter ça. Bien que je sois confus, pourquoi cette fonction existe-t-elle?

Il active également ce formulaire : rgba(#777777, 0.5), qui est autorisé ou sera autorisé dans les navigateurs.

Pour reformuler, cette forme est une couleur valide en CSS : rgba(<Color> [, opacity]) . Il n'y a donc aucune raison de ne pas autoriser cela.

Nous avons déjà la fonction argb() destinée à générer #AARRGGBB .

L'ordre ARGB est spécifiquement utilisé pour les filtres DirectShow hérités dans Internet Explorer.
La syntaxe hexadécimale à 8 ou 4 chiffres dans CSS ressemble à un ordre RGBA.

La prise en charge des deux rend également directement impossible de savoir si un littéral #000000FF représente un bleu entièrement transparent (ARGB) ou un noir entièrement opaque (RVBA).

Mon conseil : abandonnez le support des couleurs ARGB. Vous n'en auriez besoin que pour les navigateurs IE de l'âge de pierre qui sont hors de service depuis longtemps.

Mon conseil : abandonnez le support des couleurs ARGB. Vous n'en auriez besoin que pour les navigateurs IE de l'âge de pierre qui sont hors de service depuis longtemps.

Nous ne testons pas le support sur quoi que ce soit de moins que IE11, c'est donc une bonne idée.

@rjgotten Existe-t-il d'autres fonctions candidates (ou fonctionnalités) pour l'obsolescence ? Je ne comprends toujours pas pourquoi quelqu'un aurait besoin d'écrire une couleur en tant que _string_ dans Less, puis de la convertir en une couleur à l'aide de la fonction color() . On dirait qu'il a été ajouté il y a 4 ans.

Je ne comprends toujours pas pourquoi quelqu'un aurait besoin d'écrire une couleur sous forme de chaîne dans Less, puis de la convertir en une couleur à l'aide de la fonction color().

La seule chose que je puisse imaginer, ce sont des scénarios d'extraction automatisés.
Par exemple, un plugin complexe qui introspecte les images d'arrière-plan SVG et en extrait les définitions de couleurs pour correspondre à l'utilisation des couleurs dans d'autres règles, ou quelque chose comme ça.

Un cas limite assez profond, je pense.

@rjgotten Malheureusement, je n'ai trouvé aucun historique dans les problèmes qui expliquaient d'où il venait.

J'ai mis à jour la fonction color() pour reconnaître #RRGGBBAA ainsi que quelques mises à jour pour conserver les couleurs dans le même espace colorimétrique. Dans le passé, tout était converti en hexadécimal simple (si alpha = 1) ou en rgba() pour la compatibilité du navigateur. Maintenant, nous pouvons garder Moins plus cohérent en préservant les valeurs de couleur telles qu'elles sont utilisées. Les couleurs hexadécimales et les mots-clés étaient déjà sortis tels quels, mais avec mon PR, Less produira hsl() et hsla() tels quels (sauf lors du serrage des valeurs), et même préservera l'espace colorimétrique après la couleur opérations comme darken() ou spin() .

Rattrapage, je suis à bord. La fonction argb() , je pense, répond à tout besoin de l'ancien format. C'est un bon coup.

Cette page vous a été utile?
0 / 5 - 0 notes