Динамически генерировать имя класса и CSS-атрибуты в Sass

Я хочу динамически генерировать очень специфические имена классов и атрибуты с помощью итератора и условной проверки в SCSS Sass Version 3.

Если делится на половину, добавьте половину в конце. Если суффикс.25 только, суффикс с "1q" Если суффикс.75, суффикс с "3q"

Пример:

// margin classes
// classes m-a-0 to m-a-5, 1/4 rems specified by 1q, half, 3q   
// // m-a-1q is 1/4 rem, m-a-1-1q is i.25rem

.m- {
   &a-0 {
       margin: 1rem * 0;
   }
   &a-1q {
       margin: 1rem * 0.25;
   }
   &a-half {
       margin: 1rem * 0.5;
   }
   &a-3q {
       margin: 1rem * 0.75;
   }
   &a-1 {
       margin: 1rem * 1;
   }
   &a-1-1q {
       margin: 1rem;
   }
   &a-1half {
       margin: 1rem * 1.5;
   } 
   &a-1-3q {
       margin: 1rem * 1.75;
   }
   &a-2 {
       margin: 1rem * 2;
   }
   &a-2-1q {
       margin: 1rem * 2.25;
   }
   &a-2half {
       margin: 1rem * 2.5;
   }
   &a-2-3q {
       margin: 1rem * 2.75;
   }
}

Должен генерировать:

.m-a-0{margin:0rem}.m-a-1q{margin:0.25rem}.m-a-half{margin:0.5rem}.m-a-3q{margin:0.75rem}.m-a-1{margin:1rem} ...

1 ответ

Решение

Если вы позволите небольшое изменение в именовании, вы можете сделать:

$count: 2;  
@for $i from 0 through $count * 4 {
  .m-a-#{ floor($i / 4) }#{ nth(null -1q -half -3q, $i % 4 + 1) } { 
    margin: $i / 4 * 1rem; 
  }
}

//  output
.m-a-0      { margin: 0rem;    }  
.m-a-0-1q   { margin: 0.25rem; }
.m-a-0-half { margin: 0.5rem;  }
.m-a-0-3q   { margin: 0.75rem; }
.m-a-1      { margin: 1rem;    }
.m-a-1-1q   { margin: 1.25rem; }
.m-a-1-half { margin: 1.5rem;  }
.m-a-1-3q   { margin: 1.75rem; }
.m-a-2      { margin: 2rem;    }
Другие вопросы по тегам