Gå til innholdet

Tailwind

Tailwind er ikke påkrevd i Fristil, og er heller ikke i veien. Bruker du det, skal du kunne skrive p-6 på en .fs-button og forvente at det virker, og bygge dine egne flater med Fristils farger uten å slå opp et eneste variabelnavn.

Pakken har ingen avhengighet til Tailwind. Temaet er en vanlig CSS-fil, så det er versjonen i appen din som leser den, og to versjoner kan ikke komme i konflikt.

app.css
@layer theme, base, fristil, components, utilities;
@import "tailwindcss";
@import "@fristil/designsystem/tokens.css";
@import "@fristil/designsystem/tailwind.css";
/* og stilarkene for komponentene du bruker */
@import "@fristil/designsystem/button.css";

Den første linja er det eneste du må huske. Uten den nullstiller Tailwinds Preflight komponentene, eller komponentene slår klassene dine. Lagrekkefølgen forklarer hvorfor.

Det er alt. Ingen tailwind.config.ts, ingen forhåndsinnstilling som skal importeres i JavaScript.

Komponentene ligger i @layer fristil, og utility-klassene kommer etter. En Tailwind-klasse vinner derfor over komponentens egen verdi, uten !important og uten å slå spesifisitet:

Knappen beholder farger, fokusmarkering og deaktivert tilstand. Du endrer bare det du peker på.

Bygg dine egne flater med Fristils verdier

Section titled “Bygg dine egne flater med Fristils verdier”

Alt temaet legger til heter fs-, som klassene ellers i systemet. Da vet du alltid hvilke verdier som er Fristils, og Tailwinds egne er urørt: bg-neutral-100 betyr fortsatt det samme.

Eksempelet over er ikke tegnet av. Det kompileres av en ekte Tailwind når dokumentasjonen bygges, av nøyaktig den markupen som står i kodefanen.

KlasserVerdi
text-fs-page-fg, bg-fs-pageSideflate og tekst
text-fs-interactive, bg-fs-interactive-bg, text-fs-interactive-contrastLenker og knapper
text-fs-success, bg-fs-success-bg, og det samme for warning, danger, neutral, disabledStatus
text-fs-mutedDempet, men lesbar tekst
border-fs-field-border, border-fs-divider, border-fs-divider-strongKanter og streker
bg-fs-azure-70 og resten av palettenRåfarger, når betydningen ikke finnes ennå
text-fs-xxs til text-fs-megaTekststørrelser
max-w-fs-aside, max-w-fs-wide-contentBredder for sideoppsett
shadow-fs-overlaySkyggen under flater som ligger over siden

Alle peker på tokens, så de snur med temaet. bg-fs-page er hvit i lyst tema og nesten sort i mørkt, uten at du skriver dark:.

Tailwind regner p-4 som calc(var(--spacing) * 4), og temaet setter --spacing til --size-1. p-4 er dermed nøyaktig --size-4, den samme verdien komponentene bruker. Endrer du skalaen, følger både komponentene og Tailwind-klassene med:

:root {
--size-1: 0.3rem;
}

Brekkpunktene er med vilje utelatt fra temaet. Fristils sm til 2xl har allerede Tailwinds verdier, så md: virker som før.

Lagene teller i den rekkefølgen de først blir nevnt, og det siste vinner uansett spesifisitet. Derfor står rekkefølgen på første linje:

RekkefølgeHva som skjer
fristil før basePreflight nullstiller komponentene. Knappen mister bakgrunnen.
fristil etter utilitiesKomponentene slår klassene dine. p-6 gjør ingenting.
base, fristil, utilitiesBegge deler virker

Begge feiltilfellene er testet i tilpasning.browser.test.ts, som bygger dem i hvert sitt dokument og leser av hva knappen faktisk får. Dokumentasjonssiden du leser nå er satt opp på samme måte.

Ingen komponent bruker shadow DOM. Alt står i vanlig DOM, så utility-klasser og din egen CSS når fram overalt.

@apply virker, men trengs sjelden. Skal du samle en gjentakelse, er en vanlig klasse i din egen CSS enklere å lese, og den kan bruke var(--semantic-…) direkte.

Preflight er Tailwinds valg, ikke vårt. Fristils komponenter nullstiller det de trenger selv, blant annet box-sizing, så de virker like godt uten Preflight som med.

Ingenting av dette er påkrevd. var(--semantic-interactive-main) og class="fs-button" virker like godt i ren CSS, og i alle andre verktøy som skriver CSS. Se Tilpasning.