Skip to content

Instantly share code, notes, and snippets.

@xlozinguez
Forked from jlong/SassMeister-input.scss
Created January 10, 2017 19:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xlozinguez/4f7367be1f4763bea0616c0c10d4a0ff to your computer and use it in GitHub Desktop.
Save xlozinguez/4f7367be1f4763bea0616c0c10d4a0ff to your computer and use it in GitHub Desktop.
Navigate a nested maps with map-fetch() in Sass
// ----
// Sass (v3.3.0.rc.2)
// Compass (v1.0.0.alpha.17)
// ----
//
// map-fetch($map, $keys)
//
// An easy way to fetch a deep value in a multi-level map. Works much like
// map-get() except that you pass multiple keys as the second parameter to
// go down multiple levels in the nested map.
//
@function map-fetch($map, $keys) {
$key: nth($keys, 1);
$length: length($keys);
$value: map-get($map, $key);
@if ($length > 1) {
$rest: ();
@for $i from 2 through $length {
$rest: append($rest, nth($keys, $i))
}
@return map-fetch($value, $rest)
} @else {
@return $value;
}
}
$config: (
themes: (
mist: (
header: #dcfac0,
content: #00968b,
footer: #85c79c
),
spring: (
header: #f4fac7,
content: #c2454e,
footer: #ffb158
)
)
);
@each $theme in map-keys(map-get($config, themes)) {
.#{$theme} {
.header { background-color: map-fetch($config, themes $theme header ); }
.content { background-color: map-fetch($config, themes $theme content ); }
.footer { background-color: map-fetch($config, themes $theme footer ); }
}
}
.mist .header {
background-color: #dcfac0;
}
.mist .content {
background-color: #00968b;
}
.mist .footer {
background-color: #85c79c;
}
.spring .header {
background-color: #f4fac7;
}
.spring .content {
background-color: #c2454e;
}
.spring .footer {
background-color: #ffb158;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment