diff options
| author | Volpeon <git@volpeon.ink> | 2022-02-12 17:58:31 +0100 |
|---|---|---|
| committer | Volpeon <git@volpeon.ink> | 2022-02-12 17:58:31 +0100 |
| commit | b62fa77d0dc0c6a053b9d72e27a8f404ae8a4206 (patch) | |
| tree | 60bcbcc5a5cc0cb22e1c613bff73d191e3f1626e /src | |
| parent | Update (diff) | |
| download | iro-design-b62fa77d0dc0c6a053b9d72e27a8f404ae8a4206.tar.gz iro-design-b62fa77d0dc0c6a053b9d72e27a8f404ae8a4206.tar.bz2 iro-design-b62fa77d0dc0c6a053b9d72e27a8f404ae8a4206.zip | |
Calculate gray palette via contrast automatically
Diffstat (limited to 'src')
| -rw-r--r-- | src/_utils.scss | 10 | ||||
| -rw-r--r-- | src/_vars.scss | 116 |
2 files changed, 67 insertions, 59 deletions
diff --git a/src/_utils.scss b/src/_utils.scss index 7ae2d6e..ae72f65 100644 --- a/src/_utils.scss +++ b/src/_utils.scss | |||
| @@ -1,11 +1,11 @@ | |||
| 1 | @use 'iro-sass/src/index' as iro; | 1 | @use 'iro-sass/src/index' as iro; |
| 2 | @use 'functions' as fn; | 2 | @use 'functions' as fn; |
| 3 | 3 | ||
| 4 | @include iro.bem-utility('db') { | 4 | @include iro.bem-utility('d-block') { |
| 5 | display: block; | 5 | display: block; |
| 6 | } | 6 | } |
| 7 | 7 | ||
| 8 | @include iro.bem-utility('dc') { | 8 | @include iro.bem-utility('d-contents') { |
| 9 | display: contents; | 9 | display: contents; |
| 10 | } | 10 | } |
| 11 | 11 | ||
| @@ -14,15 +14,15 @@ | |||
| 14 | text-overflow: ellipsis; | 14 | text-overflow: ellipsis; |
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | @include iro.bem-utility('ps') { | 17 | @include iro.bem-utility('p-static') { |
| 18 | position: static; | 18 | position: static; |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | @include iro.bem-utility('pr') { | 21 | @include iro.bem-utility('p-relative') { |
| 22 | position: relative; | 22 | position: relative; |
| 23 | } | 23 | } |
| 24 | 24 | ||
| 25 | @include iro.bem-utility('mt0') { | 25 | @include iro.bem-utility('mt-0') { |
| 26 | margin-top: 0; | 26 | margin-top: 0; |
| 27 | } | 27 | } |
| 28 | 28 | ||
diff --git a/src/_vars.scss b/src/_vars.scss index 71f0b1f..cafdb3d 100644 --- a/src/_vars.scss +++ b/src/_vars.scss | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | @use 'sass:math'; | ||
| 1 | @use 'iro-sass/src/index' as iro; | 2 | @use 'iro-sass/src/index' as iro; |
| 2 | @use 'include-media/dist/include-media' as media; | 3 | @use 'include-media/dist/include-media' as media; |
| 3 | @use '@oddbird/blend'; | 4 | @use '@oddbird/blend'; |
| @@ -17,6 +18,42 @@ media.$unit-intervals: ( | |||
| 17 | '': 0 | 18 | '': 0 |
| 18 | ); | 19 | ); |
| 19 | 20 | ||
| 21 | $grays: (); | ||
| 22 | |||
| 23 | @for $i from 0 through 100 { | ||
| 24 | $grays: append($grays, $i * 1%); | ||
| 25 | } | ||
| 26 | |||
| 27 | $grays-rev: iro.fn-list-reverse($grays); | ||
| 28 | |||
| 29 | @function find-gray($lightness, $contrast) { | ||
| 30 | $base: blend.lch($lightness 0 0); | ||
| 31 | $dir: if($contrast < 0, -1, 1) * if($lightness >= 50%, 1, -1); | ||
| 32 | $args: (); | ||
| 33 | |||
| 34 | @if $dir == 1 { | ||
| 35 | @each $gray in $grays-rev { | ||
| 36 | @if $gray < $lightness { | ||
| 37 | $args: append($args, blend.lch($gray 0 0)); | ||
| 38 | } | ||
| 39 | } | ||
| 40 | } @else { | ||
| 41 | @each $gray in $grays { | ||
| 42 | @if $gray > $lightness { | ||
| 43 | $args: append($args, blend.lch($gray 0 0)); | ||
| 44 | } | ||
| 45 | } | ||
| 46 | } | ||
| 47 | |||
| 48 | @if length($args) == 0 { | ||
| 49 | @return $base; | ||
| 50 | } | ||
| 51 | |||
| 52 | $args: append($args, math.abs($contrast)); | ||
| 53 | $result: blend.contrast($base, $args...); | ||
| 54 | @return hsl(fn.color(--gray-h), fn.color(--gray-s), lightness($result)); | ||
| 55 | } | ||
| 56 | |||
| 20 | // | 57 | // |
| 21 | 58 | ||
| 22 | @include iro.props-store(( | 59 | @include iro.props-store(( |
| @@ -95,9 +132,28 @@ media.$unit-intervals: ( | |||
| 95 | ); | 132 | ); |
| 96 | } | 133 | } |
| 97 | 134 | ||
| 135 | @function gray-palette($lightness) { | ||
| 136 | @return ( | ||
| 137 | --gray1: find-gray($lightness, -1.1), | ||
| 138 | --gray2: find-gray($lightness, -1.05), | ||
| 139 | --gray3: find-gray($lightness, 1), | ||
| 140 | --gray4: find-gray($lightness, 1.15), | ||
| 141 | --gray5: find-gray($lightness, 1.37), | ||
| 142 | --gray6: find-gray($lightness, 1.73), | ||
| 143 | --gray7: find-gray($lightness, 2.4), | ||
| 144 | --gray8: find-gray($lightness, 3.26), | ||
| 145 | --gray9: find-gray($lightness, 7.14), | ||
| 146 | --gray10: find-gray($lightness, 11), | ||
| 147 | --gray11: find-gray($lightness, 17.4), | ||
| 148 | ); | ||
| 149 | } | ||
| 150 | |||
| 98 | @include iro.fn-execute { | 151 | @include iro.fn-execute { |
| 99 | @include iro.props-store(( | 152 | @include iro.props-store(( |
| 100 | --colors: ( | 153 | --colors: ( |
| 154 | --gray-h: 220, | ||
| 155 | --gray-s: 5%, | ||
| 156 | |||
| 101 | --bg-hi2: fn.color(--gray1, null), // Lightest background | 157 | --bg-hi2: fn.color(--gray1, null), // Lightest background |
| 102 | --bg-hi: fn.color(--gray2, null), // Lighter background | 158 | --bg-hi: fn.color(--gray2, null), // Lighter background |
| 103 | --bg: fn.color(--gray3, null), // Background | 159 | --bg: fn.color(--gray3, null), // Background |
| @@ -139,35 +195,11 @@ media.$unit-intervals: ( | |||
| 139 | ), 'colors'); | 195 | ), 'colors'); |
| 140 | 196 | ||
| 141 | @include iro.props-store(( | 197 | @include iro.props-store(( |
| 142 | --colors: ( | 198 | --colors: gray-palette(94%) |
| 143 | --gray1: hsl(210, 0%, 100%), // 1.11 | ||
| 144 | --gray2: hsl(210, 0%, 98%), // 1.07 | ||
| 145 | --gray3: hsl(210, 0%, 95%), // 1 | ||
| 146 | --gray4: hsl(210, 0%, 90%), // 1.11 | ||
| 147 | --gray5: hsl(210, 0%, 87%), // 1.2 | ||
| 148 | --gray6: hsl(210, 0%, 78%), // 1.51 | ||
| 149 | --gray7: hsl(210, 0%, 69%), // 1.93 | ||
| 150 | --gray8: hsl(210, 0%, 55%), // 3 | ||
| 151 | --gray9: hsl(210, 0%, 38%), // 5.53 | ||
| 152 | --gray10: hsl(210, 0%, 19%), // 11.78 | ||
| 153 | --gray11: hsl(210, 0%, 0%), // 18.75 | ||
| 154 | ) | ||
| 155 | ), 'palette-light'); | 199 | ), 'palette-light'); |
| 156 | 200 | ||
| 157 | @include iro.props-store(( | 201 | @include iro.props-store(( |
| 158 | --colors: ( | 202 | --colors: gray-palette(100%) |
| 159 | --gray1: hsl(210, 0%, 100%), // 1 | ||
| 160 | --gray2: hsl(210, 0%, 100%), // 1 | ||
| 161 | --gray3: hsl(210, 0%, 100%), // 1 | ||
| 162 | --gray4: hsl(210, 0%, 95%), // 1.11 | ||
| 163 | --gray5: hsl(210, 0%, 92%), // 1.19 | ||
| 164 | --gray6: hsl(210, 0%, 82%), // 1.52 | ||
| 165 | --gray7: hsl(210, 0%, 73%), // 1.94 | ||
| 166 | --gray8: hsl(210, 0%, 58%), // 3.03 | ||
| 167 | --gray9: hsl(210, 0%, 41%), // 5.48 | ||
| 168 | --gray10: hsl(210, 0%, 22%), // 11.72 | ||
| 169 | --gray11: hsl(210, 0%, 0%), // 21 | ||
| 170 | ) | ||
| 171 | ), 'palette-light-raised'); | 203 | ), 'palette-light-raised'); |
| 172 | } | 204 | } |
| 173 | 205 | ||
| @@ -188,37 +220,13 @@ media.$unit-intervals: ( | |||
| 188 | ), | 220 | ), |
| 189 | ) | 221 | ) |
| 190 | ), 'colors-dark'); | 222 | ), 'colors-dark'); |
| 191 | 223 | ||
| 192 | @include iro.props-store(( | 224 | @include iro.props-store(( |
| 193 | --colors: ( | 225 | --colors: gray-palette(9%) |
| 194 | --gray1: hsl(210, 0%, 6%), // 1.1 | ||
| 195 | --gray2: hsl(210, 0%, 8%), // 1.05 | ||
| 196 | --gray3: hsl(210, 0%, 10%), // 1 | ||
| 197 | --gray4: hsl(210, 0%, 14%), // 1.12 | ||
| 198 | --gray5: hsl(210, 0%, 20%), // 1.37 | ||
| 199 | --gray6: hsl(210, 0%, 26%), // 1.73 | ||
| 200 | --gray7: hsl(210, 0%, 34%), // 2.4 | ||
| 201 | --gray8: hsl(210, 0%, 42%), // 3.26 | ||
| 202 | --gray9: hsl(210, 0%, 65%), // 7.14 | ||
| 203 | --gray10: hsl(210, 0%, 86%), // 12.57 | ||
| 204 | --gray11: hsl(210, 0%, 100%), // 17.4 | ||
| 205 | ) | ||
| 206 | ), 'palette-dark'); | 226 | ), 'palette-dark'); |
| 207 | 227 | ||
| 208 | @include iro.props-store(( | 228 | @include iro.props-store(( |
| 209 | --colors: ( | 229 | --colors: gray-palette(16%) |
| 210 | --gray1: hsl(210, 0%, 10%), // 1.12 | ||
| 211 | --gray2: hsl(210, 0%, 12%), // 1.06 | ||
| 212 | --gray3: hsl(210, 0%, 14%), // 1 | ||
| 213 | --gray4: hsl(210, 0%, 18%), // 1.14 | ||
| 214 | --gray5: hsl(210, 0%, 23%), // 1.38 | ||
| 215 | --gray6: hsl(210, 0%, 29%), // 1.75 | ||
| 216 | --gray7: hsl(210, 0%, 37%), // 2.39 | ||
| 217 | --gray8: hsl(210, 0%, 45%), // 3.27 | ||
| 218 | --gray9: hsl(210, 0%, 69%), // 7.15 | ||
| 219 | --gray10: hsl(210, 0%, 90%), // 12.43 | ||
| 220 | --gray11: hsl(210, 0%, 100%), // 15.52 | ||
| 221 | ) | ||
| 222 | ), 'palette-dark-raised'); | 230 | ), 'palette-dark-raised'); |
| 223 | } | 231 | } |
| 224 | 232 | ||
