2015-03-05 2 views
1

У меня есть примесь, которая преобразует точки Ремы PX TO REM, у меня есть этот код:Как передать подмешать в качестве параметра другого Mixin в SASS

 

    .button { 
     @include rem(font-size, 24px); 
     @include rem(padding, 10px); 
     @include rem(border-radius, 5px); 
    } 

Это будет производить этот CSS:

 

    .button { 
     font-size: 1.5rem; 
     padding: 0.625rem; 
     border-radius: 0.3125rem; } 

Но я хотел бы использовать некоторые Примеси от компаса и, например, я хочу использовать границы радиуса от компаса

 

    .box { 
     @include border-radius(10px); 
    } 

И было бы создать этот CSS:

 

    .box { 
     -moz-border-radius: 10px; 
     -webkit-border-radius: 10px; 
     border-radius: 10px; } 

Есть ли способ сделать что-то вроде этого:

 

    .box { 
     @include rem(@include border-radius(10)); 
    } 

+0

Возможный дубликат [Sass Interpolation of Mixin, Function и Variable names] (http://stackoverflow.com/questions/16152547/sass-interpolation-of-mixin-function-and-variable-names) – cimmanon

+0

@ freeman76 it'a немного из контекста, но 'border-radius' не нуждается в префиксах http://caniuse.com/#search=border-radius. Также рассмотрите, какие свойства необходимо преобразовать в rems, например, border-radius не должен быть включен, поскольку вам нужно больше абсолютного значения. –

+0

Привет, Вангел, вы правы, я не использовал лучший пример для префиксов :) однако, если вы используете модуль rem для радиуса границы, я думаю, что это не повредит, если пользователь изменит свой базовый размер шрифта и текст становится действительно большим, тогда углы будут соответствующим образом корректироваться. – freeman76

ответ

1

Вы не можете добавить два Примеси вместе так, как вы хотите. Поэтому вам просто нужно заставить rem mixin делать то, что вы хотите. Поэтому я написал новый код для обработки этого для вас.

@function parseInt($n) { 
    @return $n/($n * 0 + 1); 
} 

@mixin rem($property, $values, $prefix: false) { 
    $px:(); 
    $rem:(); 

    @each $value in $values { 

     @if $value == 0 or $value == auto or unit($value) == "%" { 
      $px: append($px, $value); 
      $rem: append($rem, $value); 
     } @else { 
      $unit: unit($value); 
      $val: parseInt($value); 

      @if $unit == "px" { 
       $px: append($px, $value); 
       $rem: append($rem, ($val/16 + rem)); 
      } 

      @if $unit == "rem" { 
       $px: append($px, ($val * 16 + px)); 
       $rem: append($rem, $value); 
      } 
     } 
    } 

    @if $px == $rem { 
     #{$property}: $px; 
    } @else if $prefix == true { 
     #{-moz- + $property}: $px; 
     #{-moz- +$property}: $rem; 
     #{-webkit- +$property}: $px; 
     #{-webkit- +$property}: $rem; 
     #{$property}: $px; 
     #{$property}: $rem; 
    } @else { 
     #{$property}: $px; 
     #{$property}: $rem; 
    } 
} 

Теперь все, что вам нужно сделать, добавить префиксы к любой собственности добавить истинное значение в конце Mixin как так ...

@include rem(border-radius, 10px, true); 

В противном случае, если вы не хотите каких-либо указан префикс на имущество, как Fon размера или что-то вы просто не добавить последнее значение, как так ...

@include rem(font-size, 10px); 

у меня есть рабочий пример here...

* Также на боковой ноте я модифицировал этот mixin для обработки процентов.

+0

Привет, Ричард, большое спасибо за ваш ответ. У меня есть один вопрос, для% единиц, не лучше ли держать его в процентах? Или процент здесь будет больше для размера шрифта? – freeman76

+0

Hi @ freeman76. Совершенно никаких проблем. Извините, но я не думаю, что я полностью понял ваш вопрос. Я думаю, что примечание, которое я сделал в нижней части, о процентах, возможно, было путаным. Короче говоря, все, что я пытался сказать, это mixin позволяет использовать% единиц, таких как «@include rem (margin-right, 10%)». Таким образом, вы все еще можете сделать все остальное так же, как и для размеров шрифтов, таких как «@include rem (font-size, 16px);». Так что не зацикливайтесь на процентах. Просто знайте, что теперь, если вы передадите% unit в mixin, и он не будет терпеть неудачу, как раньше. –