twbs / bootstrap

The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web.
https://getbootstrap.com
MIT License
170.26k stars 78.78k forks source link

Reuse of the color-yiq function #23114

Closed envolute closed 6 years ago

envolute commented 7 years ago

With a simple change it is possible to use the color-yiq function with other properties, not just "color"

// Color contrast
@mixin color-yiq($color, $prop: 'color') {
  $r: red($color);
  $g: green($color);
  $b: blue($color);

  $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;

  @if ($yiq >= 150) {
    #{$prop}: #111;
  } @else {
    #{$prop}: #fff;
  }
}
.element-inside-primary {
  @include color-yiq(theme-color("primary"), 'background-color');
}

Just add the parameter "$prop: 'color'" that we can use other properties This can be interesting when you want to assign a background that contrasts with a color.

klasjersevi commented 7 years ago

It would be much better to change it to a function, so we can use it for whatever we like. Then the colors #111 and #fff should naturally use some variables so you can customize it. Additionally it would be nice to provide one or more mixins that utilize the function.

Function

// Color contrast
@function color-yiq($color) {
  $r: red($color);
  $g: green($color);
  $b: blue($color);

  $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;

  @if ($yiq >= 150) {
    @return $text-black;
  } @else {
    @return $text-white;
  }
}

Mixins

@mixin text-color($color: $body-bg) {
  color: color-yiq($color);
}

or

@mixin color-yiq($color: $body-bg, $prop: 'color') {
  #{$prop}: color-yiq($color);
}
XhmikosR commented 6 years ago

A PR is welcome.

mdo commented 6 years ago

Mixin was renamed to be a function in #24426.