Sowohl die Funktionen lighten als auch darken manipulieren die Helligkeit einer Farbe im HSL-Raum, indem sie ihr Helligkeit hinzufügen oder davon subtrahieren. Grundsätzlich sind sie nichts anderes als Aliase für den Parameter $lightness der Funktion adjust-color.
Der Punkt ist, dass diese Funktionen oft nicht das erwartete Ergebnis liefern. Andererseits ist die Funktion mix eine gute Möglichkeit, eine Farbe aufzuhellen oder abzudunkeln, indem man sie mit Weiß oder Schwarz mischt.
Der Vorteil der Verwendung von mix anstelle einer der beiden oben genannten Funktionen ist, dass sie sich bei Verringerung des Anteils der Farbe schrittweise Schwarz (oder Weiß) annähert, während darken und lighten eine Farbe schnell bis zum völligen Schwarz oder Weiß ausblenden.
Um die Mixin-Funktion jedes Mal neu schreiben zu müssen, was nicht nur zeitaufwendig, sondern auch nicht ganz eindeutig ist, können Sie einfach zwei Funktionen tint und shade erstellen (die zufällig auch Teil von Compass sind).
/// Slightly lighten a color
/// @access public
/// @param {Color} $color - color to tint
/// @param {Number} $percentage - percentage of `$color` in returned color
/// @return {Color}
@function tint($color, $percentage) {
@return mix(white, $color, $percentage);
}
/// Slightly darken a color
/// @access public
/// @param {Color} $color - color to shade
/// @param {Number} $percentage - percentage of `$color` in returned color
/// @return {Color}
@function shade($color, $percentage) {
@return mix(black, $color, $percentage);
}
Verwendung
.foo {
color: tint(#BADA55, 42%);
}
.bar {
background-color: shade(#663399, 42%);
}
.foo {
color: #e2efb7;
}
.bar {
background-color: #2a1540;
}
Es sieht so aus, als wären diese Codebeispiele vertauscht. Von Compass
Von Sass Guidelines
Siehst du? Die Farbpositionen sind vertauscht.
Der obige Kommentar ist korrekt. Eine Farbe zu "tönen" bedeutet, sie zu Weiß hin zu bewegen.
tint($color, 90)sollte also erwartet werden, dass es 90 % Richtung Weiß geht, aber die Positionen der Farben in der Funktion müssenmix(white, $color, $perc)sein, damit das funktioniert.Das scheint nicht mit der konventionellen/grafikdesigntechnischen Definition von „Tönung“ übereinzustimmen, bei der ein höherer Prozentsatz tatsächlich eine tiefere Farbe und ein niedrigerer Prozentsatz näher an Weiß bedeutet. Siehe http://graphicdesign.stackexchange.com/a/46187, https://helpx.adobe.com/indesign/using/tints.html, http://www.brandwares.com/RGBTintCalculator.php und http://tintmyride.sharepoint.com/Pages/WindowTintPercentagesandLevels.aspx.
Tönungen, die in Branding-Richtlinien angegeben sind (wie ich sie gerade verwende), funktionieren auch auf die gleiche Weise: Je höher der Prozentsatz, desto weiter weg von Weiß und desto näher an der Vollfarbe ist sie.
Leider scheinen Compass/SASS bereits eine unkonventionelle Definition von Tönung festgelegt zu haben, daher ist es wahrscheinlich besser, dies so zu belassen, wie es ist.
Die Doc-Kommentare sind jedoch immer noch falsch.
Prozent des$colorin der zurückgegebenen Farbe– aber die Funktion verwendet, wie definiert, den Prozentsatz von *Weiß*, nicht von$color.Gut! Es ist jetzt behoben!
Ich habe hier ein kleines Sassmeister-Beispiel erstellt, um den Unterschied zwischen lighten/darken und diesen Funktionen zu visualisieren. Spielen Sie gerne damit herum.
https://#/FX0WPQzRJf
Mir ist aufgefallen, dass der erste an mix übergebene Parameter die Farbe ist, die in die Basisfarbe (zweiter Parameter) „eingemischt“ werden soll.
Ich hatte meine Farben falsch herum und erhielt ein unerwartetes Ergebnis, d. h. meine Farbe wurde zu einem bestimmten Prozentsatz in Weiß gemischt.