@amsterdam/design-system-css 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/accordion/accordion.css +1 -69
- package/dist/accordion/accordion.css.map +1 -1
- package/dist/aspect-ratio/aspect-ratio.css +30 -0
- package/dist/aspect-ratio/aspect-ratio.css.map +1 -0
- package/dist/blockquote/blockquote.css +1 -0
- package/dist/blockquote/blockquote.css.map +1 -0
- package/dist/breadcrumb/breadcrumb.css +1 -0
- package/dist/breadcrumb/breadcrumb.css.map +1 -0
- package/dist/button/button.css +1 -706
- package/dist/button/button.css.map +1 -1
- package/dist/buttons/button/button.css +729 -0
- package/dist/buttons/button/button.css.map +1 -0
- package/dist/card/card.css +56 -0
- package/dist/card/card.css.map +1 -0
- package/dist/checkbox/checkbox.css +1 -0
- package/dist/checkbox/checkbox.css.map +1 -0
- package/dist/containers/accordion/accordion.css +69 -0
- package/dist/containers/accordion/accordion.css.map +1 -0
- package/dist/containers/footer/footer.css +35 -0
- package/dist/containers/footer/footer.css.map +1 -0
- package/dist/containers/visually-hidden/visually-hidden.css +18 -0
- package/dist/containers/visually-hidden/visually-hidden.css.map +1 -0
- package/dist/footer/footer.css +1 -0
- package/dist/footer/footer.css.map +1 -0
- package/dist/form-label/form-label.css +1 -26
- package/dist/form-label/form-label.css.map +1 -1
- package/dist/forms/checkbox/checkbox.css +170 -0
- package/dist/forms/checkbox/checkbox.css.map +1 -0
- package/dist/forms/form-label/form-label.css +26 -0
- package/dist/forms/form-label/form-label.css.map +1 -0
- package/dist/grid/grid-cell.css +1 -0
- package/dist/grid/grid-cell.css.map +1 -0
- package/dist/grid/page-grid.css +1 -0
- package/dist/grid/page-grid.css.map +1 -0
- package/dist/heading/heading.css +1 -64
- package/dist/heading/heading.css.map +1 -1
- package/dist/hero/hero.css +1 -0
- package/dist/hero/hero.css.map +1 -0
- package/dist/icon/icon.css +1 -122
- package/dist/icon/icon.css.map +1 -1
- package/dist/index.css +1 -0
- package/dist/index.css.map +1 -0
- package/dist/layout/grid-cell/grid-cell.css +88 -0
- package/dist/layout/grid-cell/grid-cell.css.map +1 -0
- package/dist/layout/page-grid/page-grid.css +26 -0
- package/dist/layout/page-grid/page-grid.css.map +1 -0
- package/dist/link/link.css +1 -97
- package/dist/link/link.css.map +1 -1
- package/dist/media/icon/icon.css +122 -0
- package/dist/media/icon/icon.css.map +1 -0
- package/dist/navigation/breadcrumb/breadcrumb.css +67 -0
- package/dist/navigation/breadcrumb/breadcrumb.css.map +1 -0
- package/dist/navigation/link/link.css +111 -0
- package/dist/navigation/link/link.css.map +1 -0
- package/dist/navigation/page-menu/page-menu.css +83 -0
- package/dist/navigation/page-menu/page-menu.css.map +1 -0
- package/dist/navigation/top-task-link/top-task-link.css +59 -0
- package/dist/navigation/top-task-link/top-task-link.css.map +1 -0
- package/dist/ordered-list/ordered-list.css +1 -0
- package/dist/ordered-list/ordered-list.css.map +1 -0
- package/dist/page-heading/page-heading.css +1 -0
- package/dist/page-heading/page-heading.css.map +1 -0
- package/dist/page-menu/page-menu.css +1 -0
- package/dist/page-menu/page-menu.css.map +1 -0
- package/dist/paragraph/paragraph.css +1 -49
- package/dist/paragraph/paragraph.css.map +1 -1
- package/dist/switch/switch.css +59 -0
- package/dist/switch/switch.css.map +1 -0
- package/dist/testula/testula.css +9 -0
- package/dist/testula/testula.css.map +1 -0
- package/dist/text/blockquote/blockquote.css +43 -0
- package/dist/text/blockquote/blockquote.css.map +1 -0
- package/dist/text/heading/heading.css +67 -0
- package/dist/text/heading/heading.css.map +1 -0
- package/dist/text/ordered-list/ordered-list.css +54 -0
- package/dist/text/ordered-list/ordered-list.css.map +1 -0
- package/dist/text/page-heading/page-heading.css +34 -0
- package/dist/text/page-heading/page-heading.css.map +1 -0
- package/dist/text/paragraph/paragraph.css +53 -0
- package/dist/text/paragraph/paragraph.css.map +1 -0
- package/dist/text/unordered-list/unordered-list.css +54 -0
- package/dist/text/unordered-list/unordered-list.css.map +1 -0
- package/dist/top-task-link/top-task-link.css +1 -0
- package/dist/top-task-link/top-task-link.css.map +1 -0
- package/dist/unordered-list/unordered-list.css +1 -47
- package/dist/unordered-list/unordered-list.css.map +1 -1
- package/dist/visually-hidden/visually-hidden.css +1 -0
- package/dist/visually-hidden/visually-hidden.css.map +1 -0
- package/package.json +7 -6
- package/src/accordion/README.md +25 -2
- package/src/accordion/accordion.scss +2 -2
- package/src/blockquote/README.md +14 -0
- package/src/blockquote/blockquote.scss +41 -0
- package/src/breadcrumb/README.md +15 -0
- package/src/breadcrumb/breadcrumb.scss +68 -0
- package/src/button/button.scss +36 -4
- package/src/checkbox/README.md +27 -0
- package/src/checkbox/checkbox-css.md +3 -0
- package/src/checkbox/checkbox.scss +225 -0
- package/src/footer/README.md +11 -0
- package/src/footer/footer-css.md +11 -0
- package/src/footer/footer.scss +29 -0
- package/src/form-label/form-label.scss +2 -2
- package/src/grid/README.md +11 -0
- package/src/grid/grid-cell.scss +18 -0
- package/src/grid/page-grid.scss +19 -0
- package/src/heading/heading.scss +18 -15
- package/src/icon/icon.scss +10 -10
- package/src/index.scss +19 -0
- package/src/link/README.md +28 -12
- package/src/link/link.scss +61 -36
- package/src/ordered-list/README.md +7 -0
- package/src/ordered-list/ordered-list.scss +53 -0
- package/src/page-heading/README.md +16 -0
- package/src/page-heading/page-heading.scss +31 -0
- package/src/page-menu/README.md +15 -0
- package/src/page-menu/page-menu.scss +79 -0
- package/src/paragraph/paragraph.scss +12 -8
- package/src/top-task-link/README.md +15 -0
- package/src/top-task-link/top-task-link.scss +55 -0
- package/src/unordered-list/README.md +5 -13
- package/src/unordered-list/unordered-list.scss +26 -17
- package/src/visually-hidden/README.md +5 -0
- package/src/visually-hidden/visually-hidden.scss +17 -0
- package/dist/list/list.css +0 -12
- package/dist/list/list.css.map +0 -1
- package/src/list/list.scss +0 -16
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license EUPL-1.2+
|
|
3
|
+
* Copyright (c) 2023 Gemeente Amsterdam
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
@import "../../utils/breakpoint";
|
|
7
|
+
|
|
8
|
+
.amsterdam-checkbox__input {
|
|
9
|
+
appearance: none;
|
|
10
|
+
margin-block: 0;
|
|
11
|
+
margin-inline: 0;
|
|
12
|
+
opacity: 0%; /* to hide native input field in older iOS */
|
|
13
|
+
|
|
14
|
+
&:focus-visible + label {
|
|
15
|
+
outline: auto;
|
|
16
|
+
outline-offset: var(--amsterdam-checkbox-outline-offset);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.amsterdam-checkbox__checkmark {
|
|
21
|
+
align-items: center;
|
|
22
|
+
display: flex;
|
|
23
|
+
flex-shrink: 0;
|
|
24
|
+
height: calc(var(--amsterdam-checkbox-checkmark-narrow-size) * var(--amsterdam-checkbox-checkmark-multiplier));
|
|
25
|
+
width: 1.5rem;
|
|
26
|
+
|
|
27
|
+
&::after {
|
|
28
|
+
border-color: var(--amsterdam-checkbox-checkmark-border-color);
|
|
29
|
+
border-style: solid;
|
|
30
|
+
border-width: 2px;
|
|
31
|
+
box-sizing: border-box;
|
|
32
|
+
content: "";
|
|
33
|
+
height: 1.5rem;
|
|
34
|
+
width: 100%;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@media screen and (width > $amsterdam-breakpoint) {
|
|
38
|
+
height: calc(var(--amsterdam-checkbox-checkmark-wide-size) * var(--amsterdam-checkbox-checkmark-multiplier));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.amsterdam-checkbox__label {
|
|
43
|
+
color: var(--amsterdam-checkbox-color);
|
|
44
|
+
cursor: pointer;
|
|
45
|
+
display: inline-flex;
|
|
46
|
+
font-family: var(--amsterdam-checkbox-font-family);
|
|
47
|
+
font-size: var(--amsterdam-checkbox-narrow-font-size);
|
|
48
|
+
font-weight: 400;
|
|
49
|
+
gap: 0.5rem;
|
|
50
|
+
line-height: var(--amsterdam-checkbox-line-height);
|
|
51
|
+
|
|
52
|
+
&:hover {
|
|
53
|
+
color: var(--amsterdam-checkbox-hover-color);
|
|
54
|
+
text-decoration: underline;
|
|
55
|
+
text-decoration-thickness: 2px;
|
|
56
|
+
text-underline-offset: 3px;
|
|
57
|
+
|
|
58
|
+
.amsterdam-checkbox__checkmark::after {
|
|
59
|
+
border-color: var(--amsterdam-checkbox-checkmark-hover-border-color);
|
|
60
|
+
border-width: 3px;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@media screen and (width > $amsterdam-breakpoint) {
|
|
65
|
+
font-size: var(--amsterdam-checkbox-wide-font-size);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Default checked
|
|
70
|
+
.amsterdam-checkbox__input:checked {
|
|
71
|
+
+ .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
|
|
72
|
+
background-color: var(--amsterdam-checkbox-checkmark-checked-background-color);
|
|
73
|
+
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2032%2032%22%20fill%3D%22%23ffffff%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20d%3D%22M12.216%2027.016%200%2014.168l2.91-2.77%209.346%209.837L29.129%204%2032%206.8z%22%2F%3E%3C%2Fsvg%3E");
|
|
74
|
+
background-position: center;
|
|
75
|
+
background-repeat: no-repeat;
|
|
76
|
+
background-size: 1rem;
|
|
77
|
+
border: none;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Default indeterminate
|
|
82
|
+
.amsterdam-checkbox__input:indeterminate {
|
|
83
|
+
+ .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
|
|
84
|
+
background-color: var(--amsterdam-checkbox-checkmark-indeterminate-background-color);
|
|
85
|
+
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0id2hpdGUiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTAgMTMuNzE0aDMydjRIMHoiLz48L3N2Zz4=");
|
|
86
|
+
background-position: center;
|
|
87
|
+
background-repeat: no-repeat;
|
|
88
|
+
background-size: 1rem;
|
|
89
|
+
border: none;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Invalid unchecked
|
|
94
|
+
.amsterdam-checkbox__input:invalid,
|
|
95
|
+
.amsterdam-checkbox__input[aria-invalid="true"] {
|
|
96
|
+
+ .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
|
|
97
|
+
border-color: var(--amsterdam-checkbox-checkmark-invalid-border-color);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Disabled unchecked
|
|
102
|
+
.amsterdam-checkbox__input:disabled {
|
|
103
|
+
+ .amsterdam-checkbox__label {
|
|
104
|
+
color: var(--amsterdam-checkbox-disabled-color);
|
|
105
|
+
cursor: not-allowed;
|
|
106
|
+
|
|
107
|
+
.amsterdam-checkbox__checkmark::after {
|
|
108
|
+
border-color: var(--amsterdam-checkbox-checkmark-disabled-border-color);
|
|
109
|
+
border-width: 2px;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Invalid checked
|
|
115
|
+
.amsterdam-checkbox__input:invalid:checked,
|
|
116
|
+
.amsterdam-checkbox__input[aria-invalid="true"]:checked {
|
|
117
|
+
+ .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
|
|
118
|
+
background-color: var(--amsterdam-checkbox-checkmark-invalid-checked-background-color);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Invalid indeterminate
|
|
123
|
+
.amsterdam-checkbox__input:invalid:indeterminate,
|
|
124
|
+
.amsterdam-checkbox__input[aria-invalid="true"]:indeterminate {
|
|
125
|
+
+ .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
|
|
126
|
+
background-color: var(--amsterdam-checkbox-checkmark-invalid-indeterminate-background-color);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Disabled label
|
|
131
|
+
.amsterdam-checkbox__input:disabled + .amsterdam-checkbox__label:hover {
|
|
132
|
+
text-decoration: none;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Disabled checked
|
|
136
|
+
.amsterdam-checkbox__input:disabled:checked {
|
|
137
|
+
+ .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
|
|
138
|
+
background-color: var(--amsterdam-checkbox-checkmark-disabled-checked-background-color);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Disabled indeterminate
|
|
143
|
+
.amsterdam-checkbox__input:disabled:indeterminate {
|
|
144
|
+
+ .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
|
|
145
|
+
background-color: var(--amsterdam-checkbox-checkmark-disabled-indeterminate-background-color);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Disabled invalid unchecked
|
|
150
|
+
.amsterdam-checkbox__input:invalid:disabled,
|
|
151
|
+
.amsterdam-checkbox__input[aria-invalid="true"]:disabled {
|
|
152
|
+
+ .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
|
|
153
|
+
// TODO: currently disabled invalid gets the same styling as disabled. This should get its own styling.
|
|
154
|
+
border-color: var(--amsterdam-checkbox-checkmark-disabled-border-color);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// HOVER STATES
|
|
159
|
+
|
|
160
|
+
// Invalid unchecked hover
|
|
161
|
+
:is(.amsterdam-checkbox__input:invalid, .amsterdam-checkbox__input[aria-invalid="true"])
|
|
162
|
+
+ .amsterdam-checkbox__label:hover
|
|
163
|
+
.amsterdam-checkbox__checkmark::after {
|
|
164
|
+
// TODO: this should be the (currently non-existent) dark red hover color
|
|
165
|
+
border-color: var(--amsterdam-checkbox-checkmark-invalid-hover-border-color);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Default checked hover
|
|
169
|
+
.amsterdam-checkbox__input:checked + .amsterdam-checkbox__label:hover .amsterdam-checkbox__checkmark::after {
|
|
170
|
+
background-color: var(--amsterdam-checkbox-checkmark-checked-hover-background-color);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Default indeterminate hover
|
|
174
|
+
.amsterdam-checkbox__input:indeterminate + .amsterdam-checkbox__label:hover .amsterdam-checkbox__checkmark::after {
|
|
175
|
+
background-color: var(--amsterdam-checkbox-checkmark-indeterminate-hover-background-color);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Invalid checked hover
|
|
179
|
+
:is(.amsterdam-checkbox__input:invalid:checked, .amsterdam-checkbox__input[aria-invalid="true"]:checked)
|
|
180
|
+
+ .amsterdam-checkbox__label:hover
|
|
181
|
+
.amsterdam-checkbox__checkmark::after {
|
|
182
|
+
// TODO: this should be the (currently non-existent) dark red hover color
|
|
183
|
+
background-color: var(--amsterdam-checkbox-checkmark-invalid-checked-hover-background-color);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Invalid indeterminate hover
|
|
187
|
+
:is(.amsterdam-checkbox__input:invalid:indeterminate, .amsterdam-checkbox__input[aria-invalid="true"]:indeterminate)
|
|
188
|
+
+ .amsterdam-checkbox__label:hover
|
|
189
|
+
.amsterdam-checkbox__checkmark::after {
|
|
190
|
+
// TODO: this should be the (currently non-existent) dark red hover color
|
|
191
|
+
background-color: var(--amsterdam-checkbox-checkmark-invalid-indeterminate-hover-background-color);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Disabled checked hover
|
|
195
|
+
.amsterdam-checkbox__input:disabled:checked + .amsterdam-checkbox__label:hover .amsterdam-checkbox__checkmark::after {
|
|
196
|
+
background-color: var(--amsterdam-checkbox-checkmark-disabled-checked-hover-background-color);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Disabled indeterminate hover
|
|
200
|
+
.amsterdam-checkbox__input:disabled:indeterminate
|
|
201
|
+
+ .amsterdam-checkbox__label:hover
|
|
202
|
+
.amsterdam-checkbox__checkmark::after {
|
|
203
|
+
background-color: var(--amsterdam-checkbox-checkmark-disabled-indeterminate-hover-background-color);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Disabled invalid unchecked hover
|
|
207
|
+
:is(.amsterdam-checkbox__input:invalid:disabled, .amsterdam-checkbox__input[aria-invalid="true"]:disabled)
|
|
208
|
+
+ .amsterdam-checkbox__label:hover
|
|
209
|
+
.amsterdam-checkbox__checkmark::after {
|
|
210
|
+
// TODO: currently disabled invalid gets the same styling as disabled. This should get its own styling.
|
|
211
|
+
border-color: var(--amsterdam-checkbox-checkmark-disabled-border-color);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// DISABLED INVALID STATES
|
|
215
|
+
|
|
216
|
+
// Disabled invalid checked & indeterminate
|
|
217
|
+
.amsterdam-checkbox__input:invalid:disabled:checked,
|
|
218
|
+
.amsterdam-checkbox__input:invalid:disabled:indeterminate,
|
|
219
|
+
.amsterdam-checkbox__input[aria-invalid="true"]:disabled:checked,
|
|
220
|
+
.amsterdam-checkbox__input[aria-invalid="true"]:disabled:indeterminate {
|
|
221
|
+
+ .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
|
|
222
|
+
// TODO: currently disabled invalid gets the same styling as disabled. This should get its own styling.
|
|
223
|
+
background-color: var(--amsterdam-checkbox-checkmark-disabled-checked-background-color);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Footer
|
|
2
|
+
|
|
3
|
+
De footer (in het Nederlands: voettekst) sluit iedere webpagina af. De inhoud is service-informatie. Een gedeelte is voorgeschreven en een deel wordt ingevuld vanuit de doelstelling van de website.
|
|
4
|
+
|
|
5
|
+
## Richtlijnen
|
|
6
|
+
|
|
7
|
+
- De voettekst is verplicht, er staat er 1 op elke pagina.
|
|
8
|
+
- De eerste kolom richt zich op contactinformatie. De informatie is zo specifiek mogelijk gebonden aan de betreffende website of pagina (bijvoorbeeld een chatmogelijkheid indien aanwezig).
|
|
9
|
+
- De tweede kolom bevat links naar relevante (online) sites of bronnen.
|
|
10
|
+
- De derde kolom verwijst naar nieuwsbrieven, socials enz.
|
|
11
|
+
- Het laatste deel van de voettekst is bedoeld voor koppelingen naar privacy, cookieverklaring, uitleg over de website e.d. Het is niet bedoeld voor koppelingen naar bijvoorbeeld contactinformatie.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# CSS Footer
|
|
2
|
+
|
|
3
|
+
Gebruik het `footer` element als buitenste container van de footer.
|
|
4
|
+
|
|
5
|
+
De voettekst is blauw met witte tekst en iconen, met onderaan een witte balk. Op desktop heeft het blauwe deel van de voettekst 3 kolommen. Op mobiel heeft het blauwe deel van de voettekst 1 kolom. Kolom 1, 2 en 3 van de desktop staan dan onder elkaar.
|
|
6
|
+
|
|
7
|
+
De functionaliteit op desktop en mobiel is gelijk.
|
|
8
|
+
|
|
9
|
+
De hoogte wordt bepaald door de content. De breedte van de voettekst op desktop is niet schermvullend.
|
|
10
|
+
|
|
11
|
+
De voettekst wordt nooit ingeklapt. Ook niet in mobiele weergave.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license EUPL-1.2+
|
|
3
|
+
* Copyright (c) 2023 Gemeente Amsterdam
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
@import "../../utils/breakpoint";
|
|
7
|
+
|
|
8
|
+
.amsterdam-footer__top {
|
|
9
|
+
background-color: var(--amsterdam-footer-top-background-color);
|
|
10
|
+
padding-block: 2.5rem;
|
|
11
|
+
padding-inline: 2rem; /* TODO: For now I've set a padding here, this should eventually be handled by PageGrid */
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@media screen and (width > $amsterdam-breakpoint) {
|
|
15
|
+
.amsterdam-footer__top {
|
|
16
|
+
grid-template-columns: repeat(var(--amsterdam-page-grid-column-count-wide), 1fr);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.amsterdam-footer__column {
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-direction: column;
|
|
23
|
+
gap: 2.5rem;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.amsterdam-footer__bottom {
|
|
27
|
+
padding-block: 0.5rem;
|
|
28
|
+
padding-inline: 2rem; /* TODO: For now I've set a padding here, this should eventually be handled by PageGrid */
|
|
29
|
+
}
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
.amsterdam-form-label {
|
|
9
9
|
color: var(--amsterdam-form-label-color);
|
|
10
10
|
font-family: var(--amsterdam-form-label-font-family);
|
|
11
|
-
font-size: var(--amsterdam-form-label-font-size
|
|
11
|
+
font-size: var(--amsterdam-form-label-narrow-font-size);
|
|
12
12
|
font-weight: var(--amsterdam-form-label-font-weight);
|
|
13
13
|
line-height: var(--amsterdam-form-label-line-height);
|
|
14
14
|
|
|
15
15
|
@media screen and (width > $amsterdam-breakpoint) {
|
|
16
|
-
font-size: var(--amsterdam-form-label-font-size
|
|
16
|
+
font-size: var(--amsterdam-form-label-wide-font-size);
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Page grid
|
|
2
|
+
|
|
3
|
+
Onder alle pagina’s en schermen ligt hetzelfde grid. Het grid is responsive, dus de precieze breedte van een kolom is afhankelijk van de schermbreedte.
|
|
4
|
+
|
|
5
|
+
De maximale breedte van het grid is 1440 pixels. In een later stadium bieden we een grid van 1920 aan.
|
|
6
|
+
|
|
7
|
+
Op schermen tot 854 pixels breed bestaat het grid uit 4 kolommen, op bredere schermen worden dat er 12. Het grid staat horizontaal gecentreerd op de pagina.
|
|
8
|
+
|
|
9
|
+
De witruimte tussen de kolommen is ook flexibel: die groeit lineair van 8 pixels bij een breedte van 320 naar 24 pixels bij een breedte van 1440.
|
|
10
|
+
|
|
11
|
+
Pagina-elementen worden op het grid geplaatst en beslaan een bepaald aantal kolommen.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license EUPL-1.2+
|
|
3
|
+
* Copyright (c) 2023 Gemeente Amsterdam
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
@import "../../utils/breakpoint";
|
|
7
|
+
|
|
8
|
+
@media screen and (width > $amsterdam-breakpoint) {
|
|
9
|
+
@for $i from 1 through 12 {
|
|
10
|
+
.amsterdam-grid-column-start-#{$i} {
|
|
11
|
+
grid-column-start: $i;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.amsterdam-grid-column-span-#{$i} {
|
|
15
|
+
grid-column-end: span $i;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license EUPL-1.2+
|
|
3
|
+
* Copyright (c) 2023 Gemeente Amsterdam
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
@import "../../utils/breakpoint";
|
|
7
|
+
|
|
8
|
+
.amsterdam-page-grid {
|
|
9
|
+
column-gap: var(--amsterdam-page-grid-column-gap);
|
|
10
|
+
display: grid;
|
|
11
|
+
grid-template-columns: repeat(var(--amsterdam-page-grid-column-count-narrow), 1fr);
|
|
12
|
+
max-width: var(--amsterdam-page-grid-max-width);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@media screen and (width > $amsterdam-breakpoint) {
|
|
16
|
+
.amsterdam-page-grid {
|
|
17
|
+
grid-template-columns: repeat(var(--amsterdam-page-grid-column-count-wide), 1fr);
|
|
18
|
+
}
|
|
19
|
+
}
|
package/src/heading/heading.scss
CHANGED
|
@@ -7,13 +7,12 @@
|
|
|
7
7
|
|
|
8
8
|
@mixin reset {
|
|
9
9
|
box-sizing: border-box;
|
|
10
|
-
break-after: avoid;
|
|
11
|
-
break-inside: avoid;
|
|
12
10
|
margin-block: 0;
|
|
13
|
-
margin-inline: 0;
|
|
14
11
|
}
|
|
15
12
|
|
|
16
13
|
.amsterdam-heading {
|
|
14
|
+
break-after: avoid;
|
|
15
|
+
break-inside: avoid;
|
|
17
16
|
color: var(--amsterdam-heading-color);
|
|
18
17
|
font-family: var(--amsterdam-heading-font-family);
|
|
19
18
|
font-weight: var(--amsterdam-heading-font-weight);
|
|
@@ -21,38 +20,42 @@
|
|
|
21
20
|
@include reset;
|
|
22
21
|
}
|
|
23
22
|
|
|
24
|
-
.amsterdam-heading
|
|
25
|
-
font-size: var(--amsterdam-heading-1-font-size
|
|
23
|
+
.amsterdam-heading--1 {
|
|
24
|
+
font-size: var(--amsterdam-heading-1-narrow-font-size);
|
|
26
25
|
line-height: var(--amsterdam-heading-1-line-height);
|
|
27
26
|
|
|
28
27
|
@media screen and (width > $amsterdam-breakpoint) {
|
|
29
|
-
font-size: var(--amsterdam-heading-1-font-size
|
|
28
|
+
font-size: var(--amsterdam-heading-1-wide-font-size);
|
|
30
29
|
}
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
.amsterdam-heading
|
|
34
|
-
font-size: var(--amsterdam-heading-2-font-size
|
|
32
|
+
.amsterdam-heading--2 {
|
|
33
|
+
font-size: var(--amsterdam-heading-2-narrow-font-size);
|
|
35
34
|
line-height: var(--amsterdam-heading-2-line-height);
|
|
36
35
|
|
|
37
36
|
@media screen and (width > $amsterdam-breakpoint) {
|
|
38
|
-
font-size: var(--amsterdam-heading-2-font-size
|
|
37
|
+
font-size: var(--amsterdam-heading-2-wide-font-size);
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
40
|
|
|
42
|
-
.amsterdam-heading
|
|
43
|
-
font-size: var(--amsterdam-heading-3-font-size
|
|
41
|
+
.amsterdam-heading--3 {
|
|
42
|
+
font-size: var(--amsterdam-heading-3-narrow-font-size);
|
|
44
43
|
line-height: var(--amsterdam-heading-3-line-height);
|
|
45
44
|
|
|
46
45
|
@media screen and (width > $amsterdam-breakpoint) {
|
|
47
|
-
font-size: var(--amsterdam-heading-3-font-size
|
|
46
|
+
font-size: var(--amsterdam-heading-3-wide-font-size);
|
|
48
47
|
}
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
.amsterdam-heading
|
|
52
|
-
font-size: var(--amsterdam-heading-4-font-size
|
|
50
|
+
.amsterdam-heading--4 {
|
|
51
|
+
font-size: var(--amsterdam-heading-4-narrow-font-size);
|
|
53
52
|
line-height: var(--amsterdam-heading-4-line-height);
|
|
54
53
|
|
|
55
54
|
@media screen and (width > $amsterdam-breakpoint) {
|
|
56
|
-
font-size: var(--amsterdam-heading-4-font-size
|
|
55
|
+
font-size: var(--amsterdam-heading-4-wide-font-size);
|
|
57
56
|
}
|
|
58
57
|
}
|
|
58
|
+
|
|
59
|
+
.amsterdam-heading--inverse-color {
|
|
60
|
+
color: var(--amsterdam-heading-inverse-color);
|
|
61
|
+
}
|
package/src/icon/icon.scss
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
fill: currentColor;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
.amsterdam-icon
|
|
17
|
+
.amsterdam-icon--size-3 {
|
|
18
18
|
height: calc(var(--amsterdam-icon-size-3-icon-size-narrow) * var(--amsterdam-icon-size-3-container-multiplier));
|
|
19
19
|
|
|
20
20
|
@media screen and (width > $amsterdam-breakpoint) {
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
.amsterdam-icon
|
|
25
|
+
.amsterdam-icon--size-3 svg {
|
|
26
26
|
height: var(--amsterdam-icon-size-3-icon-size-narrow);
|
|
27
27
|
width: var(--amsterdam-icon-size-3-icon-size-narrow);
|
|
28
28
|
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
width: var(--amsterdam-icon-size-3-icon-size-wide);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
.amsterdam-icon
|
|
34
|
+
.amsterdam-icon--size-4 {
|
|
35
35
|
height: calc(var(--amsterdam-icon-size-4-icon-size-narrow) * var(--amsterdam-icon-size-4-container-multiplier));
|
|
36
36
|
|
|
37
37
|
@media screen and (width > $amsterdam-breakpoint) {
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
.amsterdam-icon
|
|
42
|
+
.amsterdam-icon--size-4 svg {
|
|
43
43
|
height: var(--amsterdam-icon-size-4-icon-size-narrow);
|
|
44
44
|
width: var(--amsterdam-icon-size-4-icon-size-narrow);
|
|
45
45
|
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
.amsterdam-icon
|
|
52
|
+
.amsterdam-icon--size-5 {
|
|
53
53
|
height: calc(var(--amsterdam-icon-size-5-icon-size-narrow) * var(--amsterdam-icon-size-5-container-multiplier));
|
|
54
54
|
|
|
55
55
|
@media screen and (width > $amsterdam-breakpoint) {
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
.amsterdam-icon
|
|
60
|
+
.amsterdam-icon--size-5 svg {
|
|
61
61
|
height: var(--amsterdam-icon-size-5-icon-size-narrow);
|
|
62
62
|
width: var(--amsterdam-icon-size-5-icon-size-narrow);
|
|
63
63
|
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
.amsterdam-icon
|
|
70
|
+
.amsterdam-icon--size-6 {
|
|
71
71
|
height: calc(var(--amsterdam-icon-size-6-icon-size-narrow) * var(--amsterdam-icon-size-6-container-multiplier));
|
|
72
72
|
|
|
73
73
|
@media screen and (width > $amsterdam-breakpoint) {
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
.amsterdam-icon
|
|
78
|
+
.amsterdam-icon--size-6 svg {
|
|
79
79
|
height: var(--amsterdam-icon-size-6-icon-size-narrow);
|
|
80
80
|
width: var(--amsterdam-icon-size-6-icon-size-narrow);
|
|
81
81
|
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
.amsterdam-icon
|
|
88
|
+
.amsterdam-icon--size-7 {
|
|
89
89
|
height: calc(var(--amsterdam-icon-size-7-icon-size-narrow) * var(--amsterdam-icon-size-7-container-multiplier));
|
|
90
90
|
|
|
91
91
|
@media screen and (width > $amsterdam-breakpoint) {
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
.amsterdam-icon
|
|
96
|
+
.amsterdam-icon--size-7 svg {
|
|
97
97
|
height: var(--amsterdam-icon-size-7-icon-size-narrow);
|
|
98
98
|
width: var(--amsterdam-icon-size-7-icon-size-narrow);
|
|
99
99
|
|
package/src/index.scss
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license EUPL-1.2+
|
|
3
|
+
* Copyright (c) 2023 Gemeente Amsterdam
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/* Append here */
|
|
7
|
+
@import "./page-menu/page-menu";
|
|
8
|
+
@import "./accordion/accordion";
|
|
9
|
+
@import "./breadcrumb/breadcrumb";
|
|
10
|
+
@import "./button/button";
|
|
11
|
+
@import "./form-label/form-label";
|
|
12
|
+
@import "./heading/heading";
|
|
13
|
+
@import "./icon/icon";
|
|
14
|
+
@import "./link/link";
|
|
15
|
+
@import "./paragraph/paragraph";
|
|
16
|
+
@import "./unordered-list/unordered-list";
|
|
17
|
+
@import "./ordered-list/ordered-list";
|
|
18
|
+
@import "./grid/grid-cell";
|
|
19
|
+
@import "./grid/page-grid";
|
package/src/link/README.md
CHANGED
|
@@ -1,26 +1,42 @@
|
|
|
1
1
|
# Link
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Een link (in het Nederlands: koppeling) wordt gebruikt als navigatie-element en kan op zichzelf of inline met tekst worden gebruikt. Het is de lichtgewicht variant voor navigatie.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Richtlijnen
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Gebruik een link in de volgende gevallen:
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
- Navigatie naar een andere pagina binnen de website of applicatie
|
|
10
|
+
- Navigatie naar een andere website (zie [Externe links](#externe-links))
|
|
11
|
+
- Navigatie naar een element op dezelfde pagina
|
|
12
|
+
- Koppeling naar e-mails of telefoonnummers (begin de link met `mailto:` of `tel:`)
|
|
10
13
|
|
|
11
|
-
|
|
14
|
+
Een link is een navigatie component. Gebruik een knop in plaats van een link als er een actie gewenst is.
|
|
12
15
|
|
|
13
|
-
|
|
16
|
+
<!--
|
|
17
|
+
TODO: According to the spec, you should use a link for downloads as well. Last time I checked, different browsers handled this differently,
|
|
18
|
+
which led to unexpected results. Maybe that changed in the meantime. Do we want to figure this out and describe this in the docs as well?
|
|
19
|
+
-->
|
|
14
20
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- [_Hover, focus, active_, door Wunder](https://wunder.io/wunderpedia/accessibility/accessible-uis/hover-focus-active/): goede uitleg over de states die elementen zoals de link en button hebben in browsers.
|
|
19
|
-
- [MDN: `<a>`: The Anchor element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a): uitgebreid overzicht van alle mogelijkheden van links in HTML.
|
|
21
|
+
### Externe links
|
|
22
|
+
|
|
23
|
+
Geef een externe link altijd `rel="external"` mee. Vermijd `target="_blank"`, maar gebruik in ieder geval `rel="external noopener"` als het moet. Voor meer informatie: [Links to cross-origin destinations are unsafe](https://developer.chrome.com/docs/lighthouse/best-practices/external-anchors-use-rel-noopener/)
|
|
20
24
|
|
|
21
|
-
###
|
|
25
|
+
### Bezochte stijl
|
|
26
|
+
|
|
27
|
+
Bezochte koppelingen geven aan dat een gebruiker de koppeling al heeft geopend. Gebruikte stijlen raden we af bij koppelingen, omdat ze de pagina vaak onoverzichtelijk maken. Het maakt navigeren door een pagina moeilijker. De inline koppeling heeft wel een bezochte stijl. Het vormt geen onderdeel van navigatie elementen die veel gescand worden.
|
|
28
|
+
|
|
29
|
+
## Relevante WCAG eisen
|
|
22
30
|
|
|
23
31
|
- [WCAG 1.4.3](https://www.w3.org/TR/WCAG21/#contrast-minimum)
|
|
24
32
|
- [WCAG 2.4.4](https://www.w3.org/TR/WCAG21/#link-purpose-in-context)
|
|
25
33
|
- [WCAG 2.5.3](https://www.w3.org/TR/WCAG21/#label-in-name)
|
|
26
34
|
- [WCAG 3.1.2](https://www.w3.org/TR/WCAG21/#language-of-parts)
|
|
35
|
+
|
|
36
|
+
## Referenties
|
|
37
|
+
|
|
38
|
+
- [Links to cross-origin destinations are unsafe](https://developer.chrome.com/docs/lighthouse/best-practices/external-anchors-use-rel-noopener/): Vermijd `target="_blank"` of gebruik `rel="external noopener"` als het moet.
|
|
39
|
+
- [_A comprehensive guide to designing perfect links in UX_, op Prototypr](https://blog.prototypr.io/a-guide-to-designing-perfect-links-in-ux-414558f35730): best practices rondom links.
|
|
40
|
+
- [_Writing Hyperlinks: Salient, Descriptive, Start with Keyword_ door Norman Nielsen Group](https://www.nngroup.com/articles/writing-links/): hoe schrijf je goede links? Een uitgebreid artikel over links.
|
|
41
|
+
- [_Hover, focus, active_, door Wunder](https://wunder.io/wunderpedia/accessibility/accessible-uis/hover-focus-active/): goede uitleg over de states die elementen zoals de link en button hebben in browsers.
|
|
42
|
+
- [MDN: `<a>`: The Anchor element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a): uitgebreid overzicht van alle mogelijkheden van links in HTML.
|