Responsive Utilities - Dokumentáció
Mi az a Responsive Utilities rendszer?
A PDS responsive utilities rendszer egy Tailwind-szerű, mobile-first breakpoint rendszer, amely lehetővé teszi a töréspontok alapján változó stílusozást utility osztályok segítségével.
A rendszer két fő funkcióval rendelkezik:
- Media Query Support - Viewport mérete alapján (✅ AKTÍV - minden utility támogatja)
- Container Query Support - Container mérete alapján (⚙️ Infrastruktúra kész, referencia implementáció)
ds-flex-row és
ds-flex-column osztályok támogatják. Az infrastruktúra készen áll más
utility-k bővítésére.
Mobile-First Megközelítés
KRITIKUS SZEMLÉLET: A rendszer min-width media query-ket használ,
ami azt jelenti, hogy alapból mobilra tervezünk, majd nagyobb töréspontoknál írunk felül.
class="ds-flex md:ds-block"
→ Mobilon flex, desktop-on (md-től) block
class="md:ds-flex"
→ Mi lesz mobilon? Nincs megadva!
Breakpoint Rendszer
Mobile-first töréspontok (min-width media queries):
| Prefix | Min-Width | Eszköz típus | Példa használat |
|---|---|---|---|
xxs: |
320px | Nagyon kis mobilok | xxs:ds-p-sm |
xs: |
400px | Kis mobilok | xs:ds-flex-row |
sm: |
600px | Nagy mobilok / Kis tabletek | sm:ds-gap-lg |
md: |
768px | Tabletek / Kis laptopok | md:ds-flex-column |
lg: |
960px | Laptopok | lg:ds-p-xl |
xl: |
1280px | Nagy laptopok / Desktopok | xl:ds-gap-2xl |
xxl: |
1440px | Nagy desktopok | xxl:ds-p-3xl |
Használati Szintaxis
Breakpoint prefix a kettőspont (:) karakterrel:
<div class="[base-class] [breakpoint]:[class-name]">
Példák:
class="ds-flex md:ds-flex-row lg:ds-flex-column"class="ds-p-sm md:ds-p-lg xl:ds-p-xl"class="ds-none md:ds-block"class="ds-text-left md:ds-text-center lg:ds-text-right"
📊 Aktuális Viewport Információk
--
💡 Tipp: Változtasd az ablak méretét, hogy lásd a breakpoint váltásokat!
Display Utilities (layout/_display.scss)
Display Osztályok Strukturúrája
Az alapvető display értékek utility osztályokká konvertálva, teljes breakpoint támogatással.
| Osztály | CSS tulajdonság | Leírás | Breakpoint példa |
|---|---|---|---|
ds-block |
display: block |
Block szintű elem | md:ds-block |
ds-inline |
display: inline |
Inline elem | md:ds-inline |
ds-inline-block |
display: inline-block |
Inline-block elem | md:ds-inline-block |
ds-none |
display: none |
Rejtett elem (display: none) | md:ds-none |
Conditional Visibility - Interaktív Példák
Az egyik leggyakoribb használati mód: elemek megjelenítése vagy elrejtése különböző töréspontokon.
--
class="ds-block md:ds-none"
class="ds-none md:ds-block"
class="ds-none sm:ds-block md:ds-none"
class="ds-none xl:ds-block"
Display Type Váltás
A display típus változtatása különböző töréspontokon:
class="ds-inline md:ds-block"
2. Block → Inline-Block váltás
class="ds-block md:ds-inline-block"
Használati Minták és Best Practices
1. Mobile Navigation Toggle
<!-- Hamburger ikon - csak mobilon -->
<button class="ds-block md:ds-none">☰</button>
<!-- Desktop navigation - csak desktop-on -->
<nav class="ds-none md:ds-block">
<a href="#">Link 1</a>
<a href="#">Link 2</a>
</nav>
2. Responsive Content Sections
<!-- Sidebar - csak desktop-on -->
<aside class="ds-none lg:ds-block">
Sidebar tartalom
</aside>
<!-- Main content - mindig látszik -->
<main class="ds-block">
Fő tartalom
</main>
3. Tooltip vs. Permanent Label
<!-- Tooltip mobilon rejtett, desktop-on látszik -->
<span class="ds-none md:ds-inline">
További információ
</span>
TODO: Grid Display Utilities
A következő osztályok későbbi implementálásra várnak:
ds-grid- CSS Grid displayds-inline-grid- Inline grid display- Grid-specifikus utility osztályok (grid-cols, grid-rows, stb.)
Flex Utilities (layout/_flex.scss)
Flex Osztályok Strukturúrája
Teljes Flexbox támogatás breakpoint-alapú responsive viselkedéssel.
| Kategória | Osztályok | Példa használat |
|---|---|---|
| Display | ds-flex, ds-inline-flex |
md:ds-flex |
| Direction | ds-flex-row, ds-flex-column, ds-flex-row-reverse, ds-flex-column-reverse |
md:ds-flex-row |
| Wrap | ds-flex-wrap, ds-flex-nowrap, ds-flex-wrap-reverse |
md:ds-flex-wrap |
| Grow/Shrink | ds-flex-grow, ds-flex-shrink, ds-flex-noshrink |
md:ds-flex-grow |
| Justify | ds-flex-justify-start, ds-flex-justify-end, ds-flex-justify-center, ds-flex-justify-between, ds-flex-justify-around, ds-flex-justify-evenly |
md:ds-flex-justify-center |
| Align Items | ds-flex-align-start, ds-flex-align-end, ds-flex-align-center, ds-flex-align-baseline, ds-flex-align-stretch |
md:ds-flex-align-center |
| Align Self | ds-flex-self-start, ds-flex-self-end, ds-flex-self-center, ds-flex-self-baseline, ds-flex-self-stretch |
md:ds-flex-self-center |
| Basis | ds-basis-25, ds-basis-30, ds-basis-40, ds-basis-45, ds-basis-50, ds-basis-60, ds-basis-75, ds-basis-100 |
md:ds-basis-50 |
Flex Direction - Interaktív Példák
Column mobilon, Row desktop-on
class="ds-flex-column md:ds-flex-row ds-gap-sm"
Minden törésponton változik az irány
class="ds-flex-row xxs:ds-flex-column xs:ds-flex-row md:ds-flex-column lg:ds-flex-row xl:ds-flex-column xxl:ds-flex-row"
Flex Properties - Wrap, Grow, Shrink
Flex Wrap Példa
class="ds-flex-row ds-flex-nowrap md:ds-flex-wrap"
Flex Grow Példa
class="ds-flex-no-grow lg:ds-flex-grow"
Flex Alignment - Justify és Align
Justify Content Példák
Align Items Példa
class="ds-flex-row ds-flex-align-center lg:ds-flex-align-start xxl:ds-flex-align-end"
🚀 Container Query Support (Implementált!)
ds-flex-row
és ds-flex-column osztályok támogatják a container query-t,
és a container definíciók (.ds-container, .ds-container-cn-1...
.ds-container-cn-6) automatikusan generálódnak. Ezeket lehet sablonként használni a további classok implementálása során.
Generic Container Példa:
A container mérete alapján változik az irány (nem a viewport alapján):
<div class="ds-container">
<div class="@container:md:ds-flex-row @container:lg:ds-flex-column">
<div>Item 1</div>
<div>Item 2</div>
</div>
</div>
Működés: A gyerek elem a container
mérete alapján változik. Ha a container eléri az md töréspontot (768px),
akkor flex-direction: row lesz alkalmazva.
Named Container Példa (Nested Layouts):
Ha többszintű nested layout-od van, használj named containereket:
<div class="ds-container-cn-1">
<div class="@cn-1:md:ds-flex-row">
Külső container tartalma
<div class="ds-container-cn-2">
<div class="@cn-2:sm:ds-flex-column">
Belső container - független a külsőtől!
</div>
</div>
</div>
</div>
Szintaxis Összefoglaló:
| Típus | Container Osztály | Utility Példa |
|---|---|---|
| Generic | .ds-container |
@container:md:ds-flex-row |
| Named (PDS core) | .ds-container-cn-1 |
@cn-1:md:ds-flex-row |
| Projekt-specifikus | .ds-container-myproject-name |
@myproject-name:md:ds-flex-row |
Flex Basis - Breakpoint-First Generálás
A ds-basis-* osztályok is breakpoint-first módon generálódnak, így a magasabb breakpoint mindig felülírja az alacsonyabbat, függetlenül a százalék értékek sorrendjétől.
Elérhető Flex-Basis Értékek
| Osztály | Érték | Használat |
|---|---|---|
ds-basis-25 | 25% | Negyed szélesség |
ds-basis-30 | 30% | Sidebar arány |
ds-basis-40 | 40% | 2/5 szélesség |
ds-basis-45 | 45% | Közel fele |
ds-basis-50 | 50% | Fél szélesség |
ds-basis-60 | 60% | 3/5 szélesség |
ds-basis-75 | 75% | Háromnegyed szélesség |
ds-basis-100 | 100% | Teljes szélesség |
Példa: Responsive Flex-Basis
<!-- Mobilon 100%, tablet-on 50%, desktop-on 30% -->
<div class="ds-flex ds-gap-sm">
<div class="ds-basis-100 md:ds-basis-50 lg:ds-basis-30">Item 1</div>
<div class="ds-basis-100 md:ds-basis-50 lg:ds-basis-30">Item 2</div>
</div>
<!-- Komplex kombináció: még a fordított sorrend is helyesen működik -->
<div class="sm:ds-basis-75 lg:ds-basis-25">
<!-- sm: 75%, lg: 25% (lg felülírja az sm-t) -->
</div>
flex-shrink: 1 tulajdonsággal együtt kerül alkalmazásra, így az elemek képesek összezsugorodni, ha szükséges.
Használati Best Practices
1. Responsive Card Layout
<div class="ds-flex-column md:ds-flex-row ds-gap-md">
<div class="ds-flex-grow">Kártya 1</div>
<div class="ds-flex-grow">Kártya 2</div>
<div class="ds-flex-grow">Kártya 3</div>
</div>
2. Sidebar Layout
<div class="ds-flex-column lg:ds-flex-row ds-gap-lg">
<aside class="lg:ds-basis-30">Sidebar (30%)</aside>
<main class="ds-flex-grow">Main Content</main>
</div>
3. Centered Content
<div class="ds-flex-row ds-flex-justify-center ds-flex-align-center">
<div>Horizontálisan és vertikálisan centrált</div>
</div>
Position Utilities (layout/_position.scss)
Position Osztályok Strukturúrája
Position értékek, text alignment és overflow kezelés breakpoint támogatással.
| Kategória | Osztályok | CSS tulajdonság | Példa |
|---|---|---|---|
| Position | ds-relative |
position: relative |
md:ds-relative |
ds-absolute |
position: absolute |
md:ds-absolute |
|
ds-fixed |
position: fixed |
md:ds-fixed |
|
ds-sticky |
position: sticky |
md:ds-sticky |
|
ds-static |
position: static |
md:ds-static |
|
| Text Align | ds-text-left |
text-align: left |
md:ds-text-left |
ds-text-center |
text-align: center |
md:ds-text-center |
|
ds-text-right |
text-align: right |
md:ds-text-right |
|
| Overflow | ds-overflow-auto |
overflow: auto |
md:ds-overflow-auto |
ds-overflow-hidden |
overflow: hidden |
md:ds-overflow-hidden |
|
ds-overflow-scroll |
overflow: scroll |
md:ds-overflow-scroll |
|
ds-overflow-visible |
overflow: visible |
md:ds-overflow-visible |
Position Értékek - Interaktív Példák
1. Relative Positioning
class="ds-relative"
2. Absolute Positioning
class="ds-absolute"
3. Sticky Positioning
ds-sticky csak scroll kontextusban működik.
Használd top/bottom/left/right értékekkel együtt.
Text Alignment - Responsive Példák
Left mobilon, Center desktop-on
class="ds-text-left xl:ds-text-center"
Center mobilon, Right desktop-on
class="ds-text-center xl:ds-text-right"
Left → Center (tablet) → Right (desktop)
class="ds-text-left lg:ds-text-center xl:ds-text-right"
Overflow Kezelés
1. Overflow Hidden
class="ds-overflow-hidden"
2. Overflow Auto (scroll ha szükséges)
class="ds-overflow-auto"
3. Responsive Overflow
class="ds-overflow-hidden md:ds-overflow-auto"
Használati Best Practices
1. Responsive Text Alignment
<!-- Mobil heading balra, desktop központozva -->
<h1 class="ds-text-left md:ds-text-center">
Főcím
</h1>
2. Sticky Header (csak desktop-on)
<header class="ds-relative md:ds-sticky" style="top: 0;">
Navigation
</header>
3. Modal Overlay
<div class="ds-fixed" style="inset: 0;">
<div class="ds-absolute" style="top: 50%; left: 50%; transform: translate(-50%, -50%);">
Modal Content
</div>
</div>
4. Responsive Card Overflow
<!-- Mobilon rejtett overflow, desktop-on scroll -->
<div class="ds-overflow-hidden md:ds-overflow-auto">
Long content...
</div>
Size Utilities (layout/_size.scss)
Size Osztályok Strukturúrája
Width, height és max-width utilities breakpoint támogatással.
| Kategória | Osztályok | CSS tulajdonság | Példa |
|---|---|---|---|
| Width | ds-w-full |
width: 100% |
md:ds-w-full |
ds-w-auto |
width: auto |
md:ds-w-auto |
|
| Height | ds-h-full |
height: 100% |
md:ds-h-full |
ds-h-auto |
height: auto |
md:ds-h-auto |
|
| Max-Width | ds-mw-3xs |
max-width: 320px |
md:ds-mw-3xs |
ds-mw-2xs |
max-width: 360px |
md:ds-mw-2xs |
|
ds-mw-xs |
max-width: 540px |
md:ds-mw-xs |
|
ds-mw-sm |
max-width: 720px |
md:ds-mw-sm |
|
ds-mw-md |
max-width: 740px |
md:ds-mw-md |
|
ds-mw-lg |
max-width: 960px |
md:ds-mw-lg |
|
ds-mw-xl |
max-width: 1200px |
md:ds-mw-xl |
Width Utilities - Interaktív Példák
Full Width mobilon, Auto desktop-on
class="ds-w-full lg:ds-w-auto"
Auto mobilon, Full Width desktop-on
class="ds-w-auto lg:ds-w-full"
Height Utilities - Példák
Height: 100% (parent relatív)
ds-h-full - kitölti a parent magasságát (150px)
class="ds-h-full"
Auto mobilon, Full desktop-on
class="ds-h-auto md:ds-h-full"
Max-Width Utilities - Breakpoint-First Generálás
A ds-mw-* osztályok breakpoint-first módon generálódnak, így a magasabb breakpoint mindig felülírja az alacsonyabbat, függetlenül a max-width értékek sorrendjétől.
Elérhető Max-Width Értékek (Container Sizes)
| Osztály | Érték | Használat |
|---|---|---|
ds-mw-3xs | 320px | Extra kicsi (mobil) |
ds-mw-2xs | 360px | Nagyon kicsi |
ds-mw-xs | 540px | Kicsi |
ds-mw-sm | 720px | Kis-közepes |
ds-mw-md | 740px | Közepes (article-ok) |
ds-mw-lg | 960px | Nagy |
ds-mw-xl | 1200px | Extra nagy |
Miért fontos a breakpoint-first generálás?
<!-- Mobilon szélesebb (lg: 960px), desktop-on keskenyebb (md: 740px) -->
<div class="ds-mw-lg md:ds-mw-md">
<!-- md: 740px felülírja az lg: 960px-t desktop-on -->
</div>
<!-- Komplex kombináció: még a fordított sorrend is helyesen működik -->
<div class="sm:ds-mw-xl lg:ds-mw-xs">
<!-- sm: 1200px, lg: 540px (lg felülírja az sm-t) -->
</div>
Max-Width Utilities - Interaktív Példák
Max-width utilities gyakran használatosak centered content layout-okhoz:
Max-Width XS (540px)
class="ds-mw-xs"
Max-Width MD (740px)
class="ds-mw-md"
Responsive Max-Width: SM → LG → XL
class="ds-mw-sm md:ds-mw-lg xl:ds-mw-xl"
⚠️ Deprecated Osztályok
A következő osztályok deprecated, de backward compatibility miatt még elérhetők:
| Deprecated | Új alternatíva | Megjegyzés |
|---|---|---|
.ds-w100 |
ds-w-full |
Alias, támogatott de nem ajánlott |
.ds-w100-mobile |
ds-w-full md:ds-w-auto |
Mobile-first megközelítéssel cseréld! |
.ds-w100-mobile nem egyszerűen
lecserélhető! Mobile-first szemléletet kell alkalmazni: ds-w-full md:ds-w-auto
(alapból full width mobilon, aztán desktop-on auto).
Használati Best Practices
1. Centered Content Container
<!-- Tipikus centered layout max-width-tel -->
<div class="ds-mw-lg" style="margin: 0 auto;">
Article vagy main content
</div>
2. Responsive Cards
<!-- Card full-width mobilon, auto desktop-on -->
<div class="ds-w-full md:ds-w-auto">
Card content
</div>
3. Hero Section
<!-- Hero full width, de belső content korlátozva -->
<section class="ds-w-full">
<div class="ds-mw-2xl" style="margin: 0 auto;">
Hero content (max 1536px)
</div>
</section>
4. Sidebar vs Main
<div class="ds-flex-row">
<aside class="ds-w-full lg:ds-w-auto">Sidebar</aside>
<main class="ds-flex-grow">Main Content</main>
</div>
margin: 0 auto-val együtt centered layout-okhoz!
Spacing Utilities - Padding & Margin (spacing/_padding-margin.scss)
Spacing Osztályok Strukturúrája
Teljes padding és margin rendszer breakpoint támogatással, minden irányra és méretre.
Spacing Skála
| Méret | Érték | Használat |
|---|---|---|
3xs | 2px | Nagyon kicsi |
2xs | 4px | Extra kicsi |
xs | 8px | Kicsi |
sm | 12px | Kis-közepes |
md | 16px | Közepes |
lg | 24px | Nagy |
xl | 32px | Extra nagy |
2xl | 48px | 2x extra nagy |
3xl | 64px | 3x extra nagy |
4xl | 96px | 4x extra nagy |
5xl | 128px | 5x extra nagy |
Irány Jelölések
| Prefix | Jelentés | CSS tulajdonság |
|---|---|---|
p- | Padding (minden irány) | padding |
pt- | Padding top | padding-top |
pr- | Padding right | padding-right |
pb- | Padding bottom | padding-bottom |
pl- | Padding left | padding-left |
px- | Padding horizontal (left + right) | padding-left/right |
py- | Padding vertical (top + bottom) | padding-top/bottom |
m- | Margin (minden irány) | margin |
mt- | Margin top | margin-top |
mr- | Margin right | margin-right |
mb- | Margin bottom | margin-bottom |
ml- | Margin left | margin-left |
mx- | Margin horizontal (left + right) | margin-left/right |
my- | Margin vertical (top + bottom) | margin-top/bottom |
ds-p-md = 16px padding minden irányban,
md:ds-pt-lg = 24px padding-top desktop-on (md breakpoint-tól).
Hierarchikus Generálás + Breakpoint-First
A padding és margin utilities hierarchikus sorrendben generálódnak, így a specifikusabb class-ok mindig felülírják az általánosabbakat:
Hierarchia (CSS generálási sorrend)
- All sides (
ds-p-*,ds-m-*) - Legáltalánosabb, minden oldalra vonatkozik - Tengely (
ds-px-*,ds-py-*,ds-mx-*,ds-my-*) - Két oldal (horizontal/vertical) - Egyedi irányok (
ds-pt-*,ds-pb-*,ds-pl-*,ds-pr-*, stb.) - Legspecifikusabb, egy oldal
Miért fontos ez?
!important használatra! A hierarchia automatikusan helyes sorrendet biztosít.
Példák
<!-- Általános padding XL, de felül SM -->
<div class="ds-p-xl ds-pt-sm">
<!-- ds-pt-sm felülírja a ds-p-xl top értékét -->
</div>
<!-- Responsive + hierarchia kombináció -->
<div class="ds-p-sm md:ds-p-lg ds-pt-xs">
<!-- Base: sm padding, md+-on: lg padding, DE mindig xs top padding -->
</div>
<!-- Helyes cascade: nagyobb breakpoint felülírja -->
<div class="sm:ds-mx-xl lg:ds-mx-sm">
<!-- sm: XL margin-x, lg: SM margin-x (lg felülírja az xl-t) -->
</div>
sm:ds-p-xl lg:ds-p-sm helyesen működik).
Responsive Padding - Interaktív Példák
Változó Padding: SM → LG → XL
class="ds-p-sm md:ds-p-lg xl:ds-p-xl"
Belső padding class="ds-p-xl lg:ds-p-md xxl:ds-p-xs"
Padding: 12px (mobil), 24px (tablet), 32px (desktop)
Directional Padding: Vertical növekszik
class="ds-py-xs md:ds-py-md xl:ds-py-xl ds-px-md"
Aszimmetrikus Padding (csak top változik)
class="ds-pt-sm md:ds-pt-lg xl:ds-pt-2xl ds-pb-md ds-px-md"
Responsive Margin - Interaktív Példák
Változó Margin: XS → MD → LG
class="ds-m-xs md:ds-m-md xl:ds-m-lg"
Vertical Spacing (margin-bottom)
class="ds-mb-sm md:ds-mb-lg"
Horizontal Margin (auto centering)
class="ds-mx-md md:ds-mx-xl"
Kombinált Példák - Responsive Layouts
1. Card Grid Spacing
class="ds-p-sm md:ds-p-lg" + gap class="ds-gap-sm md:ds-gap-lg"
2. Section Spacing
<section class="ds-py-md md:ds-py-xl xl:ds-py-3xl ds-px-sm md:ds-px-lg">
Vertical spacing jelentősen növekszik nagy kijelzőkön
</section>
3. Responsive Article Margins
<article class="ds-my-md md:ds-my-lg xl:ds-my-2xl">
Article vertikális marginja növekszik
</article>
Használati Best Practices
1. Container Padding
<!-- Kisebb padding mobilon, nagyobb desktop-on -->
<div class="ds-p-sm md:ds-p-lg xl:ds-p-2xl">
Container content
</div>
2. Section Vertical Rhythm
<section class="ds-py-md md:ds-py-xl">
Section 1
</section>
<section class="ds-py-md md:ds-py-xl">
Section 2
</section>
3. Heading Margins
<h2 class="ds-mb-sm md:ds-mb-md xl:ds-mb-lg">
Heading
</h2>
<p>Paragraph</p>
4. Centered Content
<!-- Centered horizontálisan, növekvő margin -->
<div class="ds-mx-md md:ds-mx-xl" style="margin-left: auto; margin-right: auto;">
Content
</div>
gap utility-ket (flexbox/grid gap-hez)
külön szekcióban tárgyaljuk!
Gap Utilities (spacing/_gap.scss)
Gap Osztályok Strukturúrája
CSS Gap property Flexbox és Grid layout-okhoz, teljes breakpoint támogatással.
Gap Skála (ugyanaz, mint a spacing)
| Méret | Érték | Osztály példa |
|---|---|---|
3xs | 2px | ds-gap-3xs |
2xs | 4px | ds-gap-2xs |
xs | 8px | ds-gap-xs |
sm | 12px | ds-gap-sm |
md | 16px | ds-gap-md |
lg | 24px | ds-gap-lg |
xl | 32px | ds-gap-xl |
2xl | 48px | ds-gap-2xl |
3xl | 64px | ds-gap-3xl |
4xl | 96px | ds-gap-4xl |
5xl | 128px | ds-gap-5xl |
Gap Típusok
| Osztály prefix | CSS tulajdonság | Leírás | Példa |
|---|---|---|---|
gap- |
gap |
Gap minden irányban | ds-gap-md, md:ds-gap-lg |
gap-row- |
row-gap |
Vertikális gap (sorok között) | ds-gap-row-sm, md:ds-gap-row-md |
gap-column- |
column-gap |
Horizontális gap (oszlopok között) | ds-gap-column-lg, md:ds-gap-column-xl |
gap CSS property Flexbox és Grid
container-eknél működik. Nem használható normál block elemekhez (ott margin kell).
Flexbox Gap - Interaktív Példák
Alapvető Gap: XS → MD → XL
class="ds-flex-row ds-flex-wrap ds-gap-xs md:ds-gap-md xl:ds-gap-xl"
Gap: 8px (mobil), 16px (tablet), 32px (desktop)
Vertical Layout Gap: SM → LG
class="ds-flex-column ds-gap-sm md:ds-gap-lg"
Row Gap vs Column Gap
Külön kontroll a horizontális és vertikális távolsághoz:
Row Gap (vertikális távolság)
class="ds-gap-row-md ds-gap-column-xs"
Sorok között: 16px, oszlopok között: 8px
Responsive Row/Column Gap
class="ds-gap-row-sm md:ds-gap-row-lg ds-gap-column-xs md:ds-gap-column-md"
Grid Layout Gap
A gap utility-k CSS Grid-del is tökéletesen működnek:
CSS Grid + Responsive Gap
style="display: grid; grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));"
class="ds-gap-sm md:ds-gap-lg"
Gap vs Margin/Padding - Mikor mit használj?
| Szituáció | Ajánlott | Miért? |
|---|---|---|
| Flexbox/Grid gyerek elemek közti távolság | gap |
Automatikus, nincs szükség margin-ra minden elemen |
| Egyedi elem körüli távolság | margin |
Gap csak container-hez tartozik |
| Elem belső távolsága | padding |
Gap nem befolyásolja a belső teret |
| Card grid | gap |
Automatikus, egyenletes távolság |
| Section vertical rhythm | margin |
Section-ök nem flex/grid gyerekek |
Használati Best Practices
1. Card Grid Layout
<div class="ds-flex-row ds-flex-wrap ds-gap-sm md:ds-gap-lg">
<div class="card">Card 1</div>
<div class="card">Card 2</div>
<div class="card">Card 3</div>
</div>
2. Vertical Stacking
<div class="ds-flex-column ds-gap-md md:ds-gap-xl">
<section>Section 1</section>
<section>Section 2</section>
<section>Section 3</section>
</div>
3. Button Group
<div class="ds-flex-row ds-gap-xs md:ds-gap-sm">
<button>Button 1</button>
<button>Button 2</button>
<button>Button 3</button>
</div>
4. Aszimmetrikus Gap (Grid)
<div class="ds-gap-row-lg ds-gap-column-sm" style="display: grid; ...">
<!-- Grid items -->
</div>
Deprecated Osztályok és Migráció
⚠️ KRITIKUS: Mobile-First Megközelítés
FIGYELEM! A deprecated osztályok nem egyszerűen lecserélhetők! A régi osztályok desktop-first logikával működtek, az új rendszer viszont mobile-first.
- Alapértelmezett stílusok a legkisebb képernyőkhöz (mobil)
- Breakpoint osztályok felülírják a nagyobb töréspontokon
- Mindig add meg az alap osztályt (base class), aztán a breakpoint variánsokat!
Deprecated Osztályok Listája
| Deprecated Osztály | Régi viselkedés | ❌ ROSSZ migráció | ✅ HELYES migráció |
|---|---|---|---|
.ds-flex-mobile |
Flex csak mobilon | md:ds-flex |
ds-flex md:ds-block |
.ds-flex-desktop |
Flex csak desktop-on | ds-flex |
ds-block md:ds-flex |
.ds-block-mobile |
Block csak mobilon | md:ds-block |
ds-block md:ds-flex |
.ds-block-desktop |
Block csak desktop-on | ds-block |
ds-flex md:ds-block |
.ds-w100-mobile |
100% width csak mobilon | md:ds-w-full |
ds-w-full md:ds-w-auto |
.ds-w100 |
100% width mindig | - | ds-w-full (alias, még támogatott) |
Migrációs Útmutató - Részletes Példákkal
1. Flex Mobile → Új rendszer
md:ds-flex
Probléma: Mi lesz mobilon? Nincs definiálva!
ds-flex md:ds-block
Mobilon: flex, Desktop-on (md-től): block
<!-- Régi -->
<div class="ds-flex-mobile">...</div>
<!-- Új (MOBILE-FIRST) -->
<div class="ds-flex md:ds-block">...</div>
2. Flex Desktop → Új rendszer
ds-flex
Probléma: Flex lesz mindenhol, nem csak desktop-on!
ds-block md:ds-flex
Mobilon: block, Desktop-on (md-től): flex
<!-- Régi -->
<div class="ds-flex-desktop">...</div>
<!-- Új (MOBILE-FIRST) -->
<div class="ds-block md:ds-flex">...</div>
3. Width 100% Mobile → Új rendszer
md:ds-w-full
Probléma: Desktop-on lesz full width, nem mobilon!
ds-w-full md:ds-w-auto
Mobilon: 100% width, Desktop-on (md-től): auto width
<!-- Régi -->
<div class="ds-w100-mobile">...</div>
<!-- Új (MOBILE-FIRST) -->
<div class="ds-w-full md:ds-w-auto">...</div>
Vizuális Összehasonlítás
Példa: Flex Mobile (régi) vs. Új rendszer
✅ HELYES új kód: ds-flex md:ds-block
Mobilon: flex (row), Desktop-on: block (stacked)
❌ ROSSZ próbálkozás: md:ds-flex
Probléma: Mobilon nincs definiálva display érték!
Migrációs Checklist
Lépések a biztonságos migrációhoz:
-
Azonosítsd a deprecated osztályokat
Keress rá:.ds-flex-mobile,.ds-flex-desktop,.ds-w100-mobile -
Értsd meg a régi viselkedést
Mit csinál mobilon? Mit desktop-on? -
Gondold végig a mobile-first logikát
Base class = mobil, breakpoint class = desktop -
Írd át az osztályokat
Használd a táblázatot és a példákat! -
Tesztelj!
Ellenőrizd mobilon ÉS desktop-on is!
Gyakori Hibák és Megoldások
❌ Hiba 1: Csak breakpoint osztály, nincs base class
<!-- ROSSZ -->
<div class="md:ds-flex-row">...</div>
<!-- HELYES -->
<div class="ds-flex-column md:ds-flex-row">...</div>
❌ Hiba 2: Desktop-first gondolkodás
<!-- ROSSZ (desktop-first) -->
<div class="ds-flex lg:ds-block">...</div>
<!-- Ez azt jelenti: flex mindenhol, block csak nagy kijelzőn -->
<!-- HELYES (mobile-first) -->
<div class="ds-block md:ds-flex">...</div>
<!-- Ez azt jelenti: block mobilon, flex tablet-től -->
❌ Hiba 3: Deprecated osztály egyszerű cseréje
<!-- ROSSZ -->
.ds-flex-mobile → ds-flex (nem ugyanaz!)
<!-- HELYES -->
.ds-flex-mobile → ds-flex md:ds-block (mobil flex, desktop block)
Mixin API - Egyedi Utility Generálás
Mire valók a Mixin-ek?
Ha egyedi responsive utility osztályokat szeretnél létrehozni, használhatod a PDS mixin API-ját. Két fő mixin rendszer áll rendelkezésre: Media Query (viewport alapú) és Container Query (szülő container alapú) alapú generáláshoz.
Media Query Mixin-ek
1. ds-responsive-class
Egyetlen utility osztály generálása base + összes breakpoint variánssal.
@use 'pds/foundation/abstracts/mixins/responsive-media' as resp;
@include resp.ds-responsive-class('ds-my-utility') {
padding: 1rem;
background: blue;
}
Generál: .ds-my-utility, .md:ds-my-utility, .lg:ds-my-utility, stb.
2. ds-responsive-class-group
Több ütköző utility osztály generálása breakpoint-first sorrendben. Használd akkor, ha ugyanazt a CSS property-t állítod különböző értékekre.
@use 'pds/foundation/abstracts/mixins/responsive-media' as resp;
@include resp.ds-responsive-class-group((
'ds-text-small': (font-size: 0.875rem),
'ds-text-base': (font-size: 1rem),
'ds-text-large': (font-size: 1.25rem)
));
3. ds-responsive-only-class
Csak breakpoint variánsok generálása, base osztály nélkül.
@use 'pds/foundation/abstracts/mixins/responsive-media' as resp;
@include resp.ds-responsive-only-class('ds-desktop-only') {
display: block;
}
Generál: .md:ds-desktop-only, .lg:ds-desktop-only, stb. (nincs .ds-desktop-only)
Container Query Mixin-ek
1. ds-container-class
Egyetlen utility osztály generálása container query variánsokkal (generic és/vagy named).
@use 'pds/foundation/abstracts/mixins/responsive-container' as container;
@include container.ds-container-class('ds-product-card', $containers: 'all') {
display: grid;
gap: 1rem;
}
Generál: .@container:md:ds-product-card, .@cn-1:lg:ds-product-card, stb.
2. ds-container-class-group
Több ütköző utility osztály generálása container query-vel, breakpoint-first sorrendben.
@use 'pds/foundation/abstracts/mixins/responsive-container' as container;
@include container.ds-container-class-group((
'ds-grid-1col': (display: grid, grid-template-columns: 1fr),
'ds-grid-2col': (display: grid, grid-template-columns: repeat(2, 1fr)),
'ds-grid-3col': (display: grid, grid-template-columns: repeat(3, 1fr))
), $containers: (cn-1, cn-2));
Használat: @cn-1:md:ds-grid-2col @cn-1:xl:ds-grid-3col
📌 Mikor használd a group mixint?
- Amikor ugyanazt a CSS property-t állítod különböző értékekre
- Amikor komplex breakpoint váltásokat szeretnél (pl. small → large → small)
- Amikor el akarod kerülni a CSS cascade konfliktusokat
Használt Breakpoint-ok
A mixin-ek automatikusan használják a $ds-bps (media query) és
$ds-container-bps (container query) változókat a töréspontokhoz:
$ds-bps: (
xxs: 320px,
xs: 400px,
sm: 600px,
md: 768px,
lg: 960px,
xl: 1280px,
xxl: 1440px
);
Saját breakpoint lista is megadható a $breakpoints paraméterrel.
Container Query Support
⚙️ Státusz: Infrastruktúra kész, részleges implementáció
A Container Query infrastruktúra teljes mértékben implementált, de jelenleg csak bizonyos utility osztályok támogatják.
✅ Kész komponensek:
.ds-container- Generic (névtelen) container definíció.ds-container-cn-1....ds-container-cn-6- Named container definíciók- Mixin rendszer (
ds-container-class,ds-container-class-group)
🧪 Container Query támogatással implementált osztályok:
ds-flex-row-@container:md:ds-flex-row,@cn-1:lg:ds-flex-rowds-flex-column-@container:md:ds-flex-column,@cn-1:lg:ds-flex-column
ds-flex-row és ds-flex-column
osztályok referencia implementációként szolgálnak. Új utility-k hozzáadásakor
ugyanezt a mintát kell követni.
Mi az a Container Query?
A Container Query egy modern CSS funkció, amely lehetővé teszi, hogy egy elem stílusa a tartalmazó container mérete alapján változzon, nem pedig a teljes viewport mérete alapján.
Media Query vs Container Query összehasonlítás:
| Szempont | Media Query | Container Query |
|---|---|---|
| Mi alapján? | Viewport szélessége | Container szélessége |
| Használati eset | Globális responsive design | Komponens-alapú responsive design |
| Példa szintaxis | md:ds-flex-row |
@cn-1:md:ds-flex-row |
| Rugalmasság | Minden elem ugyanúgy reagál | Minden container függetlenül reagál |
| Reusability | Közepes | Magas (komponensek bárhová helyezhetők) |
Mikor használjunk Container Query-t?
- Reusable komponensek - Card, widget, stb. amit különböző kontextusokban használsz
- Nested layout-ok - Sidebar-ban, modal-ban, vagy egyéb containerekben
- Sidebar/main layout - Amikor a sidebar mérete alapján kell változnia a tartalomnak
- Dashboard widget-ek - Amikor a grid cell mérete változó
Generic Container Használat
Egyszerű esetekben használd a generic (névtelen) containereket:
1. Elérhető Container Osztályok
A PDS automatikusan generálja az alábbi container definíciókat:
.ds-container- Generic (névtelen) container.ds-container-cn-1....ds-container-cn-6- Named containerek (nested használatra)
foundation/utils/_containers.scss
fájlban kerülnek generálásra, ami automatikusan be van importálva a design-system-be.
2. HTML Használat
<div class="ds-container">
<div class="@container:md:ds-flex-row @container:lg:ds-flex-column">
<div>Item 1</div>
<div>Item 2</div>
</div>
</div>
Működés:
- A
.ds-containerdefiniálja a container context-et - A
@container:md:prefix azt jelenti: "ha a container eléri az md töréspontot (768px)" - A gyerek elem a container mérete alapján változik, nem a viewport alapján
3. Példa: Reusable Card Component
<!-- Kis container (pl. sidebar) -->
<div class="ds-container" style="width: 320px;">
<div class="card @container:md:ds-flex-row">
<!-- Card tartalma stack-elt marad, mert container < 768px -->
</div>
</div>
<!-- Nagy container (pl. main content) -->
<div class="ds-container" style="width: 960px;">
<div class="card @container:md:ds-flex-row">
<!-- Card tartalma horizontal lesz, mert container >= 768px -->
</div>
</div>
Named Container Használat (Nested Layouts)
Ha többszintű nested layout-od van, használj named containereket a megkülönböztetéshez:
PDS Core Named Containerek
Alapértelmezetten elérhető named containerek általános nesting-hez:
cn-1,cn-2,cn-3,cn-4,cn-5,cn-6
Példa: Nested Layout
<!-- Külső container (Level 1) -->
<div class="ds-container-cn-1">
<div class="@cn-1:md:ds-flex-row @cn-1:lg:ds-gap-xl">
Külső tartalom
<!-- Belső nested container (Level 2) -->
<div class="ds-container-cn-2">
<div class="@cn-2:sm:ds-flex-column @cn-2:md:ds-p-lg">
Belső tartalom - független a külsőtől!
</div>
</div>
</div>
</div>
Előnyök:
- A
cn-1éscn-2containerek függetlenül működnek - A belső container töréspontjai nem befolyásolják a külsőt
- Tiszta, olvasható kód nested layout-oknál
Mikor használjunk Named Containereket?
- Sidebar + Main layout - Mindkettő container, függetlenül reagálnak
- Card grid nested layout - Külső grid, belső card-ok
- Dashboard komponensek - Widget-ek saját container context-tel
- Modal/Drawer tartalom - Modal maga egy container, tartalma másik
Referencia Implementáció: ds-flex-row és ds-flex-column
Ezek az osztályok referencia implementációként támogatják a container query-t.
A _flex.scss fájlban implementálva vannak mindhárom típus számára:
1. Media Query használat (AKTÍV):
<div class="ds-flex md:ds-flex-row lg:ds-flex-column">
Viewport mérete alapján változik
</div>
2. Generic Container Query (AKTÍV - használatra kész):
<!-- Container definíció -->
<div class="ds-container">
<div class="@container:md:ds-flex-row">
Container mérete alapján változik
</div>
</div>
3. Named Container Query (AKTÍV - használatra kész):
<!-- Named container definíció -->
<div class="ds-container-cn-1">
<div class="@cn-1:md:ds-flex-row @cn-1:lg:ds-flex-column">
Named container mérete alapján változik
</div>
</div>
_flex.scss fájlt, és ugyanúgy használd a
ds-container-class-group() mixint.
Projekt-specifikus Containerek
Projekt-szintű SCSS-ben regisztrálhatók egyedi containerek scope-pal, hogy ne ütközzenek más projektekkel:
1. Containerek Regisztrálása
// myproject/styles/main.scss
@use 'pds/foundation/abstracts/mixins/responsive-container' as container;
// Projekt-specifikus containerek regisztrálása
@include container.ds-register-containers(
(product-grid, user-card, dashboard),
$scope: 'myproject'
);
// Containerek generálása (PDS core + projekt-specifikus)
@include container.ds-generate-container-definitions();
Ez létrehozza a következő projekt-specifikus container osztályokat:
.ds-container-myproject-product-grid.ds-container-myproject-user-card.ds-container-myproject-dashboard
2. HTML Használat
<div class="ds-container-myproject-product-grid">
<div class="@myproject-product-grid:md:ds-flex-row">
Projekt-specifikus container query
</div>
</div>
3. Előnyök
- Beszédes nevek -
product-gridegyértelmű - Nincs ütközés - Scope prefix védi a nevet
- Projekt-specifikus - Nem szennyezi a PDS core-t
- Karbantartható - Könnyen azonosítható a használat
Container Query Breakpointok
Alapértelmezetten a container query-k ugyanazokat a breakpoint-okat használják,
mint a media query-k ($ds-bps):
| Breakpoint | Min-Width | Példa használat |
|---|---|---|
xxs | 320px | @container:xxs:ds-p-sm |
xs | 400px | @cn-1:xs:ds-flex-row |
sm | 600px | @container:sm:ds-gap-md |
md | 768px | @cn-2:md:ds-flex-column |
lg | 960px | @container:lg:ds-p-xl |
xl | 1280px | @cn-1:xl:ds-gap-2xl |
xxl | 1440px | @container:xxl:ds-p-3xl |
$ds-container-bps változó projekt-szinten,
ha a container-ekhez más töréspontokat szeretnél használni.
Browser Támogatás
Container Query támogatás modern böngészőkben:
| Böngésző | Minimális verzió | Státusz |
|---|---|---|
| Chrome / Edge | 105+ | ✅ Teljes támogatás |
| Firefox | 110+ | ✅ Teljes támogatás |
| Safari | 16+ | ✅ Teljes támogatás |
| IE 11, régebbi böngészők | - | ❌ Nincs támogatás |
Fallback Stratégia
A container query-k automatikusan ignorálódnak régebbi böngészőkben:
- A base class-ok (pl.
ds-flex) továbbra is működnek - A
@container:prefix-es osztályok egyszerűen nem kerülnek alkalmazásra - Nincs szükség polyfill-re vagy feature detection-re
- Progressive enhancement: modern böngészőkben jobb UX
Aktiválási Útmutató
Amikor készen állsz a container query funkció projekt-szintű használatára:
1. Projekt SCSS Fájl
// myproject/styles/main.scss
@use 'pds/foundation/abstracts/mixins/responsive-container' as container;
// Opcionálisan: Projekt-specifikus containerek
@include container.ds-register-containers(
(sidebar, main-content, widget),
$scope: 'myapp'
);
// Container definíciók generálása
@include container.ds-generate-container-definitions();
2. HTML-ben Használd a Container Osztályokat
<div class="ds-container-cn-1">
<div class="@cn-1:md:ds-flex-row">
Tartalom
</div>
</div>
3. Tesztelés
- Ellenőrizd modern böngészőkben (Chrome 105+, Firefox 110+, Safari 16+)
- Teszteld különböző container méretekkel
- Vizsgáld meg a fallback viselkedést régebbi böngészőkben
ds-flex-row és ds-flex-column
osztályok első referencia implementációként támogatják a container query-ket.
Az alapértelmezett container definíciók (.ds-container,
.ds-container-cn-1 ... .ds-container-cn-6) automatikusan generálódnak.