SCSS mixin, как объединить модули? (ПВ,%, эм)

Я хочу определить классы как

.bg-1 {
   width: 1%
}
.bg-2 {
   width: 2%
}

И я пытаюсь с этим:

@for $i from 1 through 100 {    
  .bg-#{$i} {
    width: #{$i};
  }
}

Это по крайней мере компилируется, но распечатывает

    .bg-1 {
       width: 1;
    }
    .bg-2 {
       width: 2;
    }

проблема в том, что если я добавлю:

width: #{$i}%;

Я получил:

error sass/screen.scss (Line 294 of sass/modules/_classes.scss: Invalid CSS after "   $var: ": expected expression (e.g. 1px, bold), was "%;")

2 ответа

Решение

Попробуйте это решение. Оно работает.

@for $i from 1 through 100 {    
   .bg-#{$i} {
     $percentage: unquote("%");
     width: #{$i}$percentage;
   }
}

Или это:

 @for $i from 1 through 100 {    
  .bg-#{$i} {
    width: #{$i}unquote("%");
  }
}

Или что-то вроде этого, которое более популярно.

@for $i from 1 through 100 {    
  .bg-#{$i} {
    width: round(percentage($i/100)); // Math function
    height: #{$i}px; // For px or em just concat
  }
}
Другие вопросы по тегам