Using a Sass map for my colors
Last week I took a look at how I chose my color scheme, now for a little insight into how I used it when writing my Sass.
Using my colors
First, I created a variable for all my colors. This was just to make life easier to reference, or make changes to later on:
$primary-color: #EE6352;
$youtube: #D16E8D;
$articles: #FFAC83;
$community: #3F78C9;
$courses: #49C4A3;
$white: #FFF;
$black: #444A51;
$lighten: 5;
$darken: 25;
You'll notice a $lighten
and $darken
variables there too. That was so I could lighten everything by the same amount, and very quickly change how much I'm lightening or darkening things by.
Creating a Sass map
With that in place I created a Sass map to use them, plus the light and dark versions, which you can see below. It looks complicated if you've never used Sass before, or a map before, but it's totally worth the time in my opinion.
$colors: (
primary: (
base: $primary-color,
light: lighten($primary-color, $lighten),
dark: darken($primary-color, $darken),
),
yt: (
base: $youtube,
light: lighten($youtube, $lighten),
dark: darken($youtube, $darken),
),
articles: (
base: $articles,
light: lighten($articles, $lighten),
dark: darken($articles, $darken),
),
com: (
base: $community,
light: lighten($community, $lighten),
dark: darken($community, $darken),
),
course: (
base: $courses,
light: lighten($courses, $lighten),
dark: darken($courses, $darken),
),
neutral: (
base: #69777F,
light: #B2CAD8,
dark: $black,
),
);
I then use a custom function to access my colors when I need them:
@function clr($base, $shade: base) {
$color: map-get(map-get($colors, $base), $shade);
@return $color;
}
This makes it really easy to use a color when I need it, including the light and dark versions. With how this is set up, the base version is the default, so if I need the base, I just write it in like this:
h1 {
color: clr(course);
}
And then if I need a variation of it, I can write it like this:
h1 {
color: clr(course, light);
}
This works fantastically well. It's a lot easier than remembering or having to reference hex codes, or even to reference a variable for the normal, light or dark version of it. Maps like this are one of the reasons that I love Sass.
But what about CSS custom properties
Custom properties are amazing, and they are one of the things I thought of early on, since each 'section' of my site has a different color. They seemed like the perfect fit for this type of thing, and guess what? I was right. But to see how I pulled that off, and how CSS custom properties can work well with Sass variables and maps, well that'll have to wait until next week!