Подтвердить что ты не робот

Sass: префиксы поставщика браузера

Я чрезвычайно новичок в Sass/Compass, поэтому этот вопрос может показаться глупым для многих из вас.

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

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

Теперь мне нужно сделать это в CSS:

* { 
    -webkit-box-sizing:border-box;
       -moz-box-sizing:border-box;          
        -ms-box-sizing:border-box; 
         -o-box-sizing:border-box; 
            box-sizing:border-box; 
  }

Спасибо.

4b9b3361

Ответ 1

Похоже, вы хотите использовать Compass box-sizing mixin. Ваш файл SASS будет выглядеть следующим образом:

@import "compass/css3/box-sizing";

* {
    @include box-sizing(border-box);
}

И будет скомпилировано следующее:

* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box; }

Вы можете увидеть другие компиляторы CSS3 Compass здесь. Обратите внимание, однако, что Compass не включает в себя префиксы типа -ms-box-sizing, например, поскольку IE8 + внедрил его без префикса. Если вам действительно нужны эти дополнительные свойства, вот как вы это сделаете:

@import "compass/css3/shared"

* {
    @include experimental(box-sizing, border-box, -moz, -webkit, -o, -ms, not -khtml, official);
}

Ответ 2

Я также хотел абстрагироваться от префиксов поставщиков, но у меня не было компаса.

@mixin vendor-prefix($name, $value) {
  @each $vendor in ('-webkit-', '-moz-', '-ms-', '-o-', '') {
    #{$vendor}#{$name}: #{$value};
  }
}

Sass:

* {
  @include vendor-prefix('box-sizing', 'border-box');
}

Визуализирует:

* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  -ms-box-sizing: border-box;
  -o-box-sizing: border-box;
  box-sizing: border-box; }

Также смотрите:
http://stefanwienert.net/blog/2012/05/18/easy-css-vendor-prefix-mixin-for-sass/

Ответ 3

Вот мое решение sass для решения префиксов поставщиков: https://github.com/Aloge/sass-prefixer

Это похоже на решение @rimian, но вам нужно включить mixin с свойством css и его значением, и он автоматически отображает css с необходимыми префиксами поставщика. Итак:

* {
  @include prefix(box-sizing, border-box)
}

оказывает:

* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}

но это:

* {
  @include prefix(display, flex)
}

оказывает:

* {
  display: -moz-flex;
  display: -webkit-flex;
  display: flex;
}

Он все еще в бета-версии, и у него могут быть ошибки, но я работаю над его улучшением и включением новых функций.

Ответ 4

Я бы посоветовал вам попробовать написать свои собственные микшины. Вот тот, который я использую для префиксов браузера.

@mixin prefix ($prop, $val...)
  -webkit-#{$prop}: #{$val}
  -moz-#{$prop}: #{$val}
  -ms-#{$prop}: #{$val}
  #{$prop}: #{$val}

Затем вы можете использовать его, просто набрав (используя в качестве примера размер окна):

+prefix (box-sizing, border-box)

Результаты в следующем CSS:

-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;

Если вам нужно передать более одного значения, вы можете использовать круглые скобки (полезно для переходов):

+prefix (box-shadow, (0 2px rgba(black, 0.1), 0 0 0 1px rgba(black, 0.1))

Результаты в следующем CSS:

-webkit-box-shadow: 0 2px rgba(0,0,0, 0.1), 0 0 0 1px rgba(0,0,0, 0.1);
-moz-box-shadow: 0 2px rgba(0,0,0, 0.1), 0 0 0 1px rgba(0,0,0, 0.1);
-ms-box-shadow: 0 2px rgba(0,0,0, 0.1), 0 0 0 1px rgba(0,0,0, 0.1);
box-shadow: 0 2px rgba(0,0,0, 0.1), 0 0 0 1px rgba(0,0,0, 0.1);

Ответ 5

$vendors: (
    '-webkit-','-apple-','-khtml-',
    '-moz-','-rim-','-xv-',
    '-ms-','-o-',''
);
@mixin pref($prop,$val...) {
    @each $key in $vendors {
        #{$key}#{$prop}:$val;
    }   
}
selector {
    @include pref(box-sizing,border-box);
}

делает следующее:

selector {
    -webkit-box-sizing: border-box;
    -apple-box-sizing: border-box;
    -khtml-box-sizing: border-box;
    -moz-box-sizing: border-box;
    -rim-box-sizing: border-box;
    -xv-box-sizing: border-box;
    -ms-box-sizing: border-box;
    -o-box-sizing: border-box;
    box-sizing: border-box;
}

Ответ 6

Я думаю, вы должны использовать Autoprefixer, чтобы больше не беспокоиться о префиксах браузера. Autoprefixer использует базу данных caniuse.com. Я рекомендую вам начать использовать Grunt или Gulp, затем подключить Autoprefixer в качестве задачи, которая будет перекомпилировать css и выплескивать необходимые вам префиксы для браузера.

Ответ 7

Полное предварительное решение

Переменные:: CREATE vars со всеми или используемыми префиксами

/* CREATE vars with all or usable prefixes */
$all-vendors: (
    'webkit','apple','khtml',
    'moz','rim','xv',
    'ms','o'
);

$using-vendors: (
    'webkit', 'moz', 'ms', 'o'
);

Фактические функции смешивания:: Mixin для нескольких объявлений && & Mixin для нескольких объявлений

/** Mixin for multiple declarations **/
@mixin prefs($declarations, $prefixes: ()) {
 @each $property, $value in $declarations {
   @each $prefix in $prefixes {
     #{'-' + $prefix + '-' + $property}: $value;
   }
   #{$property}: $value;
 }
}

/** Mixin for single property to be prefixed **/
@mixin pref($property, $value, $prefixes){
    @each $prefix in $prefixes {
        #{'-' + $prefix + '-' + $property}: $value;
    }
    #{$property}: $value;
}

### Фактическое использование:: используйте @include в любом селекторе

Пример нескольких

/** Prefixes usage **/
.selector {
  @include prefs((
    column-count: 3,
    column-gap: 1.5em,
    column-rule: 2px solid hotpink
  ), $using-vendors);
}

Пример Single pref mixin

.cc3 {
    @include pref(column-count,3,webkit moz ms);
} 
.ccc4 {
    @include pref(column-count, 4, $all-vendors);
}

Наконец, после компиляции с использованием компилятора SASS

Выход

.selector {
  -webkit-column-count: 3;
  -moz-column-count: 3;
  -ms-column-count: 3;
  column-count: 3;
  -webkit-column-gap: 1.5em;
  -moz-column-gap: 1.5em;
  -ms-column-gap: 1.5em;
  column-gap: 1.5em;
  -webkit-column-rule: 2px solid hotpink;
  -moz-column-rule: 2px solid hotpink;
  -ms-column-rule: 2px solid hotpink;
  column-rule: 2px solid hotpink; }

.cc3 {
  -webkit-column-count: 3;
  -moz-column-count: 3;
  -ms-column-count: 3;
  column-count: 3; }

.ccc4 {
  -webkit-column-count: 4;
  -apple-column-count: 4;
  -khtml-column-count: 4;
  -moz-column-count: 4;
  -rim-column-count: 4;
  -xv-column-count: 4;
  -ms-column-count: 4;
  column-count: 4; }

другой вариант - использовать Koala, просто включите auto-Prefix, и он будет работать как шарм.

вы можете скачать его здесь.

* или используйте систему сборки grunt. *