onedesign / generator-one-base

A foundation for One Design Company projects on the web.
Other
1 stars 1 forks source link

More complete set of CSS timing function variables #57

Closed cmalven closed 7 years ago

cmalven commented 7 years ago

Right now, we have some cubic-bezier variables in our variables file for use with css transitions and animations, but it's kind of a mish-mosh, incomplete set. I think it'd make more sense to include a complete set of these, which would look something like the following:

$timing-function-linear: cubic-bezier(0.250, 0.250, 0.750, 0.750);
$timing-function-ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715);
$timing-function-ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530);
$timing-function-ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190);
$timing-function-ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220);
$timing-function-ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060);
$timing-function-ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035); 
$timing-function-ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335); 
$timing-function-ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045);

$timing-function-ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000);
$timing-function-ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940);
$timing-function-ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000);
$timing-function-ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000);
$timing-function-ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000);
$timing-function-ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000);
$timing-function-ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000);
$timing-function-ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275);

$timing-function-ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950);
$timing-function-ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955);
$timing-function-ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000);
$timing-function-ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000);
$timing-function-ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000);
$timing-function-ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000);
$timing-function-ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860);
$timing-function-ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550);
brianjhanson commented 7 years ago

I'd like this too, but I'd prefer it to be a function / map rather than variables. For me at least something like ease(in-out-cubic) is a little easier to remember / type than $timing-function-ease-in-out-cubic. Something like what bourbon does

We could also just pull in something like this

cmalven commented 7 years ago

I think you're right. The original reason for this being a variable was that, in theory, you could create your own custom timing functions and include them along with the others in a common place. In practice, I don't think I've ever created a custom timing function and probably never will.

So maybe we just create something like this and add it to util? I think I'd prefer that to pulling in a tiny third-party module given how simple this is.

//===============================================================
// Easing
//===============================================================
/*
  Provides a complete set of common timing functions for use with CSS transitions + animations
*/

$eases: (
  linear: cubic-bezier(0.250, 0.250, 0.750, 0.750),

  in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715),
  in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530),
  in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190),
  in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220),
  in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060),
  in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035);,
  in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335);,
  in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045),

  out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000),
  out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940),
  out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000),
  out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000),
  out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000),
  out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000),
  out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000),
  out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275),

  in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950),
  in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955),
  in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000),
  in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000),
  in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000),
  in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000),
  in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860),
  in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550)
);

@function ease($ease: in-out-sine) {
  @if map-has-key($eases, $ease) {
    @return map-get($eases, $ease);
  } @else {
    @warn "Key #{$ease} doesn't exist in map #{$eases}";
  }
}