Less.js: Hex-Farben mit Opazitätsverflechtungen nach oben

Erstellt am 17. Juli 2018  ·  14Kommentare  ·  Quelle: less/less.js

Auf [email protected] aktualisiert, danach die Deckkraft der Farben mit Rendern als

Hintergrundfarbe: #55555599; --> #55555599 99; (ungültig)
Hintergrundfarbe: #5559; --> #5559 9; (ungültig)

bug medium priority

Hilfreichster Kommentar

Ich habe die aktualisierte color() Funktion erkennen #RRGGBBAA sowie tun einige Updates Farben in der gleichen Farbraum zu halten. In der Vergangenheit wurde aus Gründen der Browserkompatibilität alles entweder in einfaches Hex (wenn Alpha = 1) oder rgba() konvertiert. Jetzt können wir Less konsistenter halten, indem wir die verwendeten Farbwerte beibehalten. Hex-Farben und Schlüsselwörter wurden bereits unverändert ausgegeben, aber mit meiner PR gibt Less hsl() und hsla() unverändert aus (außer beim Klemmen von Werten) und behält sogar den Farbraum nach Farbe bei Operationen wie darken() oder spin() .

Alle 14 Kommentare

Hat Less zuvor sogar die Hex-RGBA-Notation unterstützt?

@rjgotten Nicht direkt, nein. Aber es sollte nur unerkannte Werte überspringen (beibehalten). Das ist wahrscheinlich der Rückschritt.

@rjgotten @tapsaman Ich glaube nicht, dass dies eine Regression war, so sehr wie es noch nicht unterstützt wurde. Es waren jedoch nur ein paar Regex-Änderungen und Änderungen am Farbknoten, um diese Form zu unterstützen. Siehe die Tests in der PR zur Überprüfung.

Dadurch werden "ungültige" Farben für zukünftige Kompatibilität entfernt. Erst wenn Sie versuchen, eine "ungültige" Farbe in einer Farboperation zu verwenden, sollte zur Auswertungszeit ein Fehler ausgegeben werden. Aber weniger in 3.0+ verzeiht mehr Werten in Eigenschaften, daher schien es vernünftig, dies zu entfernen.

Eine Sache: Sollte Less #RRGGBBAA für inkompatible Browser konvertieren? Bis heute haben IE/Edge keine Unterstützung, und einige andere Browser auch nicht. Microsoft hat keine Angaben gemacht, die sie in Kürze implementieren werden. Der Grund, warum ich es implementiert habe, ist jedoch, dass es definitiv ein Problem mit dem Parsen in der Farbparsing-Funktion gab. Es wurde die gesamte Zeichenfolge erfasst und in Farbe gespeichert, aber der Parser wurde nicht weitergeführt, wenn die Farbe 4 oder 8 Zeichen betrug, weshalb die letzten Ziffern wiederholt wurden.

BEARBEITEN: Was ich getan habe, war die Konvertierung des Autors in das rgba() Format über rgba(#55555599) .

Hier ist eine Liste von Gedanken, die ich in Bezug darauf habe.

  • Ich bin mir nicht sicher, ob es die Aufgabe von Less ist, sich der Browserunterstützung bewusst zu sein.
  • Das Zusammenführen einer Less-Funktion mit einer CSS-Funktion "fühlt" sich gefährlich an, aber ich kann nicht sagen, warum.
  • Wir _DO_ haben bereits die Funktion argb() , die #AARRGGBB ausgeben soll.
  • Wir haben auch eine color() Funktion. Unterstützt es #AARRGGBB , #ARGB ?
  • color: #AA334455; und color: #A345; sind gültige (oder akzeptable) CSS, auch wenn es nicht viele Browser gibt, die diese Form _verstehen_.
  • Ich frage mich, ob rbga() Casting ein rutschiger Abhang ist. rgb() , hsl() und hsla() sind ebenfalls CSS-Funktionen.
  • Auf der anderen Seite, da Less eine Obermenge von CSS ist, macht rgba() sehr viel Sinn.

tl;dr: Ich denke, mein erster Gesamteindruck ist, dass wir sicherstellen sollten, dass die color() Funktion 8- und 4-stellige ARGB-Strings unterstützt, da dies sowieso ihr Zweck zu sein scheint.

Das Zusammenführen einer Less-Funktion mit einer CSS-Funktion "fühlt" sich gefährlich an, aber ich kann nicht sagen, warum.

Das Schiff segelte. rgba() existiert schon lange als Less-Funktion. Aber der Hauptgrund ist, dass Sie Farben an etwas wie lighten() . Das heißt, rgba() muss intern eine Farbe zurückgeben. Funktionen wie rgba() müssen also Less-Funktionen sein, wenn Sie die Farbfunktionen von Less tatsächlich verwenden möchten. (zB lighten(rgba(50,50,50,0.5), 50%)) Andernfalls wäre es nur ein unbekannter Funktionsaufruf. Wir müssen wissen, was die Farbe tatsächlich ist, um diese Farbe zu manipulieren.

Ich frage mich, ob das Casting von rbga () eine rutschige Steigung ist. rgb(), hsl() und hsla() sind ebenfalls CSS-Funktionen.

Ja ich glaube. Aber Casting ist der falsche Weg, darüber nachzudenken. Es aktiviert auch dieses Formular: rgba(#777777, 0.5) , das in Browsern erlaubt ist oder erlaubt wird. Es erweitert es nicht auf hsla() , das stimmt, aber die interne Implementierung ist viel schwieriger und auch nicht notwendig, wenn Sie eine funktionierende Methode haben.

Wir haben auch eine Funktion color(). Unterstützt es #AARRGGBB, #ARGB?

Nein, danke für den Hinweis. Das kann ich hinzufügen. Obwohl ich verwirrt bin, warum diese Funktion überhaupt existiert?

Es aktiviert auch dieses Formular: rgba(#777777, 0.5), das in Browsern erlaubt ist oder erlaubt wird.

Um es umzuformulieren, dieses Formular ist eine gültige Farbe in CSS: rgba(<Color> [, opacity]) . Es gibt also keinen Grund, dies nicht zuzulassen.

Wir _DO_ haben bereits die Funktion argb() , die #AARRGGBB ausgeben soll.

Die ARGB-Reihenfolge wird speziell für ältere DirectShow-Filter in Internet Explorer verwendet.
Die 8- oder 4-stellige Hex-Syntax in CSS entspricht der RGBA-Reihenfolge.

Die Unterstützung beider macht es auch direkt unmöglich zu wissen, ob ein Literal #000000FF ein vollständig transparentes Blau (ARGB) oder ein vollständig undurchsichtiges Schwarz (RGBA) darstellt.

Mein Rat: Lassen Sie die ARGB-Farbunterstützung fallen. Sie würden es nur für steinzeitliche IE-Browser benötigen, die lange außer Betrieb sind.

Mein Rat: Lassen Sie die ARGB-Farbunterstützung fallen. Sie würden es nur für steinzeitliche IE-Browser benötigen, die lange außer Betrieb sind.

Wir testen keine Unterstützung für weniger als IE11, daher ist dies eine gute Idee.

@rjgotten Gibt es andere Funktionskandidaten (oder Features) für die Deprekation? Ich bin immer noch verwirrt, warum jemand jemals eine Farbe als _string_ in Less schreiben und sie dann mit der Funktion color() in eine Farbe konvertieren muss. Sieht so aus, als wäre es vor 4 Jahren hinzugefügt worden.

Ich bin immer noch verwirrt, warum jemand jemals eine Farbe als String in Less schreiben und sie dann mit der Funktion color() in eine Farbe konvertieren muss.

Das einzige, was ich mir vorstellen kann, sind automatisierte Extraktionsszenarien.
ZB ein komplexes Plugin, das SVG-Hintergrundbilder introspektiert und Farbdefinitionen daraus extrahiert, um die Farbverwendung in anderen Regeln abzugleichen, oder so ähnlich.

Ein ziemlich tiefgreifender Randfall, denke ich.

@rjgotten Leider konnte ich in den Ausgaben keine Historie finden, die erklärt, woher sie stammt.

Ich habe die aktualisierte color() Funktion erkennen #RRGGBBAA sowie tun einige Updates Farben in der gleichen Farbraum zu halten. In der Vergangenheit wurde aus Gründen der Browserkompatibilität alles entweder in einfaches Hex (wenn Alpha = 1) oder rgba() konvertiert. Jetzt können wir Less konsistenter halten, indem wir die verwendeten Farbwerte beibehalten. Hex-Farben und Schlüsselwörter wurden bereits unverändert ausgegeben, aber mit meiner PR gibt Less hsl() und hsla() unverändert aus (außer beim Klemmen von Werten) und behält sogar den Farbraum nach Farbe bei Operationen wie darken() oder spin() .

Aufholen, ich bin an Bord. Die Funktion argb() erfüllt meiner Meinung nach jeden Bedarf für das alte Format. Dies ist ein guter Schritt.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen