Skip to content

Instantly share code, notes, and snippets.

@mmintel
Created August 24, 2014 09:35
Show Gist options
  • Save mmintel/6dac17c87fcf2d1555c4 to your computer and use it in GitHub Desktop.
Save mmintel/6dac17c87fcf2d1555c4 to your computer and use it in GitHub Desktop.
Generated by SassMeister.com.
<div class="class">asd</div>
// ----
// Sass (v3.4.0)
// Compass (v1.0.0)
// ----
$elementSeparator: '__';
$modifierSeparator: '--';
@function containsModifier($selector) {
$selector: selectorToString($selector);
@if str-index($selector, $modifierSeparator) {
@return true;
} @else {
@return false;
}
}
@function selectorToString($selector) {
$selector: inspect($selector); //cast to string
$selector: str-slice($selector, 2, -2); //remove brackets
@return $selector;
}
@function getBlock($selector) {
$selector: selectorToString($selector);
$modifierStart: str-index($selector, $modifierSeparator) - 1;
@return str-slice($selector, 0, $modifierStart);
}
@mixin b($block) {
.#{$block} {
@content;
}
}
@mixin e($element) {
$selector: &;
@if containsModifier($selector) {
$block: getBlock($selector);
@at-root {
#{$selector} {
#{$block+$elementSeparator+$element} {
@content;
}
}
}
} @else {
@at-root {
#{$selector+$elementSeparator+$element} {
@content;
}
}
}
}
@mixin m($modifier) {
@at-root {
#{&}#{$modifierSeparator+$modifier} {
@content;
}
}
}
@include b(test) {
background: red;
@include e(element){
font-size: 14px;
@include m(big) {
font-size: 18px;
}
};
@include m(modifier) {
color: blue;
@include e(subelement) {
background: gray;
}
}
}
.test {
background: red;
}
.test__element {
font-size: 14px;
}
.test__element--big {
font-size: 18px;
}
.test--modifier {
color: blue;
}
.test--modifier .test__subelement {
background: gray;
}
<div class="class">asd</div>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment