@amsterdam/design-system-css 0.1.4 → 0.1.5
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/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/checkbox/checkbox.css +1 -0
- package/dist/checkbox/checkbox.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/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/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/link/link.css +1 -97
- package/dist/link/link.css.map +1 -1
- 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/testula/testula.css +9 -0
- package/dist/testula/testula.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 +1 -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 +77 -0
- package/src/paragraph/paragraph.scss +12 -8
- package/src/top-task-link/README.md +13 -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,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.
|
package/src/link/link.scss
CHANGED
|
@@ -6,45 +6,50 @@
|
|
|
6
6
|
@import "../../utils/breakpoint";
|
|
7
7
|
|
|
8
8
|
.amsterdam-link {
|
|
9
|
-
color: var(--amsterdam-link-color
|
|
10
|
-
font-family: var(--amsterdam-
|
|
11
|
-
font-
|
|
12
|
-
line-height: var(--amsterdam-link-line-height);
|
|
9
|
+
color: var(--amsterdam-link-color);
|
|
10
|
+
font-family: var(--amsterdam-link-font-family);
|
|
11
|
+
font-weight: var(--amsterdam-link-font-weight);
|
|
13
12
|
outline-offset: var(--amsterdam-link-outline-offset);
|
|
14
|
-
text-decoration: var(--amsterdam-link-text-decoration, underline);
|
|
15
|
-
text-decoration-color: var(--amsterdam-link-text-decoration-color, currentColor);
|
|
16
|
-
text-decoration-thickness: var(--amsterdam-link-text-decoration-thickness, 1px);
|
|
17
|
-
text-underline-offset: var(--amsterdam-link-text-underline-offset);
|
|
18
13
|
|
|
19
14
|
&:hover,
|
|
20
|
-
&:active
|
|
21
|
-
color: var(--amsterdam-link-hover-color);
|
|
22
|
-
text-decoration: var(--amsterdam-link-hover-text-decoration);
|
|
23
|
-
text-decoration-thickness: var(--amsterdam-link-hover-text-decoration-thickness, 1px);
|
|
24
|
-
}
|
|
25
|
-
|
|
15
|
+
&:active,
|
|
26
16
|
&:focus {
|
|
27
17
|
color: var(--amsterdam-link-focus-color);
|
|
28
|
-
text-decoration: var(--amsterdam-link-focus-text-decoration);
|
|
29
18
|
}
|
|
19
|
+
}
|
|
30
20
|
|
|
31
|
-
|
|
32
|
-
|
|
21
|
+
.amsterdam-link--standalone {
|
|
22
|
+
display: inline-block;
|
|
23
|
+
font-size: var(--amsterdam-link-standalone-narrow-font-size);
|
|
24
|
+
line-height: var(--amsterdam-link-standalone-line-height);
|
|
25
|
+
text-decoration-thickness: var(--amsterdam-link-standalone-text-decoration-thickness);
|
|
26
|
+
text-underline-offset: var(--amsterdam-link-standalone-text-underline-offset);
|
|
27
|
+
|
|
28
|
+
&:hover,
|
|
29
|
+
&:active,
|
|
30
|
+
&:focus {
|
|
31
|
+
text-decoration-thickness: var(--amsterdam-link-standalone-focus-text-decoration-thickness);
|
|
32
|
+
text-underline-offset: var(--amsterdam-link-standalone-focus-text-underline-offset);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
@media screen and (width > $amsterdam-breakpoint) {
|
|
36
|
-
font-size: var(--amsterdam-link-font-size
|
|
36
|
+
font-size: var(--amsterdam-link-standalone-wide-font-size);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
.amsterdam-link--standalone-bold {
|
|
41
|
-
font-weight: var(--amsterdam-link-standalone-bold-font-weight);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
40
|
.amsterdam-link--inline {
|
|
45
41
|
font-family: var(--amsterdam-link-inline-font-family);
|
|
46
42
|
font-size: var(--amsterdam-link-inline-font-size);
|
|
47
|
-
|
|
43
|
+
line-height: var(--amsterdam-link-inline-line-height);
|
|
44
|
+
text-decoration: var(--amsterdam-link-inline-text-decoration);
|
|
45
|
+
text-decoration-thickness: var(--amsterdam-link-text-decoration-thickness);
|
|
46
|
+
|
|
47
|
+
&:hover,
|
|
48
|
+
&:active,
|
|
49
|
+
&:focus {
|
|
50
|
+
text-decoration: var(--amsterdam-link-inline-focus-text-decoration);
|
|
51
|
+
text-underline-offset: var(--amsterdam-link-inline-focus-text-underline-offset);
|
|
52
|
+
}
|
|
48
53
|
|
|
49
54
|
&:visited {
|
|
50
55
|
color: var(--amsterdam-link-inline-visited-color);
|
|
@@ -54,30 +59,39 @@
|
|
|
54
59
|
.amsterdam-link--in-list {
|
|
55
60
|
align-items: flex-start;
|
|
56
61
|
display: inline-flex;
|
|
57
|
-
font-size: var(--amsterdam-link-in-list-font-size
|
|
62
|
+
font-size: var(--amsterdam-link-in-list-narrow-font-size);
|
|
58
63
|
gap: var(--amsterdam-link-in-list-gap);
|
|
59
64
|
line-height: var(--amsterdam-link-in-list-line-height);
|
|
60
|
-
text-
|
|
65
|
+
text-decoration: var(--amsterdam-link-in-list-text-decoration);
|
|
61
66
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
&:hover,
|
|
68
|
+
&:active,
|
|
69
|
+
&:focus {
|
|
70
|
+
text-decoration: var(--amsterdam-link-in-list-focus-text-decoration);
|
|
71
|
+
text-decoration-thickness: var(--amsterdam-link-in-list-focus-text-decoration-thickness);
|
|
72
|
+
text-underline-offset: var(--amsterdam-link-in-list-focus-text-underline-offset);
|
|
66
73
|
}
|
|
67
74
|
|
|
68
75
|
@media screen and (width > $amsterdam-breakpoint) {
|
|
69
|
-
font-size: var(--amsterdam-link-in-list-font-size
|
|
76
|
+
font-size: var(--amsterdam-link-in-list-wide-font-size);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Override for icon size
|
|
81
|
+
.amsterdam-link--in-list__chevron {
|
|
82
|
+
span.amsterdam-icon svg {
|
|
83
|
+
height: 16px;
|
|
84
|
+
width: 16px;
|
|
70
85
|
}
|
|
71
86
|
}
|
|
72
87
|
|
|
73
88
|
.amsterdam-link--on-background-dark {
|
|
74
89
|
color: var(--amsterdam-link-on-background-dark-color);
|
|
75
|
-
text-decoration: var(--amsterdam-link-on-background-dark-text-decoration);
|
|
76
90
|
|
|
77
91
|
&:hover,
|
|
78
|
-
&:active
|
|
92
|
+
&:active,
|
|
93
|
+
&:focus {
|
|
79
94
|
color: var(--amsterdam-link-on-background-dark-hover-color);
|
|
80
|
-
text-decoration: var(--amsterdam-link-on-background-dark-hover-text-decoration);
|
|
81
95
|
}
|
|
82
96
|
|
|
83
97
|
&:visited {
|
|
@@ -87,15 +101,26 @@
|
|
|
87
101
|
|
|
88
102
|
.amsterdam-link--on-background-light {
|
|
89
103
|
color: var(--amsterdam-link-on-background-light-color);
|
|
90
|
-
text-decoration: var(--amsterdam-link-on-background-light-text-decoration);
|
|
91
104
|
|
|
92
105
|
&:hover,
|
|
93
|
-
&:active
|
|
106
|
+
&:active,
|
|
107
|
+
&:focus {
|
|
94
108
|
color: var(--amsterdam-link-on-background-light-hover-color);
|
|
95
|
-
text-decoration: var(--amsterdam-link-on-background-light-hover-text-decoration);
|
|
96
109
|
}
|
|
97
110
|
|
|
98
111
|
&:visited {
|
|
99
112
|
color: var(--amsterdam-link-on-background-light-visited-color);
|
|
100
113
|
}
|
|
101
114
|
}
|
|
115
|
+
|
|
116
|
+
.amsterdam-link--inline.amsterdam-link--on-background-dark,
|
|
117
|
+
.amsterdam-link--inline.amsterdam-link--on-background-light {
|
|
118
|
+
text-decoration: var(--amsterdam-link-inline-focus-text-decoration);
|
|
119
|
+
text-underline-offset: var(--amsterdam-link-inline-focus-text-underline-offset);
|
|
120
|
+
|
|
121
|
+
&:hover,
|
|
122
|
+
&:active,
|
|
123
|
+
&:focus {
|
|
124
|
+
text-decoration: var(--amsterdam-link-inline-text-decoration);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Ordered list
|
|
2
|
+
|
|
3
|
+
Een geordende lijst is een verticale groep gerelateerde inhoud met een volgorde.
|
|
4
|
+
Deze lijst kan 2 niveaus hebben.
|
|
5
|
+
Het eerste niveau is genummerd.
|
|
6
|
+
Het tweede niveau gebruikt letters in alfabetische volgorde.
|
|
7
|
+
Tekst in de lijstitems springt een vaste afstand in.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license EUPL-1.2+
|
|
3
|
+
* Copyright (c) 2023 Gemeente Amsterdam
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
@import "../../utils/breakpoint";
|
|
7
|
+
|
|
8
|
+
/** Apply border box sizing, reset whitespace and list styles. */
|
|
9
|
+
@mixin reset {
|
|
10
|
+
box-sizing: border-box;
|
|
11
|
+
list-style-type: none;
|
|
12
|
+
margin-block: 0;
|
|
13
|
+
padding-inline-start: 0;
|
|
14
|
+
-webkit-text-size-adjust: 100%;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** A list is a grid column with a gap between items. */
|
|
18
|
+
.amsterdam-ordered-list {
|
|
19
|
+
@include reset;
|
|
20
|
+
|
|
21
|
+
display: grid;
|
|
22
|
+
gap: var(--amsterdam-ordered-list-gap);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** A list with markers sets typography for its text content. */
|
|
26
|
+
.amsterdam-ordered-list:not(.amsterdam-ordered-list--no-markers) {
|
|
27
|
+
color: var(--amsterdam-ordered-list-color);
|
|
28
|
+
font-family: var(--amsterdam-ordered-list-font-family);
|
|
29
|
+
font-size: var(--amsterdam-ordered-list-narrow-font-size);
|
|
30
|
+
font-weight: var(--amsterdam-ordered-list-font-weight);
|
|
31
|
+
line-height: var(--amsterdam-ordered-list-line-height);
|
|
32
|
+
list-style-type: var(--amsterdam-ordered-list-list-style-type);
|
|
33
|
+
|
|
34
|
+
@media screen and (width > $amsterdam-breakpoint) {
|
|
35
|
+
font-size: var(--amsterdam-ordered-list-wide-font-size);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** List items are responsible for indentation and marker positioning. */
|
|
39
|
+
.amsterdam-ordered-list__item {
|
|
40
|
+
margin-inline-start: var(--amsterdam-ordered-list-item-margin-inline-start);
|
|
41
|
+
padding-inline-start: var(--amsterdam-ordered-list-item-padding-inline-start);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** A nested list has a different marker and less indentation for correct alignment. */
|
|
46
|
+
:is(.amsterdam-ordered-list, .amsterdam-unordered-list) .amsterdam-ordered-list {
|
|
47
|
+
list-style-type: var(--amsterdam-ordered-list-ordered-list-list-style-type);
|
|
48
|
+
|
|
49
|
+
.amsterdam-ordered-list__item {
|
|
50
|
+
margin-inline-start: var(--amsterdam-ordered-list-ordered-list-item-margin-inline-start);
|
|
51
|
+
padding-inline-start: var(--amsterdam-ordered-list-ordered-list-item-padding-inline-start);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Page heading
|
|
2
|
+
|
|
3
|
+
Het page heading component is een opvallende tekst aan het begin van een pagina, direct na de header.
|
|
4
|
+
Gebruik dit component voor een naam, titel of motto.
|
|
5
|
+
|
|
6
|
+
## Richtlijnen
|
|
7
|
+
|
|
8
|
+
- Gebruik dit component om de aandacht van de gebruiker te trekken.
|
|
9
|
+
- Gebruik dit component maar 1 keer per pagina, vaak alleen op de voorpagina.
|
|
10
|
+
- Niet gebruiken als je lange stukken tekst wilt weergeven, de tekst moet kort en duidelijk zijn.
|
|
11
|
+
|
|
12
|
+
## Relevante WCAG eisen
|
|
13
|
+
|
|
14
|
+
Het page heading component is een variant van een heading level 1, met een afwijkende stijl. Let bij gebruik van dit component goed op dat de heading hiërarchie van de pagina logisch blijft.
|
|
15
|
+
|
|
16
|
+
Voor dit component gelden dezelfde WCAG eisen als voor [het heading component](https://amsterdam.github.io/design-system/?path=/docs/react_heading--docs).
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license EUPL-1.2+
|
|
3
|
+
* Copyright (c) 2023 Gemeente Amsterdam
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
@import "../../utils/breakpoint";
|
|
7
|
+
|
|
8
|
+
@mixin reset {
|
|
9
|
+
box-sizing: border-box;
|
|
10
|
+
margin-block: 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.amsterdam-page-heading {
|
|
14
|
+
break-after: avoid;
|
|
15
|
+
break-inside: avoid;
|
|
16
|
+
color: var(--amsterdam-page-heading-color);
|
|
17
|
+
font-family: var(--amsterdam-page-heading-font-family);
|
|
18
|
+
font-size: var(--amsterdam-page-heading-narrow-font-size);
|
|
19
|
+
font-weight: var(--amsterdam-page-heading-font-weight);
|
|
20
|
+
line-height: var(--amsterdam-page-heading-line-height);
|
|
21
|
+
|
|
22
|
+
@media screen and (width > $amsterdam-breakpoint) {
|
|
23
|
+
font-size: var(--amsterdam-page-heading-wide-font-size);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@include reset;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.amsterdam-page-heading--inverse-color {
|
|
30
|
+
color: var(--amsterdam-page-heading-inverse-color);
|
|
31
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Page Menu
|
|
2
|
+
|
|
3
|
+
Het Page Menu wordt alleen gebruikt in het Header en Footer component en is uitsluitend bedoeld voor horizontale navigatie. Het uiterlijk van de links en buttons zijn gelijk getrokken en kunnen beide gebruikt worden. Een link voor navigatie acties en een button voor het afvuren van een javascript event voor bijvoorbeeld het openen van het hoofdmenu of het tonen van een modal.
|
|
4
|
+
|
|
5
|
+
## Richtlijnen
|
|
6
|
+
|
|
7
|
+
- Als hoofdnavigatie in de header heeft het Page Menu maximaal 5 items inclusief Zoeken en Menu, staan op 1 regel en is rechts uitgelijnd. Houd minimaal 1 kolom afstand tussen de sitetitel en het eerste menu-item.
|
|
8
|
+
- Als footer menu in het Page Menu links uitgelijnd.
|
|
9
|
+
- Submenu's zijn niet toegestaan.
|
|
10
|
+
- Gebruik het standaard Menu-item als er meer informatie in het hoofdmenu nodig is. Dit item toont een schermbreed uitklapmenu (overlay) met koppelingen. De indeling van de koppelingen is vrij.
|
|
11
|
+
- Bij gebruik van het Menu-item zijn de overige items (bijvoorbeeld Zoeken, Contact) in de koptekst functioneel. Deze items kunnen herhaald worden binnen het uitgeklapte Menu-item.
|
|
12
|
+
|
|
13
|
+
## Relevante WCAG eisen
|
|
14
|
+
|
|
15
|
+
- [Consistent Navigation (Level AA)](https://www.w3.org/WAI/WCAG21/Understanding/consistent-navigation.html)
|