SCSS-Mixin: Pseudo States

Um mir in Sass alle möglichen Pseudo-States zu vereinfachen, habe ich ein kleines Mixin geschrieben.

Die Funktion erwartet eine Map mit Pseudo-State z.B. hover und Pseudo-Value z.B. #f00 sowie einen String mit der jeweiligen Property z.B. color oder background-color.

@mixin pseudo-states($map, $property: background-color) {
    @each $state, $value in $map {
        @if $state == default {
            #{$property}: #{$value};
        } @else {
            &:#{$state} {
                #{$property}: #{$value};
            }
        }
    }
}

Anwendungsbeispiel

Eingabe:

$link-properties: (
    default: none,
    hover: underline,
    focus: underline,
    active: none
);

.my-link {
    @include pseudo-states($link-properties, text-decoration);
}

Ausgabe:

.my-link {
  text-decoration: none;
}
.my-link:hover {
    text-decoration: underline;
}
.my-link:focus {
    text-decoration: underline;
}
.my-link:active {
    text-decoration: none;
}