import { Guideline } from “@site/src/components/Guideline”;
CSS conventie
Dit document beschrijft de conventies voor het schrijven van herbruikbare CSS voor componenten en applicaties met NL Design System. Deze zijn bedoeld voor iedereen die nieuwe componenten ontwikkelt of bijdraagt aan gedeelde CSS-bibliotheken en voor iedereen die aanvullende CSS scrhijft in een herbruikbare applicatie.
Huisstijl onafhankelijk
Schrijf CSS die ook werkt voor anderen. Herbruikbare CSS gebruikt geen huisstijlcode. CSS-variabelen worden gebruikt voor component design tokens die ingevuld kunnen worden met de huisstijl van een organisatie. Dit is van belang wanneer componenten door anderen worden gebruikt, of wanneer software door meerdere organisaties met hun eigen huisstijl wordt geïnstalleerd, zoals een CMS voor gemeenten of Common Ground-software.
Geïsoleerde theming
Zorg dat de CSS van een thema niet de stylesheet van anderen in de weg zit. De huisstijlcode staat voor iedere organisatie in een apart thema-bestand. Gedeelde CSS wordt aangeboden zonder side-effects. De CSS heeft pas effect op een pagina nadat een expliciete CSS-class is toegepast. Zo kan hergebruik plaatsvinden zonder onbedoelde invloed op bestaande stylesheets.
Dit thema-bestand kan automatisch worden gegenereerd via een Design Tokens JSON-bestand met Style Dictionary. Elke huisstijl kan een eigen design token JSON-bestand hebben dat in meerdere projecten wordt gebruikt.
Example page
Hello
Some content here
Herleidbare prefix
Zorg dat de prefix van de componenten en tokens herkenbaar en herleidbaar is. De componenten bij NL Design System worden bijgedragen door diverse organisaties. Om te herleiden waar een component vandaan komt en met wie je kan samenwerken om een verbetering door te voeren houden we de prefix van die organisatie aan. Ook in de applicatie van een organisatie met een andere naam. Het kan dus voorkomen dat een thema bestaat uit design tokens van diverse organisaties.
.example-video {
border-color: var(--example-video-border-color);
border-radius: var(--example-video-border-radius);
border-width: var(--example-video-border-width);
}
Herbruikbare mixins
Schrijf SCSS mixins voor gebruik met andere CSS selectors. CSS-onderdelen worden aangeboden als SCSS-mixin, zodat andere projecten dezelfde stijlen kunnen toepassen op afwijkende selectors.
_mixin.scss:
@mixin example-link {
color: var(--example-link-color);
}
index.scss:
@import "./mixin";
.example-link {
@include example-link;
}
Een project dat geen invloed heeft op de HTML past de mixin toe op alle links:
@import "@example/css-components/link";
a:link {
@include example-link;
}
Een project met Shadow DOM:
@import "@example/css-components/link";
:host {
@include example-link;
}
Een project dat de mixin tijdelijk gebruikt tijdens een migratie van oude class names:
@import "@example/css-components/link";
.old-link {
@include example-link;
}
Robuuste reset
Schrijf robuuste CSS die niet afhankelijk is van een algemene reset.css. Wanneer een HTML-element zoals <ul> wordt gebruikt voor een navigatiecomponent, worden browser-standaardstijlen — zoals padding-inline-start in Firefox of Safari — expliciet gereset.
Ook als het project een reset.css-variant gebruikt, blijft deze reset aanwezig in de componentcode zodat het ook werkt voor projecten zonder die reset.css.
Reset in een SCSS mixin
Wanneer een property is ingesteld op de initial value (zoals 0 voor padding), kan dit eruitzien als overbodige code. Als reset-code in een losse mixin staat, ontbreekt de context dat het bedoeld is als browser-reset.
@mixin reset-ul {
padding-inline-start: 0;
/* …other styles… */
}
@mixin example-nav {
@include reset-ul;
/* …other styles… */
}