Color management has been a nagging itch for quite a while. I find that the designs I receive to build out frequently have many color variations and I end up with many different colors defined. In the past I’ve used both variables and a mixin with a simple map to get color values based on a name. However Hmphry’s approach leverages a 2 level map which supports grouping similar colors nicely.
There is one change that I would make to his
$color-stack map. In his map, Hmphry uses
id as the key to lookup the specific color in a
group. I think I would change that to
shade as I usually expect an ID to be unique and it feels odd to have different values for a given ID in different groups.
This means that instead of this: [gist id=”2b60270c2fbc00e4b21a” file=”_colors-stack–original.scss”]
I’d have this: [gist id=”2b60270c2fbc00e4b21a” file=”_colors-stack–updated.scss”]
One other change that I think I’d make is to support updating the
$color-stack via the function. This would let me define new colors right in the CSS as I go along doing a build and then I can clean them up at the end before launch so that they are all defined for maintenance. The (mostly untested) function that I’m imagining would look something like this:
[gist id=”2b60270c2fbc00e4b21a” file=”color-function.scss”]
I added some minimal testing of the
_color_stack_entry helper function to verify that it was working as expected:
[gist id=”2b60270c2fbc00e4b21a” file=”color-stack-entry-test.scss”]
I plan to take a deeper look at true in a future post and add testing for the main color function.
I fleshed out the tests a bit to verify that the
color function was working as expected and fixed some errors I encountered in managing the color stack. You can see the whole thing in this Sassmeister: