summaryrefslogtreecommitdiff
path: root/docs/lab/var.html
diff options
context:
space:
mode:
authorRasmus Andersson <rasmus@notion.se>2018-09-30 22:34:27 +0300
committerRasmus Andersson <rasmus@notion.se>2018-10-11 09:38:24 +0300
commit6f6f6683ed47818d44864452a94dbb2bded9aab6 (patch)
tree8de6f46239c705f17569f6ad094c304e1daaef9b /docs/lab/var.html
parent3fba02c38af058f9f4e73fa9389af56d2baeff20 (diff)
downloadinter-6f6f6683ed47818d44864452a94dbb2bded9aab6.tar.xz
web: VF: slant axis instead of italic axis
Diffstat (limited to 'docs/lab/var.html')
-rw-r--r--docs/lab/var.html151
1 files changed, 86 insertions, 65 deletions
diff --git a/docs/lab/var.html b/docs/lab/var.html
index 0ed45c444..6f95b9a2c 100644
--- a/docs/lab/var.html
+++ b/docs/lab/var.html
@@ -8,6 +8,7 @@
@font-face {
font-family: 'Inter UI var';
font-weight: 400 900;
+ font-style: oblique 0deg 10deg;
src: url('fonts/var/Inter-UI.var.woff2') format("woff2-variations"),
url('../font-files/Inter-UI.var.woff2') format("woff2-variations");
}
@@ -24,9 +25,9 @@ body {
.sample {
padding: 40px 40px 40px 35px;
- font-size: 96px;
+ font-size: var(--size);
letter-spacing: -0.03em;
- /*font-variation-settings: 'wght' 400, 'ital' 0;*/
+ font-variation-settings: 'wght' var(--weight), 'slnt' var(--slant);
}
@supports (font-variation-settings: normal) {
@@ -61,59 +62,63 @@ label {
</head>
<body>
<div class="ctrl">
- <label>
- Weight:
- <input type="range" value="400" min="400" max="900" name="weight">
- </label>
- <label>
- Italic:
- <input type="range" value="0" min="0" max="100" name="italic">
- </label>
+ <label>Weight: <input type="range" value="400" min="400" max="900" name="weight"></label>
+ <label>Slant: <input type="range" value="0" min="0" max="10" step="0.01" name="slant"></label>
+ <label>Size: <input type="range" value="96" min="6" max="400" name="size"></label>
<label>
<input type="checkbox" name="animate">
Animate
</label>
</div>
<div class="sample" contenteditable>
-Inter UI 2.6 coming soon <br>
-Refined glyphs & kerning <br>
-Variable weight axis <br>
-Major overhaul 123ABC! <br>
+Inter UI 3.0 is variable and flexible<br>
+Variable weight axis<br>
+Variable slant/oblique axis<br>
+ABCDEFGHIJKLMNOPQRSTUVWXYZ<br>
+abcdefghijklmnopqrstuvwxyz<br>
+1234567890?!()[]{}&*^%$#@~&lt;&gt;<br>
</div>
<script type="text/javascript">
-var state = {
- weight: 400,
- italic: 0,
-}
+
var samples = document.querySelectorAll('div.sample')
var weightInput = document.querySelector('[name="weight"]')
-var italicInput = document.querySelector('[name="italic"]')
-
-weightInput.value = String(state.weight)
-italicInput.value = String(state.italic)
-
-function updateFontVariationSettings() {
- for (let i = 0; i < samples.length; i++) {
- let sample = samples[i]
- // sample.style.fontVariationSettings =
- // `'wght' ${state.weight}, 'ital' ${state.italic}`
- sample.style.fontVariationSettings =
- `'wght' ${state.weight}, 'ital' ${state.italic}`
- }
-}
+var slantInput = document.querySelector('[name="slant"]')
+var sizeInput = document.querySelector('[name="size"]')
-function setWeight(weight) {
- state.weight = weight
- updateFontVariationSettings()
-}
-function setItalic(italic) {
- state.italic = italic
- updateFontVariationSettings()
+var ui = {
+ weight: parseFloat(weightInput.value),
+ slant: parseFloat(slantInput.value),
+ size: parseFloat(sizeInput.value),
+
+ setState(props) {
+ for (let k in props) {
+ if (k in this) {
+ this[k] = props[k]
+ }
+ }
+ this.update()
+ },
+
+ update() {
+ let s = document.body.style
+ s.setProperty(`--weight`, this.weight)
+ s.setProperty(`--slant`, this.slant)
+ s.setProperty(`--size`, `${this.size}px`)
+ // for (let i = 0; i < samples.length; i++) {
+ // let sample = samples[i]
+ // // sample.style.fontVariationSettings =
+ // // `'wght' ${ui.weight}, 'ital' ${ui.slant}`
+ // sample.style.fontVariationSettings =
+ // `'wght' ${ui.weight}, 'slnt' ${ui.slant}`
+ // }
+ },
}
+ui.update()
+
// monotime() :float milliseconds
//
var monotime = (
@@ -133,13 +138,13 @@ function startAnimation() {
return
}
weightInput.disabled = true
- italicInput.disabled = true
+ slantInput.disabled = true
isAnimating = true
let v = 0
let wmin = parseFloat(weightInput.min)
, wmax = parseFloat(weightInput.max)
- , imin = parseFloat(italicInput.min)
- , imax = parseFloat(italicInput.max)
+ , imin = parseFloat(slantInput.min)
+ , imax = parseFloat(slantInput.max)
, wspeed = 200 // lower is faster; time divisor
, ispeed = 800
, clamp = 0.001
@@ -150,15 +155,17 @@ function startAnimation() {
r = (1 + Math.sin((monotime() - startTime) / wspeed)) * 0.5
v = (wmin * (1 - clamp)) + (((wmax * (1 + clamp)) - (wmin * (1 - clamp))) * r)
v = Math.max(wmin, Math.min(wmax, v))
- setWeight(v)
+ ui.weight = v
weightInput.value = v
r = (1 + Math.sin((monotime() - startTime) / ispeed)) * 0.5
v = (imin * (1 - clamp)) + (((imax * (1 + clamp)) - (imin * (1 - clamp))) * r)
v = Math.max(imin, Math.min(imax, v))
- setItalic(v)
- italicInput.value = v
-
+ ui.slant = v
+ slantInput.value = v
+
+ ui.update()
+
if (isAnimating) {
requestAnimationFrame(update)
}
@@ -169,28 +176,42 @@ function startAnimation() {
function stopAnimation() {
isAnimating = false
weightInput.disabled = false
- italicInput.disabled = false
- weightInput.value = String(state.weight)
- italicInput.value = String(state.italic)
+ slantInput.disabled = false
+ weightInput.value = String(ui.weight)
+ slantInput.value = String(ui.slant)
}
-// UI control: weight slider
-weightInput.addEventListener('input',
- weightInput.valueAsNumber !== undefined ? ev => {
- setWeight(weightInput.valueAsNumber)
- } : ev => {
- setWeight(parseFloat(weightInput.value))
- }
-)
+function bindRangeControl(rangeInput, handler) {
+ rangeInput.addEventListener('input',
+ rangeInput.valueAsNumber !== undefined ? ev => {
+ handler(rangeInput.valueAsNumber)
+ } : ev => {
+ handler(parseFloat(rangeInput.value))
+ }
+ )
+}
-// UI control: italic slider
-italicInput.addEventListener('input',
- italicInput.valueAsNumber !== undefined ? ev => {
- setItalic(italicInput.valueAsNumber)
- } : ev => {
- setItalic(parseFloat(italicInput.value))
- }
-)
+// UI controls
+bindRangeControl(weightInput, weight => ui.setState({ weight }) )
+bindRangeControl(slantInput, slant => ui.setState({ slant }) )
+bindRangeControl(sizeInput, size => ui.setState({ size }) )
+
+// weightInput.addEventListener('input',
+// weightInput.valueAsNumber !== undefined ? ev => {
+// setWeight(weightInput.valueAsNumber)
+// } : ev => {
+// setWeight(parseFloat(weightInput.value))
+// }
+// )
+
+// UI control: slant slider
+// slantInput.addEventListener('input',
+// slantInput.valueAsNumber !== undefined ? ev => {
+// setSlant(slantInput.valueAsNumber)
+// } : ev => {
+// setSlant(parseFloat(slantInput.value))
+// }
+// )
// UI control: animate
var animateInput = document.querySelector('[name="animate"]')