use-transition

Миксин высшего порядка для уменьшения шаблонного кода для переходов "по умолчанию".

Параметры

NameTypeDefaultDescription
$propertieslistСписок свойств для анимации. Используйте пробел в качестве разделителя.
$durationnumberДлительность анимации.
$delaynumberЗадержка анимации.
$timing-functionstringФункция плавности анимации.

Пример использования

Рекомендуется создать свой миксин, названный transition, задать в нём настройки для проекта и передать результат в use-transition.

// setup.scss
@use 'more-sass' as more;

@mixin transition($properties: (), $duration: .3s) {
  @include more.use-transition($properties: $properties, $duration: $duration);
}

// ...

.element {
  @include transition(opacity transform);
}

.element-two {
  // С запятой в качестве разделителя необходимы дополнительные скобки
  @include transition((opacity, transform), .3s);
}
.element {
  transition-property: opacity, transform;
  transition-duration: .3s;
}

.element-two {
  transition-property: opacity, transform;
  transition-duration: .3s;
}

Если хочется использовать свойства, разделяя их запятыми, не оборачивая их в дополнительные скобки, и при этом нет необходимости задавать более одного свойства transition-XXX (обычно кастомизации transition-duration вполне достаточно), вы можете создать расширенную версию миксина transition вроде этой:

// setup.scss
@use 'more-sass' as more;
@use 'sass:meta';
@use 'sass:list';

@mixin transition($properties...) {
  $duration: .3s; // `transition-duration` по умолчанию, если не передано иное

  @for $i from 1 through list.length($properties) {
    $prop: list.nth($properties, $i);

    @if (meta.type-of($prop) == 'number') {
      $duration: $prop;
      $properties: more.list-remove($properties, $i);
    }
  }

  @include use-transition($properties: $properties, $duration: $duration);
}

// ...

.element {
  // Свойства, разделенные запятыми, без дополнительных скобок
  @include transition(opacity, transform);
}

.element-two {
  @include transition(opacity, transform, .2s);
}
.element {
  transition-property: opacity, transform;
  transition-duration: .3s; /* значение по умолчанию */
}

.element-two {
  transition-property: opacity, transform;
  transition-duration: .2s; /* изменённое значение по умолчанию */
}