Dood met px, leve ch!

In CSS zijn pixels een dubbele leugen. Let op dat 1px niet noodzakelijkerwijs gelijk is aan één fysieke apparaatpixel. Op HD-schermen kan dit meerdere fysieke pixels beslaan. Op dezelfde manier komt 1cm in CSS vaak niet overeen met een honderdste van een SI-meter; op een groot televisiescherm is dit doorgaans langer. De lengtes zijn perceptueel: 16px ziet er ongeveer hetzelfde uit op een telefoon, laptop of televisiescherm bij een typische kijkafstand.

De overstap naar de ch-eenheid

Deze blog is primair tekstgebaseerd. Ik wil dat de breedte van de tekst leesbaar is voor de gemiddelde mens. Daarom stel ik de hoofdbreedte niet in als een percentage van het scherm, maar op basis van de tekenbreedte met behulp van de ch-eenheid. Dit is niet exact een teken, maar voor mijn doeleinden is het voldoende:

--width-content: min(75ch, 100%);

main {
  max-width: var(--width-content);
}

Padding en marges

Wat betreft padding en marges geldt hetzelfde. Als ik een ruimte rond een element wil, wil ik dat die ruimte in verhouding staat tot de tekst die erin staat. Voor breedtes is het daarom logisch om de ch-eenheid opnieuw te gebruiken.

Voor de hoogte is het echter wellicht niet zinvol om verticale afstand uit te drukken in tekenbreedte. In dat geval kan de ex-eenheid worden gebruikt, wat de grootte is van een typische kleine letter.

Conclusie

Net als bij mijn idee om CSS-klassen uit mijn HTML te elimineren, is het mogelijk om hierin te ver gaan. Ik heb niet elke referentie van px naar ch veranderd, maar experimenteer simpelweg om te zien of het werkt.

Er is niets mis mee, immoreels of kwaadaardigs aan het gebruik van px — of welke andere maateenheid dan ook. Het gebruik van ch en ex past simpelweg bij mijn persoonlijke voorkeuren.