Re: [csswg-drafts] [css-fonts] font-weight: bolder and lighter are counter-intuitive (#2764)

came here via https://github.com/w3c/csswg-drafts/issues/2764#ref-issue-365585720
so.. bump!

The above problem could be fixed if the _bolder_ and _lighter_ keywords would actually do what their name suggests; **at least for variable fonts.** No need for keyword handling in calc() then.

Maybe some variation of `current()` or `inherited()` could do the trick if nesting functions in `calc()` is supposedly easier. But that's a different story to than using an unknown variable set of bolder/lighter fonts.

_Variable Fonts are a thing now!_

Unfortunately neither "bolder" nor "lighter" move to the next **weight variation** within a _variable font_, but act binary as "bold" or "un-bold" aka "normal". That was fine when most ordinary fonts typically featured a binary state for normal/bold as well.

Also going bolder or lighter (font wise) within nested elements does not imply moving in steps of 100 _only_. A variable font could contain just three presets for its the "wght" axis using 200, 400, 600 or any other set of arbitrary numbers between 1 and 1000.
The same is true for an equivalent set of carefully crafted `@font-face` declarations using classic single font files.

With a fallback list of different variable fonts such as `font-family: "Bahnschrift", "League Spartan Variable", "Source Sans Pro"` one could build a working ramp of the _proper_ font-weights of such fonts whilst being ignorant about what "wght" values actually exist.

_Using "bolder" or "lighter" could (should) **continiously select** the next available weight variation._

Here each letter of the words "Fonts" and "Mood" is a set of nested `<b>` elements that might progressively get `bolder` from whatever weight `<p>` currently has set and eventually reaches whatever weight ("wght") the font's upper limit would be.
```css
b {font-weight:bolder} /* life could be easy ... */
```
```html
<!-- crudo ma bello -->
<p>Variable <b>F<b>o<b>n<b>t<b>s</b></b></b></b></b> R <strong>côôl</strong></p>
<p>G<b>o<b>o<b>o<b>o<b>o<b>d</b> Morning</b></b></b></b></b></p>
```
![variable-bolder-fonts](https://user-images.githubusercontent.com/638340/73126205-0510c300-3fb0-11ea-8478-06397e423396.png)
Although the markup is ugly, the CSS remains fairly simple and _intuitive_.

Today I can do the same thing but with much more effort and have to use an explicit amount of nested B selectors - unlike the oneliner above. I also need to keep the ramp values at a specific start/end point or the result could look choppy when used in a possibly different context. 
If `<p>` happens to be set elsewhere to the usual `normal` (400), the effect would not look as intended.
```css
/* ... but it's not ... */
p {font: 200 2rem/1 "League Spartan","Bahnschrift","Source Sans Pro",sans-serif;}
p > b { font-weight: 300 }
p > b > b { font-weight: 400 }
p > b > b > b { font-weight: 500 }
p > b > b > b > b { font-weight: 600 }
p > b > b > b > b > b { font-weight: 700 }
p > b > b > b > b > b > b, strong { font-weight: 800 }
```
Using CSS properties the CSS can become simpler ... 
```CSS
p {--w:1 }
p b { font-weight: calc(var(--w) * 200) }
```
but the HTML gets even worse:
```html
<p>G<b style="--w:1">o<b style="--w:2">o<b style="--w:3">o<b style="--w:4">o<b style="--w:5">d</b> Morning!</b></b></b></b></p>
```

Cheers.

-- 
GitHub Notification of comment by WebMechanic
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/2764#issuecomment-578437836 using your GitHub account

Received on Saturday, 25 January 2020 19:55:49 UTC