-
Notifications
You must be signed in to change notification settings - Fork 842
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Amsterdam] Updating base text sizing #2936
Conversation
8241ae0
to
2cd96d6
Compare
Preview documentation changes for this PR: https://eui.elastic.co/pr_2936/ |
Preview documentation changes for this PR: https://eui.elastic.co/pr_2936/ |
Preview documentation changes for this PR: https://eui.elastic.co/pr_2936/ |
Do you need review on this one @daveyholler / @cchaos ? |
Sorry, no not quite yet, I'll get bette at adding the [WIP] labels and titles. |
Preview documentation changes for this PR: https://eui.elastic.co/pr_2936/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've commented on the code to describe what's going on. Figured its easier to point to the bits. But here are some accompanying screenshots.
Title sizes are similar but have changed slightly, mostly weight but font-size and line-height too
Components like buttons get the smaller font size while EuiText remains the same (16px for medium)
Components that used font size variables directly get basically no change unless it was the default $euiTextSize
. So things like forms don't get smaller (they're already small)
@if (map-has-key($euiTitles, $size)) { | ||
@each $property, $value in map-get($euiTitles, $size) { | ||
@if ($property == 'font-size') { | ||
@include fontSize($value); | ||
} @else { | ||
#{$property}: $value; | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The euiTitle()
mixin now loops through the new $euiTitle
map, finding the matching key first, then looping through that object and parsing the keys ('line-height'
) as properties and their values.
@if ($property == 'font-size') { | ||
@include fontSize($value); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is where we need to us the fontSize()
mixin to provide both px
and rem
values of the 'font-size'
provided which should be a px
value.
@each $property, $value in map-get($euiTitles, 'm') { | ||
@if ($property == 'font-size') { | ||
@include fontSize($value); | ||
} @else { | ||
#{$property}: $value; | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To avoid duplicating the same styles from the titles map, but wanting the xl & xxl large fonts to look the same as titles, we do the same procedure as in the euiTitles()
mixin.
You'll see the mismatch in mixin name euiFontSizeXL
to the key lookup 'm'
, because we didn't use a proper titling scale that matched our sass vars and now we're stuck with it 🤣
@function lineHeightFromBaseline($multiplier: 3) { | ||
@return convertToRem(($euiFontSize/2)*$multiplier); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Needed to duplicate this mixin as a function so it could be used in the map
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe remove the mixin and replace with the function usage in other parts of the code?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Or at the least, use the function in the in the mixin inception style.
$euiTitles: ( | ||
'xxxs': ( | ||
'font-size': $euiFontSizeXS, | ||
'line-height': lineHeightFromBaseline(3), | ||
'font-weight': $euiFontWeightBold, | ||
), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a new map that has keys that match our EuiTitle scales. You can add any property as a quoted key and it will get applied to that title size (in both EuiTitle and EuiText(size medium))
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I understand this and know that it's replacing old code that did something similar, but you should likely comment on WHY this is set up this way. Letter-spacing is super uncommon in most CSS, and more so as a scale. Just some comments in here to describe why it's important would be nice for someone coming to this code for the first time.
@@ -0,0 +1,51 @@ | |||
// Finally start using the non-beta version of Inter | |||
$euiFontFamily: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yay for finalized Inter
not Inter UI
!
// Font sizes -- scale is loosely based on Major Third (1.250) with a base of 14px | ||
// Base list is an altered scale based on 16px to match the resulted values below | ||
$euiTextScale: 2.125, 1.6875, 1.375, 1.125, 1, .875, .75; | ||
// This is a new list because changing the base list messes with EuiText | ||
// So it's only being used to calculate the font size variables | ||
$amsTextScale: 2.429, 1.929, 1.571, 1.285, 1.143, 1, .857; | ||
|
||
$euiFontSize: $euiSize - 2; // 14px |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is where it starts to get crazy...
THE GOAL: 14px
base font size
- Plain ole text inherits
font-size: 14px
fromhtml,body
- Anything using base
$euiFontSize
is14px
, buttons, tabs, etc... - EuiTitle sizing are the largest they'll ever be in scale
- EuiText's headings in size medium match EuiTitle sizes
However:
EuiText size medium is still a base of 16px
so that we can continue to have large-form (wall of text, blog style, etc) text be larger for legibility. Which means all the text scales for EuiText pretty much remain the same. Small is 14, Xsmall is 12 just as before.
Also
EuiTitle sizes only change ever so slightly to still be a major third scale but with the base being at position 6 instead of 5 as previously. But we want the EuiText.medium heading sizes (h1-16) to match our EuiTitle sizes, so we adjust the original $euiTextScale
's numbers to calculate to the equivalent of the new title sizes below. This means as it's passed to EuiText, it properly calculates off of 16px
... trust me it works 😉
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note to self for review:
The only downside to something like this that I can think of is that having $euiSize
and $euiFontSize
different means that anything heavily relying on both (I'm thinking loose line heights) will lose some balance. Specifically, looking at some spots where line height of 1.5 (the most common value) will create odd pixel numbers against $euiSize
derived values. Tabs are now 45px...etc. In isolation, this will be fine, but when components line up next to each other but have mixed value calcs... I anticipate this will cause some small breaks in places that might mean we might need to not rely on padding + font size to make the height of something. Should likely lead to more tolerant code as we spot those breaks and fix the trouble spots.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah it'll be interesting to see what this effects downstream. But it's essentially the same as doing:
font-size: $euiFontSizeSmall;
padding: $euiSize;
$euiFontSizeXS: ceil($euiFontSize * nth($amsTextScale, 7)); // 12px // h6 | ||
$euiFontSizeS: floor($euiFontSize * nth($amsTextScale, 6)); // 14px // h5 --> Now the same as the base $euiFontSize | ||
$euiFontSizeM: floor($euiFontSize * nth($amsTextScale, 5)); // 16px // h4 | ||
$euiFontSizeL: ceil($euiFontSize * nth($amsTextScale, 3)); // 22px // h3 | ||
$euiFontSizeXL: floor($euiFontSize * nth($amsTextScale, 2)); // 27px // h2 | ||
$euiFontSizeXXL: floor($euiFontSize * nth($amsTextScale, 1)); // 34px // h1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Then the $amsTextScale
is only used in this file to calculate these new font sizes, based on the new $euiFontSize
;
Because $euiFontSizeS
is the same as $euiFontSize
, it almost makes the plain $euiFontSize
moot, which is kind of a good thing since it was confusing where it'd lie within the scale.
.euiText--medium { | ||
@include fontSize($euiFontSizeM); | ||
@include euiScaleText($euiFontSizeM); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This doesn't exist as a selector in the default theme. So it works great as an override selector for plain .euiText
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A bonus feature of me leaving selectors that don't do anything 😈
This PR is now ready for review. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While eating a slice of pizza I made the mistake of looking at this code. These are mostly notes for when I need look closer at the output. Looking at how you wrote this I can see it has pretty much zero impact on current EUI which means it's fairly safe to merge as is. I want to do a pretty thorough scan of the display tomorrow to see what falls out from the size change. Off hand every time I think I see an AHA moment, I see the same error in current EUI.
As suspicious as I am of a change this big ... everything looks ok ⛹️♀️
src/themes/eui-amsterdam/global_styling/variables/_typography.scss
Outdated
Show resolved
Hide resolved
// Font sizes -- scale is loosely based on Major Third (1.250) with a base of 14px | ||
// Base list is an altered scale based on 16px to match the resulted values below | ||
$euiTextScale: 2.125, 1.6875, 1.375, 1.125, 1, .875, .75; | ||
// This is a new list because changing the base list messes with EuiText | ||
// So it's only being used to calculate the font size variables | ||
$amsTextScale: 2.429, 1.929, 1.571, 1.285, 1.143, 1, .857; | ||
|
||
$euiFontSize: $euiSize - 2; // 14px |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note to self for review:
The only downside to something like this that I can think of is that having $euiSize
and $euiFontSize
different means that anything heavily relying on both (I'm thinking loose line heights) will lose some balance. Specifically, looking at some spots where line height of 1.5 (the most common value) will create odd pixel numbers against $euiSize
derived values. Tabs are now 45px...etc. In isolation, this will be fine, but when components line up next to each other but have mixed value calcs... I anticipate this will cause some small breaks in places that might mean we might need to not rely on padding + font size to make the height of something. Should likely lead to more tolerant code as we spot those breaks and fix the trouble spots.
$euiTitles: ( | ||
'xxxs': ( | ||
'font-size': $euiFontSizeXS, | ||
'line-height': lineHeightFromBaseline(3), | ||
'font-weight': $euiFontWeightBold, | ||
), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I understand this and know that it's replacing old code that did something similar, but you should likely comment on WHY this is set up this way. Letter-spacing is super uncommon in most CSS, and more so as a scale. Just some comments in here to describe why it's important would be nice for someone coming to this code for the first time.
.euiText--medium { | ||
@include fontSize($euiFontSizeM); | ||
@include euiScaleText($euiFontSizeM); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A bonus feature of me leaving selectors that don't do anything 😈
@function lineHeightFromBaseline($multiplier: 3) { | ||
@return convertToRem(($euiFontSize/2)*$multiplier); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe remove the mixin and replace with the function usage in other parts of the code?
@@ -5,6 +5,8 @@ $euiColorPrimary: #006DE4; | |||
$euiColorSecondary: #00BFB3; | |||
$euiColorAccent: #FC358E; | |||
|
|||
$euiLinkColor: $euiColorPrimary; // Weirdly this one wasn't updating with new primary color |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note to self: look into this mystery.
@function lineHeightFromBaseline($multiplier: 3) { | ||
@return convertToRem(($euiFontSize/2)*$multiplier); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Or at the least, use the function in the in the mixin inception style.
Preview documentation changes for this PR: https://eui.elastic.co/pr_2936/ |
6739067
to
a41398a
Compare
Preview documentation changes for this PR: https://eui.elastic.co/pr_2936/ |
@cchaos I did a more thorough scan on the display side of this and I think it looks good. I know there will be some breaks from this, specifically because of the odd pixel 1.5 line-height, but nothing in here looks dangerous in regards to current EUI themes. My questions from above still stand, but I think this is generally OK to merge and we'll just deal with any issues as we notice them. |
Preview documentation changes for this PR: https://eui.elastic.co/pr_2936/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Feel free to merge. We'll see what shakes out on this one over time.
Summary
h1
-h6
) andEuiTitle
now use$euiFontWeightBold
Consumers
The titles and headings in EUI Amsterdam are now bold. When migrating to the Amsterdam theme you'll want to pay close attention to areas like dashboards or other high-density screens to ensure that the bold headings haven't caused your layouts to break.
Checklist
- [ ] Props have proper autodocs- [ ] Added documentation examples- [ ] Added or updated jest tests- [ ] Checked for accessibility including keyboard-only and screenreader modes