Design system · Layout · Motion

🎨 CSS Stílus Kalauz

Moduláris CSS workflow: változók, layout rendszerek, motion design és minőségbiztosítás egy oldalon.

Design tokenek Grid + Flex Accessibility

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-motion teszt: 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: csso vagy postcss-calc a 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.