1. Kickstart és reset
Indítsd a projektet modern reset-tel (Andy Bell modern-css-reset, vagy @csstools/normalize). Alapértelmezetten állítsd be a változókat a gyökérben.
:root {
--color-bg: #050505;
--color-text: #f8f8f8;
--space-1: 0.5rem;
--space-2: 1rem;
--radius-lg: 18px;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
2. Szelektorok és specificitás
Kezdőknek a legnagyobb csapda a specifitási piramis. Ragadj BEM vagy utility-first megközelítést, így előre kiszámítható marad.
.card {}
.card__title {}
.card--accent {}
.button.is-active {}
[data-theme="dark"] .card {}
Tartsd 0-1-0 (elem), 0-1-0 (klassz), 1-0-0 (id) sorrendet, és kerüld az !important-ot.
3. Tipográfia és rács
body {
font-family: "Space Grotesk", system-ui, sans-serif;
font-size: clamp(1rem, 0.95rem + 0.4vw, 1.2rem);
line-height: 1.6;
}
:root {
--grid-gap: clamp(1rem, 2vw, 2.5rem);
}
.section-grid {
display: grid;
gap: var(--grid-gap);
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}
font-display: swap a @font-face definiálásánál csökkenti a FOIT jelenséget.
4. Flexbox minták
.stack {
display: flex;
flex-direction: column;
gap: var(--space-2);
}
.cluster {
display: flex;
flex-wrap: wrap;
gap: var(--space-1);
align-items: center;
}
.frame {
display: flex;
align-items: center;
justify-content: center;
min-height: 240px;
}
Gap végre minden böngészőben támogatott (Grid + Flex), használd paddings helyett.
5. Grid + container query
.feature-grid {
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: var(--space-2);
}
.feature-grid > article {
grid-column: span 4;
}
@container (max-width: 520px) {
.feature-grid > article {
grid-column: span 12;
}
}
Használj container-type: inline-size; szülőn, így a gyermek komponens a rendelkezésre álló szélességhez igazodik, nem a teljes viewporthoz.
6. Színek és design tokenek
:root {
--brand: oklch(0.83 0.13 217);
--brand-dark: oklch(0.6 0.1 217);
--surface: #0b0b0b;
}
.btn-brand {
background: linear-gradient(120deg, var(--brand), var(--brand-dark));
border-radius: 999px;
color: #050505;
padding: var(--space-1) var(--space-2);
}
Tárold a tokeneket JSON-ban (Style Dictionary), így egyszerre exportálhatod CSS/TS/Swift formátumban.
7. Animációk és mozgás
@keyframes floatCard {
0% { transform: translateY(0); }
50% { transform: translateY(-8px); }
100% { transform: translateY(0); }
}
.card:hover {
animation: floatCard 900ms var(--ease-out-back);
}
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
}
}
Definiálj motion scale-t: fast (120ms), base (240ms), slow (420ms) és használj egységes easing-görbéket.
8. Reszponzív sablon
.page {
display: grid;
grid-template-columns: minmax(0, 1fr) clamp(320px, 30vw, 420px);
gap: var(--space-2);
}
@media (max-width: 960px) {
.page {
grid-template-columns: 1fr;
}
}
Előbb tervezd mobilra (min-width breakpoint), majd bővítsd asztalira. Használj clamp()-et fluid paddinghez.
9. Debug és diagnosztika
- Chrome DevTools Layout panel: grid/flex overlayk.
* { outline: 1px dashed rgba(255,107,107,.6); }ideiglenes keret.- Performance panel: animációk FPS-e, scroll jank.
prefers-reduced-motionteszt: Chrome Rendering fül.
10. Architektúra
Válaszd a csapatnak megfelelő szintet:
- BEM + partial SCSS: moduláris, átlátható projektekhez.
- Utility-first (Tailwind, UnoCSS): prototípus gyorsítás, ha design token kontroll alatt van.
- CSS-in-JS: ha dinamikus theme váltás, runtime logika kell (pl. vanilla-extract, Linaria).
11. Tooling és minőség
- Stylelint: konzisztens sorrend, tiltott szabályok.
- Lightning CSS / PostCSS: modern szintaxis transpile (nesting, custom media).
- VisBug / Polypane: vizuális ellenőrzés.
- Visual regression: Chromatic, Percy vagy Playwright + pixelmatch.
- Bundle méret:
cssovagypostcss-calca minimalizáláshoz.
12. Mini design system
.pill-button {
--shadow: 0 20px 45px rgba(0, 212, 255, 0.12);
display: inline-flex;
align-items: center;
gap: 0.35rem;
padding: 0.55rem 1.3rem;
border-radius: 999px;
background: var(--brand);
color: #041014;
font-weight: 600;
box-shadow: var(--shadow);
}
.stat-card {
background: linear-gradient(145deg, #101018, #0d0d0d);
border-radius: var(--radius-lg);
padding: var(--space-2);
border: 1px solid rgba(255,255,255,0.08);
}
Tartsd a komponenseket Storybookban, és exportálj Figma Tokens-ből, hogy a design és a kód ugyanazt a forrást használja.