-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Proposal: add "step" granularity control to variation axes
In many cases, smooth interpolation is desirable in a variable font. It clearly benefits users to have the ability to have precise, near-infinite control of the weight or width in a typeface, in many scenarios.
However, in some cases, I believe it would be beneficial to have "stepped" axes, in which the type designer could pre-assign the granularity of controls.
If this granularity were baked into fonts, that would then allow software/web makers to use stepped controls for variable font UI, such as the step input attribute in HTML. In fact, I imagine that the designspace control for such a granularity control might be something like the HTML counterpart.
<!-- HTML -->
<input type="range" min="5" max="10" step="0.01"><!-- designspace axis, with proposed step -->
<axis tag="ital" name="Italic" minimum="0" maximum="1" default="0" step="1">
<labelname xml:lang="en">Italic</labelname>
</axis>Example use case : alternate characters
The ital axis of a font may control italic alternates in a font by swapping out characters such as a double-story π for a single-story π. Of course, when shapes change this radically, there is not a useful way for the ital axis to provide smooth interpolation. Most of the time, this type of substitution will probably happen via a rule, which would look like this in a designspace:
<rule name="italic">
<conditionset>
<condition name="Italic" minimum="0.5" maximum="1" />
</conditionset>
<sub name="a" with="a.italic" />
</rule>
However, because there is no step attribute for variable axes, variable font UI is then confusing to users: while most axes show visible change over their control range (usual in the form of a slider), an axis control alternates will show no change for most of its movement.
This isn't necessarily just a two-value, "on/off" scenario, either. Fonts such as Roslindale Variable Italic show that it would be useful for a type designer to assign whatever granularity suits the
Example use case: axes which can smoothly interpolate, but shouldn't
It is widely agreed that one of the notable advantages of variable fonts is the ability to join multiple font styles into a single file, to improve compression and reduce download latency in webpages.
A step attribute could allow a font to have multiple compatible styles, even if they may not look particularly good in their interpolations. On the simple end of this would be fonts that transform from proportional to monospaced, or from serif to sans-serif. On the extreme end of this would be "super fonts" that folks like Underware have hypothesized, which could combine totally different fonts into a single variable font file by programmatically making different node structures compatible, disregarding the aesthetic beauty of intermediate results.
If we consider compression to be a benefit of variable fonts, both ends of this spectrum would be a valuable outcome for users and producers.
Users would have faster downloads from smaller overall font packages, and makers would be enabled to combine font styles that previously were blocked by unaesthetic intermediates.
How are axis steps different from named instances?
Of course, there is already a useful mechanism for pre-suggesting specific areas of a designspace. A font can include named instances so that users can easily access familiar, pre-determined styles like "Regular," "ExtraLight," "Condensed SemiBold Italic," and the like. Doesn't that fulfill the value of axis granularity controls?
Not quite.
The benefit of stepped axes would be that they would exist alongside smooth axes. This would allow variable font UIs to provide much more utility to end users. A font user could explore and play within a variable designspace without sticking to only named instances, but still have some guardrails against selecting intermediate values that aren't useful, and without wondering why some ranges give continuous change while others only respond within limited areas.