npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@utrecht/root-css

v4.1.1

Published

Root component for the Municipality of Utrecht based on the NL Design System architecture

Readme

Root

Onderlaag waarin basiskeuzes worden gemaakt voor alle componenten die in de website zitten.

Aanbevolen manier

<!DOCTYPE html>
<html class="utrecht-root" dir="ltr" lang="nl">
  <head>
    <meta charset="utf-8" />
    <title>Paginatitel</title>
    <meta name="viewport" content="width=device-width,initial-scale=1" />
  </head>
  <body>
    <!-- ... -->
  </body>
</html>

Richtlijnen voor contentmakers

Via lang="nl" wordt aangegeven dat de tekst op de pagina in het Nederlands is geschreven. Screenreaders gebruiken dit attribuut om de juiste uitspraak en taalinstellingen te selecteren voor gebruikers met een visuele beperking. Is de tekst op de pagina in een andere taal geschreven? Wissel nl dan in voor de juiste taal. Bijvoorbeeld fr voor Frans of es voor Spaans.

Doelen

  • De afmeting van deze component is de maximaal beschikbare ruimte.
  • De achtergrondkleur is de basis voor content.
  • De kleur van de tekst is leesbaar op de achtergrond.
  • Het lettertype is het standaard neutrale lettertype voor componenten.
  • Scroll wanneer het nodig is.

Edge cases:

  • Mag niet horizontaal scrollen wanneer een border op :root wordt gezet (WCAG 1.4.10)

Door het aanbieden van goed root component kunnen 'anti-patterns' voorkomen of genezen worden.

  • Anti-aliasing wordt vaak aangepast door ongewenste font-smoothing: antialiased;.
  • Overschrijven van de root font-size, waardoor de rem waarde wordt aangepast.
  • De <body> element scrollbaar maken in plaats van het <html> element.

Anatomie

HTML variant:

  1. Root
  2. Body

Body en Div variant:

  1. Root

De naamgeving van de Root component is gebaseerd op :root in CSS. De naamgeving van het Body onderdeel is gebaseerd op body in HTML.

HTML

meta element

Gebruik altijd een <meta name="viewport"> element met tenminste de volgende instellingen:

  • width=device-width
  • initial-scale=1

Je kunt deze instellingen combineren met eigen voorkeuren.

Bijvoorbeeld:

<meta name="viewport" content="width=device-width,initial-scale=1" />

title element

Gebruik altijd een <title> element om de paginatitel in te stellen, voor de HTML en Body varianten.

html variant

<!DOCTYPE html>
<html class="utrecht-root" lang="nl" dir="ltr">
  <head>
    <!-- ... -->
  </head>
  <body>
    <!-- ... -->
  </body>
</html>

Wanneer je kunt kiezen tussen het html en body element, kies dan altijd het html element.

ARIA

Voor de HTML en Body variant moet je geen role instellen.

Voor de Div variant kan het in heel zeldzame gevallen nodig zijn om role="document" of role="application" te gebruiken, dus dat moet mogelijk zijn met deze component. Lees hier over in het artikel: If you use the WAI-ARIA role "application", please do so wisely! — Marco Zehe

Wanneer je de Div-variant gebruikt om Viewport te simuleren, gebruik dan role="group".

Wanneer je de Dialog variant gebruikt, gebruik het <dialog> element die de impliciete rol dialog heeft.

Design tokens

Er zijn design tokens om de color en background-color in te stellen, die basis-kleuren zijn voor de hele pagina.

Vrijwel alle gebruikers maken eigen keuzes voor color, background-color, font-family, font-weight, font-size en line-height.

De meeste gebruikers maken eigen keuzes voor color, background-color en font-family. De meeste gebruikers gebruiken font-weight 400, maar met de opkomst van variable fonts zal daar meer variatie in komen. De meeste gebruikers stellen font-size in om garantie te hebben dat de font-size is wat ze verwachten, zelfs wanneer de font-size 1rem is. De line-height wordt meestal ingesteld op een grotere waarde dan wat browsers standaard hebben.

Er is een design token font-size-adjust om twee dingen mogelijk te maken:

  • De font-size van het belangrijkste lettertype gelijk te houden, door een waarde te gebruiken waarbij die font-size gelijk blijft.
  • Visuele regressies voorkomen door geen gebruik te maken van font-size-adjust, door waarde voor CSS in te stellen op auto.

Richtlijnen voor invulling design tokens

De background-color en color moeten tenminste 4,5:1 kleurcontrast hebben.

De font-size moet voldoen aan het de richtlijn van minimum font-size van NL Design System .

De font-size moet gebruik maken van relatieve font-size units, bij voorkeur rem.

De line-height moet tenminste 1 zijn, en gebruik maken van relatieven units. Bij voorkeur een unitless waarde.

De font-size-adjust moet zijn ingesteld op een waarde waarbij de font-size nog voldoende leesbaar is. De minimum x-hoogte is 8px. Voorbeelden:

  • font-size: 16px met font-size-adjust: 0.42; is onvoldoende
  • font-size: 24px met font-size-adjust: 0.42; is voldoende

Gebruik als font-family bij voorkeur een lettertype dat voldoet aan de richtlijnen van NL Design System.

Varianten

Er zijn alleen varianten in code, niet in design.

  • Variant die op een html-element is toegepast
  • Variant die op een body-element is toegepast
  • Variant die op een div-element is toegepast

De belangrijkste manier om de Root component te gebruiken is met het html element.

Gebruik de body variant alleen wanneer je eigenlijk de html variant wilt gebruiken, maar dat niet mogelijk is in jouw situatie.

body variant

<!DOCTYPE html>
<html lang="nl" dir="ltr">
  <head>
    <!-- ... -->
  </head>
  <body class="utrecht-root">
    <!-- ... -->
  </body>
</html>

div variant

<!DOCTYPE html>
<html lang="nl" dir="ltr">
  <head>
    <!-- ... -->
  </head>
  <body>
    <div class="utrecht-root">
      <!-- ... -->
    </div>
  </body>
</html>

WCAG

Privacy en security

Je kunt de privacy en security van je pagina verbeteren door metadata toe te voegen in de <head> van je pagina.

In de <head> van de pagina kun je een Content-Security-Policy element toevoegen, waarmee je de veiligheid van je pagina kunt verbeteren.

Veelvoorkomende fouten

Toegankelijkheid:

  • Kleurcontrast van tekst wordt lager gemaakt door font-smoothing in te stellen op antialiased of grayscale.
  • scroll-behavior: smooth wordt ingesteld zonder een uitzondering te maken op basis van prefers-reduced-motion.
  • CSS Logical Properties worden nog niet gebruikt.
  • Taal van de pagina is niet ingesteld.
  • De paginatitel is niet duidelijk.
  • De font-size van het html element wordt ingesteld, waardoor 1rem niet meer de user preference volgt.
  • De font-size van het html element is ingesteld met een absolute waarde, waardoor de gebruiker niet meer de tekst kan vergroten.
  • Er is wel een tekstkleur ingesteld, maar geen achtergrondkleur, waardoor de tekst onleesbaar wordt wanneer de gebruiker dark mode gebruikt.
  • Lange woorden hebben geen woordafbreking, waardoor op kleinere schermen de tekst niet volledig leesbaar is zonder heen en weer te scrollen.
  • Default focus ring wordt gebruikt, waardoor de focus indicator niet zichtbaar is op alle achtergronden.
  • De kleuren zwart en wit zijn gebruikt voor background-color en color, waardoor het contrast zo hoog is dat sommige mensen er last van hebben.

Gebruiksvriendelijkheid:

  • Wanneer je hele pagina is gemaakt met CSS Logical properties, dan kun je de layout spiegelen wanneer een script herkent dat Google Translate naar een right-to-left taal vertaalt.

Kwaliteit:

  • body { padding: 0; } wordt nog vaak gebruikt, terwijl dat in moderne browsers niet nodig is.
  • De html en body elementen op een pagina worden niet ingesteld om de maximale beschikbare ruimte te gebruiken, waardoor de footer niet onderaan het scherm staat.
  • De font-size van het html element is ingesteld op 62.5%, waardoor de pagina niet goed samenwerkt met componenten die uitgaan van 1rem = 16px.
  • De leesbaarheid van de tekst is niet optimaal doordat meerdere lettertypes door elkaar gebruikt worden, waarvan de x-hoogte niet overeenkomt.
  • Er moet complexe CSS gemaakt worden om een position: sticky elementen op de juiste plek te krijgen.

Richtlijnen bij NL Design System