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ó)
ℹ️ Container Query: Jelenleg csak a 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.

✅ HELYES: class="ds-flex md:ds-block"
→ Mobilon flex, desktop-on (md-től) block
❌ ROSSZ gondolkodás: 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


Viewport szélesség: --px
Aktív breakpoint: --

💡 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.

Aktuális viewport szélesség: --px | Breakpoint: --
📱 Csak mobilon látszik (width < 768px)
class="ds-block md:ds-none"
💻 Csak desktop-on látszik (width >= 768px)
class="ds-none md:ds-block"
📱 Csak tableten látszik (600px - 76px)
class="ds-none sm:ds-block md:ds-none"
🖥️ Csak nagy kijelzőkön látszik (width >= 1280px)
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:

1. Inline → Block váltás
Ez az elem inline mobilon, block desktop-on
class="ds-inline md:ds-block"

2. Block → Inline-Block váltás

Block mobilon
Inline-block desktop-on
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>
✅ Best Practice: Mindig gondold át, hogy az elem alapból (mobilon) mi legyen, majd a breakpoint-oknál add meg a változásokat!

TODO: Grid Display Utilities


A következő osztályok későbbi implementálásra várnak:

  • ds-grid - CSS Grid display
  • ds-inline-grid - Inline grid display
  • Grid-specifikus utility osztályok (grid-cols, grid-rows, stb.)
ℹ️ Státusz: Grid utilities később kerülnek be a rendszerbe. Egyelőre használj flexbox-ot vagy natív CSS Grid-et.

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


Viewport szélesség: --px

Column mobilon, Row desktop-on

Item 1
Item 2
Item 3
class="ds-flex-column md:ds-flex-row ds-gap-sm"

Minden törésponton változik az irány

A
B
C
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

No wrap mobilon
Wrap desktop-on
Item 3
Item 4
class="ds-flex-row ds-flex-nowrap md:ds-flex-wrap"

Flex Grow Példa

Fix
Grow - desktop-on kitölti a helyet
Fix
class="ds-flex-no-grow lg:ds-flex-grow"

Flex Alignment - Justify és Align


Justify Content Példák

Start
lg:End
xl:Center
xxl:Between
Center
Center
End
End
Between
Between

Align Items Példa

Center
lg:Start
xxl:End
class="ds-flex-row ds-flex-align-center lg:ds-flex-align-start xxl:ds-flex-align-end"

🚀 Container Query Support (Implementált!)


🚧 Jó tudni: A 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-2525%Negyed szélesség
ds-basis-3030%Sidebar arány
ds-basis-4040%2/5 szélesség
ds-basis-4545%Közel fele
ds-basis-5050%Fél szélesség
ds-basis-6060%3/5 szélesség
ds-basis-7575%Háromnegyed szélesség
ds-basis-100100%Teljes szélesség

Példa: Responsive Flex-Basis

✅ Helyes használat: A magasabb breakpoint felülírja az alacsonyabbat
<!-- 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>
⚠️ Fontos: A flex-basis mindig a 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>
💡 Javaslat: Kombináld a flex-direction osztályokat gap utility-kkel és justify-content és align-items osztályokkal.

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

Relative pozícionálás (top: 20px, left: 20px)
class="ds-relative"

2. Absolute Positioning

Absolute (top-right sarok)
Absolute (bottom-left sarok)
class="ds-absolute"

3. Sticky Positioning

ℹ️ Megjegyzés: A ds-sticky csak scroll kontextusban működik. Használd top/bottom/left/right értékekkel együtt.

Text Alignment - Responsive Példák


Viewport szélesség: --px

Left mobilon, Center desktop-on

Ez a szöveg balra igazított mobilon, középre igazított desktop-on.
class="ds-text-left xl:ds-text-center"

Center mobilon, Right desktop-on

Ez a szöveg középre igazított mobilon, jobbra igazított desktop-on.
class="ds-text-center xl:ds-text-right"

Left → Center (tablet) → Right (desktop)

Ez a szöveg balra igazított mobilon, középre tableten, jobbra desktop-on.
class="ds-text-left lg:ds-text-center xl:ds-text-right"

Overflow Kezelés


1. Overflow Hidden

Ez a tartalom túlnyúlik a konténeren, de az overflow-hidden miatt nem látszik. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
class="ds-overflow-hidden"

2. Overflow Auto (scroll ha szükséges)

Ez a tartalom scrollozható, ha túlnyúlik. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
class="ds-overflow-auto"

3. Responsive Overflow

Mobilon overflow hidden, desktop-on scrollozható. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation.
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>
⚠️ Figyelem: Az inline style-ok csak a példák kedvéért használatosak ebben a dokumentációban. A valós kódban mindig (akár egyedi) CSS osztályokat kell használni.

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


Viewport szélesség: --px

Full Width mobilon, Auto desktop-on

100% széles mobilon, auto széles desktop-on
class="ds-w-full lg:ds-w-auto"

Auto mobilon, Full Width desktop-on

Auto széles mobilon, 100% 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

Auto height mobilon, full height 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-3xs320pxExtra kicsi (mobil)
ds-mw-2xs360pxNagyon kicsi
ds-mw-xs540pxKicsi
ds-mw-sm720pxKis-közepes
ds-mw-md740pxKözepes (article-ok)
ds-mw-lg960pxNagy
ds-mw-xl1200pxExtra nagy

Miért fontos a breakpoint-first generálás?

✅ Helyes cascade: A magasabb breakpoint mindig felülírja az alacsonyabbat
<!-- 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>
💡 Tipikus használat: Centered content layout-okhoz, ahol az olvashatóság érdekében korlátozzuk a sorhosszúságot.

Max-Width Utilities - Interaktív Példák


Max-width utilities gyakran használatosak centered content layout-okhoz:

Max-Width XS (540px)

Ez a tartalom maximum 540px széles lehet
class="ds-mw-xs"

Max-Width MD (740px)

Ez a tartalom maximum 740px széles lehet - jó article-okhoz
class="ds-mw-md"

Responsive Max-Width: SM → LG → XL

Max-width változik a töréspontokon: 720px (mobil), 960px (tablet), 1200px (desktop)
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!
⚠️ Figyelem: A .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>
✅ Tip: A max-width utilities-t gyakran használd 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
3xs2pxNagyon kicsi
2xs4pxExtra kicsi
xs8pxKicsi
sm12pxKis-közepes
md16pxKözepes
lg24pxNagy
xl32pxExtra nagy
2xl48px2x extra nagy
3xl64px3x extra nagy
4xl96px4x extra nagy
5xl128px5x extra nagy

Irány Jelölések

Prefix Jelentés CSS tulajdonság
p-Padding (minden irány)padding
pt-Padding toppadding-top
pr-Padding rightpadding-right
pb-Padding bottompadding-bottom
pl-Padding leftpadding-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 topmargin-top
mr-Margin rightmargin-right
mb-Margin bottommargin-bottom
ml-Margin leftmargin-left
mx-Margin horizontal (left + right)margin-left/right
my-Margin vertical (top + bottom)margin-top/bottom
ℹ️ Példa: 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)

  1. All sides (ds-p-*, ds-m-*) - Legáltalánosabb, minden oldalra vonatkozik
  2. Tengely (ds-px-*, ds-py-*, ds-mx-*, ds-my-*) - Két oldal (horizontal/vertical)
  3. Egyedi irányok (ds-pt-*, ds-pb-*, ds-pl-*, ds-pr-*, stb.) - Legspecifikusabb, egy oldal

Miért fontos ez?

✅ Előny: Nincs szükség !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>
⚠️ Fontos: A breakpoint-first generálásnak köszönhetően a magasabb breakpoint utility-k mindig felülírják az alacsonyabbakat, még akkor is, ha a spacing level fordított sorrendben van megadva (pl. sm:ds-p-xl lg:ds-p-sm helyesen működik).

Responsive Padding - Interaktív Példák


Viewport szélesség: --px

Változó Padding: SM → LG → XL

Belső tartalom
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

Vertical padding változik, horizontal fix (16px)
class="ds-py-xs md:ds-py-md xl:ds-py-xl ds-px-md"

Aszimmetrikus Padding (csak top változik)

Top padding növekszik töréspontonként
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

Ez az elem margin-ja növekszik töréspontonként
class="ds-m-xs md:ds-m-md xl:ds-m-lg"

Vertical Spacing (margin-bottom)

Elem 1
Elem 2 (távolság változik töréspontonként)
class="ds-mb-sm md:ds-mb-lg"

Horizontal Margin (auto centering)

Horizontal margin növekszik
class="ds-mx-md md:ds-mx-xl"

Kombinált Példák - Responsive Layouts


1. Card Grid Spacing

Card 1: Padding és gap növekszik desktop-on
Card 2
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>
✅ Tip: Kombináld a spacing utilities-t mindig a töréspontokkal! Kisebb padding/margin mobilon, nagyobb desktop-on jobb felhasználói élményt ad.
💡 Megjegyzés: A 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
3xs2pxds-gap-3xs
2xs4pxds-gap-2xs
xs8pxds-gap-xs
sm12pxds-gap-sm
md16pxds-gap-md
lg24pxds-gap-lg
xl32pxds-gap-xl
2xl48pxds-gap-2xl
3xl64pxds-gap-3xl
4xl96pxds-gap-4xl
5xl128pxds-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
ℹ️ Megjegyzés: A 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


Viewport szélesség: --px

Alapvető Gap: XS → MD → XL

Item 1
Item 2
Item 3
Item 4
Item 5
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

Card 1
Card 2
Card 3
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)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class="ds-gap-row-md ds-gap-column-xs"

Sorok között: 16px, oszlopok között: 8px

Responsive Row/Column Gap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

1
2
3
4
5
6
style="display: grid; grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));"
class="ds-gap-sm md:ds-gap-lg"
ℹ️ Megjegyzés: A Grid utilities későbbi implementálásra várnak. Egyelőre natív CSS Grid-et használj, de a gap utility-k már most működnek vele!

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>
❗ Javaslat: A gap utility-k tisztább kódot eredményeznek mint a margin-alapú spacing! Használd őket mindig Flexbox/Grid layout-oknál.

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.

Mit jelent a 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)
⚠️ Backward Compatibility: A deprecated osztályok még működnek (kivéve amit már eltávolítottunk), de ne használd őket új kódban! Fokozatosan migrálj az új rendszerre.

Migrációs Útmutató - Részletes Példákkal


1. Flex Mobile → Új rendszer

❌ ROSSZ: md:ds-flex
Probléma: Mi lesz mobilon? Nincs definiálva!
✅ HELYES: 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

❌ ROSSZ: ds-flex
Probléma: Flex lesz mindenhol, nem csak desktop-on!
✅ HELYES: 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

❌ ROSSZ: md:ds-w-full
Probléma: Desktop-on lesz full width, nem mobilon!
✅ HELYES: 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


Viewport szélesség: --px

Példa: Flex Mobile (régi) vs. Új rendszer

✅ HELYES új kód: ds-flex md:ds-block

Item 1
Item 2

Mobilon: flex (row), Desktop-on: block (stacked)

❌ ROSSZ próbálkozás: md:ds-flex

Item 1
Item 2

Probléma: Mobilon nincs definiálva display érték!

Migrációs Checklist


Lépések a biztonságos migrációhoz:

  1. Azonosítsd a deprecated osztályokat
    Keress rá: .ds-flex-mobile, .ds-flex-desktop, .ds-w100-mobile
  2. Értsd meg a régi viselkedést
    Mit csinál mobilon? Mit desktop-on?
  3. Gondold végig a mobile-first logikát
    Base class = mobil, breakpoint class = desktop
  4. Írd át az osztályokat
    Használd a táblázatot és a példákat!
  5. Tesztelj!
    Ellenőrizd mobilon ÉS desktop-on is!
✅ Tip: Egy file-ban egyszerre migrálj, ne az egész projektet! Így könnyebb ellenőrizni és kijavítani a problémákat.

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)
⚠️ Emlékeztető: A deprecated osztályok NEM 1:1 cserélhetők! Minden esetben gondold végig a mobile-first logikát!

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)
));
✅ Előny: A magasabb breakpoint mindig felülírja az alacsonyabbat (helyes CSS cascade).

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-row
  • ds-flex-column - @container:md:ds-flex-column, @cn-1:lg:ds-flex-column
⚠️ Fontos: Más utility osztályok (display, position, size, spacing, gap, stb.) jelenleg NEM támogatják a container query-t. Az infrastruktúra készen áll, de ezeket még implementálni kell a megfelelő SCSS fájlokban.
💡 Jövőbeli bővítés: A 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)
ℹ️ Megjegyzés: Ezek a container osztályok a 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-container definiá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 és cn-2 containerek 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>
📚 Sablon használat: Ezek az osztályok referencia implementációként szolgálnak! Ha más utility-knél is szeretnéd használni a container query támogatást, nézd meg a _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-grid egyé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
xxs320px@container:xxs:ds-p-sm
xs400px@cn-1:xs:ds-flex-row
sm600px@container:sm:ds-gap-md
md768px@cn-2:md:ds-flex-column
lg960px@container:lg:ds-p-xl
xl1280px@cn-1:xl:ds-gap-2xl
xxl1440px@container:xxl:ds-p-3xl
💡 Jövőbeli lehetőség: Később bevezethető egy külön, "karcsúbb" $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
✅ Best Practice: Használd a base class-okat mobil-first módon, így a régebbi böngészők is használható felületet kapnak!

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
ℹ️ Referencia implementáció: A 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.