Skip to content

Commit b660a48

Browse files
committed
improve font picker
1 parent adeb57e commit b660a48

3 files changed

Lines changed: 64 additions & 24 deletions

File tree

_includes/html.njk

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,37 @@
1010
rel="stylesheet"
1111
href="{{ '/inter/inter.css' | url }}"
1212
data-font="Inter var"
13+
data-weights="100 900"
1314
/>
1415
<link
1516
rel="stylesheet"
1617
href="{{ '/rubik/rubik.css' | url }}"
17-
data-font="Rubik"
18+
data-font="Rubik var"
19+
data-weights="300 900"
20+
/>
21+
<link
22+
rel="stylesheet"
23+
href="{{ '/lora/lora.css' | url }}"
24+
data-font="Lora var"
25+
data-weights="400 700"
1826
/>
1927
<link
2028
rel="stylesheet"
2129
href="{{ '/playfair/playfair.css' | url }}"
2230
data-font="Playfair Display var"
31+
data-weights="400 900"
2332
/>
2433
<link
2534
rel="stylesheet"
2635
href="{{ '/open-sans/open-sans.css' | url }}"
2736
data-font="Open Sans var"
37+
data-weights="300 800"
2838
/>
2939
<link
3040
rel="stylesheet"
3141
href="{{ '/montserrat/montserrat.css' | url }}"
32-
data-font="Montserrat"
42+
data-font="Montserrat var"
43+
data-weights="100 900"
3344
/>
3445
<link rel="stylesheet" href="https://alembic.openlab.dev/labcoat.css" />
3546
<style>
@@ -40,18 +51,13 @@
4051
body {
4152
--fallback: 'Inter var', Inter, system-ui, sans-serif;
4253
font-family: var(--font, var(--fallback));
54+
font-weight: var(--weight, 400);
4355
}
44-
.field {
45-
display: inline-flex;
46-
align-items: center;
47-
gap: var(--s-3);
48-
flex-wrap: wrap;
49-
}
50-
.field-label {
51-
flex-shrink: 0;
56+
label:has(#font) {
57+
--measure: 20ch;
5258
}
53-
#fontPicker {
54-
color: inherit;
59+
label:has(#weight) {
60+
--measure: 30ch;
5561
}
5662
h3 {
5763
--flow: 2em;
@@ -82,20 +88,44 @@
8288
</footer>
8389

8490
<script>
91+
function setFont(font) {
92+
document.documentElement.style.setProperty('--font', `'${font}'`)
93+
94+
const style = document.querySelector(`[data-font="${font}"]`)
95+
if (style.dataset.weights) {
96+
const [min, max] = style.dataset.weights.split(/\s+/)
97+
document.getElementById('weight').min = min
98+
document.getElementById('weight').max = max
99+
}
100+
101+
document.getElementById('weight').value = 400
102+
setWeight(400)
103+
}
104+
function setWeight(value) {
105+
document.documentElement.style.setProperty('--weight', value)
106+
document.getElementById('weight').previousElementSibling.textContent =
107+
`Weight (${value})`
108+
}
109+
85110
for (const elem of document.querySelectorAll('link[data-font]')) {
86111
const option = document
87-
.getElementById('fontPicker')
112+
.getElementById('font')
88113
.appendChild(document.createElement('option'))
89114
option.value = elem.dataset.font
90115
option.innerText = elem.dataset.font
91116
option.selected = elem.dataset.font === 'Inter var'
92117
}
93-
document.getElementById('fontPicker').oninput = (e) => {
94-
document.documentElement.style.setProperty(
95-
'--font',
96-
`'${e.target.value}'`
97-
)
118+
119+
document.getElementById('font').oninput = (e) => {
120+
setFont(e.target.value)
121+
}
122+
123+
document.getElementById('weight').oninput = (e) => {
124+
setWeight(e.target.value)
98125
}
126+
127+
document.getElementById('font').value = 'Inter var'
128+
setFont('Inter var')
99129
</script>
100130

101131
<!-- @openlab/alembic inject-js -->

eleventy.config.cjs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
11
const { eleventyAlembic } = require('@openlab/alembic/11ty')
22

33
const fontPicker = `
4-
<label class="field">
5-
<span class="field-label">Pick your font!</span>
6-
<select id="fontPicker" name="font"></select>
7-
</label>
4+
<details>
5+
<summary>Font picker</summary>
6+
<cluster-layout space="s-1" justify="space-between">
7+
<label class="field" for="font">
8+
<span class="field-label">Font</span>
9+
<select id="font" name="font"></select>
10+
</label>
11+
12+
<label class="field" for="weight">
13+
<span class="field-label">Font weight</span>
14+
<input type="range" min="400" max="700" id="weight" name="weight">
15+
</label>
16+
</cluster-layout>
17+
</details>
818
`
919

1020
module.exports = function (eleventyConfig) {

source/lora/lora.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
font-style: normal;
66
font-weight: 400 700;
77
font-display: swap;
8-
src: url('Lora-Italic[wght].woff2') format('woff2');
8+
src: url('Lora[wght].woff2') format('woff2');
99
}
1010

1111
@font-face {
1212
font-family: 'Lora var';
1313
font-style: italic;
1414
font-weight: 400 700;
1515
font-display: swap;
16-
src: url('Lora[wght].woff2') format('woff2');
16+
src: url('Lora-Italic[wght].woff2') format('woff2');
1717
}
1818

1919
/* Static */

0 commit comments

Comments
 (0)