Mi az a Container elem a Bricks Builderben
A Container a Bricks layoutok natív eleme: egy rugalmas, egymásba ágyazható elem, amely a benne lévő tartalmat CSS Flexbox vagy Grid segítségével rendezi el. Önmagában semmit nem mutat a látogatónak, nincs saját vizuális megjelenése, egyetlen feladata, hogy irány, térköz és igazítás szerint a helyükre tegye a gyerekelemeket. A trükk az, hogy ugyanaz az elem tud vízszintes sor és függőleges oszlop is lenni, attól függően, mit állítasz be a Direction mezőben.
A Bricks 1.5-ös verziója (2022 szeptember) éppen ezért cserélte le a régi Row/Column párost egyetlen Container elemre. Korábban a Row mindig vízszintes sávot jelentett, a Column pedig egy fix helyet ezen belül: kényelmes volt, de merev, és mobilra sokszor új elemekkel kellett dolgozni ahelyett, hogy egy tulajdonságot átállítasz. Ma egy elemtípust kell ismerned, a Flexbox és Grid logika pedig közvetlenül látszik a szerkesztőben. A gyakorlatban leggyakrabban ezekre használom: kártya-, ikon- vagy logósorok vízszintes elrendezésére, két- és háromoszlopos szekciókra, összetettebb grid layoutokra, valamint arra, hogy egy Section-ön belül paddinggel és max-width-tel kordában tartsam a tartalom szélességét.
Container, Block vagy Div. Melyik mire való?
| Container | Block | Div | |
|---|---|---|---|
| HTML tag | div (átállítható) | div | div |
| Alapértelmezett display | flex | block | block |
| Fő feladat | Elrendezés: sor, oszlop, rács | Önálló tartalmi egység | Apró wrapper, utility |
| Flexbox / Grid beállítások | Igen, teljes körűen | Igen, ha átállítod | Ritkán kell |
| Tartalmaz közvetlenül szöveget | Ritkán | Jellemzően igen | Egy-két elemet |
| Jellemző eset | Kártyasor, kétoszlopos szekció | Kártya, feature box | Ikon + felirat, badge |
A sorrend, amit érdemes tartani: Section → Container → Block vagy Div. A Section adja a teljes szélességű vizuális blokkot, a Container végzi a tényleges layout munkát, a Block egy kerek egészet alkotó tartalmi elem (tipikusan egy kártya vagy feature box), a Div pedig csak összefog két-három apróságot, mondjuk egy ikont és egy feliratot. Ha a struktúrapanelen egy Div vagy egy Block ül közvetlenül a Section gyerekeként, ott már megbomlott valami, és hónapok múlva te magad sem fogod érteni, miért. Mindhárom elem egymásba ágyazható, a különbség nem a képességeikben van, hanem abban, mekkora feladatra tervezték őket.
E billentyű vagy a bal oldali „Add element” (+) gomb, rákeresel, hogy „Container”, és a vászonra vagy közvetlenül egy meglévő Section-be húzod. Alapértelmezetten row irányban, 100% szélességgel jön létre, onnantól a te dolgod finomhangolni. Ha egy már felépített Container-t másolsz (Ctrl+D / Cmd+D), a teljes tartalma a gyerekelemekkel együtt klónozódik, ami egy összetett kártyalayoutnál sokkal gyorsabb, mint mindent nulláról felépíteni: utána már csak a szövegeket és a képeket kell cserélni. A Ctrl+Shift+Z az utolsó módosítást vonja vissza, ha elrontanál valamit szerkesztés közben.
Amit be tudsz állítani hozzá:
Elrendezés. A Container alapból Flexbox-ot használ, és öt mező lefedi a helyzetek nagy részét. A Direction row esetén vízszintes (ez az alapértelmezett), column esetén függőleges elrendezést ad. A Wrap engedélyezésével a gyerekelemek új sorba törnek, ha kifogynak a helyből, nowrap esetén inkább összenyomódnak. A Justify Content a főtengely mentén igazít (flex-start, center, space-between, space-around, space-evenly), az Align Items a kereszttengely mentén (stretch, flex-start, center, flex-end). A Gap a gyerekelemek közti távolság, sor- és oszlopirányban külön is beállítható. Három egyenlő szélességű oszlophoz ez a kombináció a legtöbb kártyasornál működik: Direction: row, Wrap: wrap, Justify Content: flex-start, Align Items: stretch, Gap: 24px.
Grid. A Bricks 1.8 óta a Container natívan tud CSS Gridet is, elég a Layout panelen Grid módra váltani. A Grid Template Columns adja meg az oszlopok számát és arányát (repeat(3, 1fr) három egyenlőt jelent, 1fr 2fr egy keskenyebb és egy szélesebb hasábot), a Grid Template Rows a sorok magasságát, a Grid Gap pedig az összes cella közti távolságot egyszerre. Grid-hez akkor nyúlj Flexbox helyett, ha valódi kétdimenziós elrendezésre van szükség (sorok és oszlopok egyszerre számítanak), ha a celláknak pontosan egymáshoz kell igazodniuk, például egyforma magasságú kártyarácsnál, vagy ha egy elemnek több cellát kell áthidalnia (grid-column: span 2). Flex és Grid között utólag is bármikor válthatsz, a tartalom megmarad, de a gyerekelemek szélességét és a gap-et újra kell hangolni, mert a két rendszer másképp számol.
Méret és pozíció. A Width alapból 100%, és Container-en belül mindig a szülő szélességéhez viszonyul, 33.33% tehát három egyenlő oszlopot ad. A Max-width korlátozza a tartalom maximális szélességét (tipikusan 1200px), középre igazításhoz ehhez társítani kell egy margin: 0 auto értéket. A Height jellemzően maradhat auto-n, a tartalom szabja meg, min-height-tel viszont alsó határt adhatsz neki. Ha maga a Container is egy Flexbox-szülő gyereke, a Flex Grow, Shrink és Basis mezőkkel szabályozod, hogyan nő vagy zsugorodik a rendelkezésre álló hely függvényében. Reszponzív oldalon kerüld a fix pixeles szélességet, %, fr és clamp() értékekkel érdemes dolgozni.
Padding, margin, gap. A padding a Container saját belső margója, ez tolja el a tartalmat a Container szélétől, a margin a szomszédos elemekhez ad térközt kívülről. A gyerekelemek közti távolságot viszont ne margin-nal pótold, arra ott a gap: Flexbox és Grid szülőn belül konzisztensebb, és nem kell az utolsó elemről kézzel leszedni a felesleges térközt. Margin csak kivételes esetben, és ott is figyelj a margin collapse jelenségre.
HTML tag. A Container alapból egy sima widget, de a HTML Tag mezőben bármikor lecserélheted valami szemantikusabbra, ami SEO és akadálymentesítés szempontjából is számít:
- önálló tartalmi egységhez (blogkártya, termék),
- kiegészítő tartalomhoz,
- navigációs blokkhoz,
- a fej- és lábléchez,
- az oldal fő tartalmi blokkjához.
Hierarchia és reszponzív viselkedés
Egy tipikus kártyasor felépítése így néz ki: a Section adja a hátteret, benne egy Container row iránnyal, 24px gap-pel és 1200px max-width-tel, azon belül pedig három Block, egyenként 33% szélességgel és 32px paddinggel. Ugyanez a Bricks 1.5 előtt Section → Row → három Column volt, tehát a szerkezet logikája nem változott, csak egyetlen elemtípus vette át két másik szerepét. Két-három beágyazási szint általában elég és átlátható, a negyediktől viszont nehezen olvasható a struktúra, és a DOM mélysége is rontja a teljesítményt. Ha egy Container-nek csak egyetlen gyereke van, és semmilyen layout-munkát nem végez, az valószínűleg felesleges szint.
A reszponzív viselkedés a Container legerősebb tulajdonsága, és általában egyetlen beállításon múlik. Egy klasszikus kétoszlopos szekciónál (szöveg az egyik oldalon, kép a másikon) a külső Container row irányú, 48px gap-pel, benne két column irányú Container 50-50% szélességgel. Mobilon elég a külső Container Direction értékét column-ra váltani, és a két blokk egymás alá kerül. Ez a módosítás csak a mobil nézetet érinti, a desktop változatlan marad, és nincs szükség külön mobil-specifikus elemekre. Érdemes a Container-eket a struktúrapanelen át is nevezni (dupla kattintás a nevére: „Hero – szövegoszlop”, „Features – kártyasor”), mert egy összetett oldalon az egyforma „Container” feliratok pár hét múlva teljesen használhatatlanok.
Amivel a leggyakrabban bajlódnak
A leggyakoribb panasz, hogy a Container nem tölti ki a szülő szélességét. Ennek szinte mindig az az oka, hogy a width nincs 100%-ra állítva, vagy a szülő Flexbox-beállítása korlátozza a helyet: ellenőrizd a width értékét, és ha egy Flex-szülőben ül, adj neki flex-grow: 1 értéket is.
Ha az elemek mobilon nem rendeződnek egymás alá, az szinte biztosan azt jelenti, hogy a Direction mobil nézetben nincs column-ra állítva. Válts mobilnézetre a szerkesztőben, és a külső Container Direction értékét állítsd át ott, ne a desktopon.
Ha a gap nem jelenik meg az elemek között, nézd meg a szülő display értékét. A gap csak Flexbox vagy Grid szülőn belül működik, display: block esetén egyszerűen nincs hatással semmire, ott margin-nal kell megoldani a térközt.
Ha az egymásba ágyazott Container-ek összekeverednek a struktúrában, az általában a következetlen hierarchia jele, tehát a Section → Container → Block/Div sorrend valahol megbomlott. Nyisd meg a bal oldali struktúrapanelt, nézd át a szinteket, és nevezd át az elemeket beszédes nevekre. Ez a két lépés a legtöbb „nem értem, hol vagyok” típusú problémát megoldja.
Mielőtt élesbe teszed az oldalt, érdemes végigfutni ezeken: helyes-e mindenhol a Direction, vált-e column-ra ott, ahol mobilon kell, gap adja-e a térközt margin helyett, pontosan 100%-ra adódnak-e össze a szélességek, nem maradt-e üres vagy felesleges Container a struktúrában, szemantikailag helyes-e a HTML tag, be van-e állítva középre igazított tartalomnál a max-width és a margin: auto, és következetes-e a hierarchia a struktúrapanel alapján. Ha ebben elakadsz, vagy inkább profira bíznád, kérhetsz ajánlatot is.
Gyakori kérdések (FAQ)
Hány szintű Container egymásba-ágyazás egészséges?
2–3 szint általában elegendő és átlátható. A negyedik szinttől a struktúra nehezen olvasható, és a DOM mélysége már a teljesítményen is meglátszik. Ha több szint kellene, először azt vizsgáld meg, hogy nem vonható-e össze néhány, vagy nem lóg-e a struktúrában egy layout-munkát nem végző, felesleges Container.
Kell-e minden Container-t átnevezni a struktúrapanelen?
Nem kötelező, de nagyon ajánlott. Egy összetett oldalon az egyforma „Container” feliratok követhetetlenek. A bal oldali panelen duplán kattintva az elem nevére átírhatod, például „Hero – szövegoszlop” vagy „Features – kártyasor”. Különösen sokat számít, ha más fejlesztő is dolgozik az oldalon, vagy ha hónapok múlva térsz vissza hozzá.
Váltható-e a Container utólag Flexbox és Grid között?
Igen. A Layout panelen a Display értéknél bármikor válthatsz flex és grid között, a tartalom megmarad. Csak az elrendezési logika változik, ezért a gyerekelemek szélességét és a gap-et újra be kell állítani, mert a két rendszer másképp számolja a helyet.
Hogyan igazítom középre a Container tartalmát?
Flexbox módban:
Vízszintesen: Justify Content → center
Függőlegesen: Align Items → center (csak akkor látszik a hatása, ha a Container-nek van magassága)Grid módban:
Place Items → center (mindkét tengelyen egyszerre)Magát a Container-t pedig max-width plusz margin: 0 auto párossal teszed középre a szülőn belül.
Mi a különbség a Container padding-ja és a belső elemek margin-ja között?
A padding a Container saját belső margója: ez tolja el a tartalmat a Container szélétől. A belső elemek margin-ja az elemek egymástól való távolságát adja. Jó gyakorlat, hogy a gyerekelemek közti térközt gap-pel adod meg (Flexbox vagy Grid szülőn), a margint pedig csak kivételes esetben használod, mert azzal az utolsó elem után is marad felesleges hely.
Vörös László WordPress fejlesztő és Bricks Builder szakértő. Több mint 20 éve webfejlesztőként, 18 éve WordPress fejlesztőként dolgozom. Specialitásom a Bricks Builder, SEO és a biztonságos weboldalak fejlesztése.
