13. Div elem és Box model
Ebben a leckében megismerkedsz a <div> blokk szintű konténer elemmel és a CSS box modellel (dobozmodell). A div elem a weboldal struktúrájának kialakításához elengedhetetlen, míg a box model az elemek méretezését és térközét szabályozza.
Érettségi információ
Ez a lecke EMELT SZINTŰ érettségi anyag!
Ebből a leckéből érettségi anyag:
- A
<div>elem használata, szakaszok/csoportok kialakítása - A dobozmodell alapjai (content, padding, border, margin)
- Szegélyek beállítása (
border) - Térközök (
margin,padding) - Méretek (
width,height)
Bónusz anyag (nem kötelező): box-shadow, outline részletesen.
A <div> elem - Blokk szintű konténer EMELT SZINT
A <div> (division = osztály, részleg) egy általános blokk szintű konténer, amely önmagában nem hordoz szemantikus jelentést. Elsősorban csoportosításra és stílusozásra használjuk.
<!-- Egyszerű div konténer -->
<div>
<h2>Cím</h2>
<p>Tartalom szöveg...</p>
</div>
<!-- Div class-szal (CSS stílusozáshoz) -->
<div class="termek-kartya">
<img src="cpu.jpg" alt="Processzor">
<h3>Intel Core i9-14900K</h3>
<p>249 990 Ft</p>
<button>Kosárba</button>
</div>
<!-- Div id-val (egyedi azonosító) -->
<div id="header-wrapper">
<!-- Tartalom -->
</div>Div elem jellemzői
| Tulajdonság | Érték | Magyarázat |
|---|---|---|
| Blokk elem | display: block |
Új sorban kezdődik, teljes szélesség (div, p, h1) |
| Inline elem | display: inline |
Szövegfolyamban marad, méret nem állítható (span, a) |
| Inline-blokk | display: inline-block |
Szövegfolyamban, de szélesség/magasság állítható |
| Elrejtés | display: none |
Elem elrejtése, helyet sem foglal |
| Szemantika | Nincs | Nem hordoz jelentést, csak csoportosít |
| Tartalmazhat | Bármit | Blokk és inline elemeket egyaránt |
Szemléltető ábra - Display típusok:
1. Block elemek (div, p, h1) - Új sorban, teljes szélesség:
2. Inline elemek (span, a, strong) - Sorban maradnak, méret NEM állítható:
3. Inline-block elemek - Sorban maradnak, DE méret állítható:
Mikor használj div elemet?
- ✅ Layout wrapper: Oldalrészek csoportosítása (pl. container, wrapper)
- ✅ Stílusozási cél: CSS osztály vagy JavaScript célpont
- ✅ Box model alkalmazása: Méret, térköz, szegély beállítása
- ❌ NE használd: Ha van rá megfelelő szemantikus elem (header, section, article)
A dobozmodell felépítése EMELT SZINT
Minden HTML elem egy doboz, amely négy fő részből áll (belülről kifelé):
A CSS Box Model vizualizációja:
| Réteg | Angol név | Leírás |
|---|---|---|
| Tartalom | Content | A tényleges tartalom (szöveg, kép) |
| Belső térköz | Padding | Tartalom és szegély közötti tér |
| Szegély | Border | A doboz kerete/vonala |
| Külső térköz | Margin | Doboz és más elemek közötti tér |
Width és height - Szélesség és magasság EMELT SZINT
A width és height tulajdonságok a tartalom méretét határozzák meg (alapértelmezetten).
/* Fix méret */
.doboz {
width: 300px;
height: 200px;
}
/* Százalékos méret (szülő elemhez képest) */
.responsive {
width: 50%; /* Szülő szélességének 50%-a */
height: auto; /* Automatikus magasság */
}
/* Viewport egységek */
.fullscreen {
width: 100vw; /* Viewport szélesség */
height: 100vh; /* Viewport magasság */
}
/* Minimum és maximum méret */
.flexible {
width: 100%;
min-width: 200px; /* Nem lehet kisebb */
max-width: 800px; /* Nem lehet nagyobb */
height: auto;
min-height: 100px;
max-height: 500px;
}
/* Auto érték */
.auto {
width: auto; /* Tartalom vagy szülő alapján */
height: auto; /* Tartalom alapján */
}
/* Tartalom alapján (fit-content) */
.fit {
width: fit-content; /* Tartalomhoz igazodik */
}Fontos tudnivalók a méretezésről
- Block elemek: Alapból 100% szélesek (szülő szélességét töltik ki)
- Inline elemek: Nem lehet width/height-ot beállítani
- Inline-block elemek: Sorban maradnak, de width/height beállítható
- Százalék: A szülő elem méretéhez képest számít
- height: 100%: Csak akkor működik, ha a szülőnek van megadott magassága
Padding - Belső térköz EMELT SZINT
A padding a tartalom és a szegély közötti teret határozza meg. A padding területe felveszi az elem háttérszínét.
/* Egyedi oldalak */
.doboz {
padding-top: 10px;
padding-right: 20px;
padding-bottom: 10px;
padding-left: 20px;
}
/* Rövidített formák */
/* 1 érték: minden oldalon ugyanannyi */
.p1 { padding: 20px; }
/* 2 érték: függőleges | vízszintes */
.p2 { padding: 10px 20px; }
/* = padding: 10px 20px 10px 20px; */
/* 3 érték: felső | vízszintes | alsó */
.p3 { padding: 10px 20px 30px; }
/* = padding: 10px 20px 30px 20px; */
/* 4 érték: felső | jobb | alsó | bal (óramutató járása) */
.p4 { padding: 10px 20px 30px 40px; }
/* Gyakori minták */
.card {
padding: 20px; /* Egyenletes belső tér */
}
.button {
padding: 12px 24px; /* Gomb: kevesebb függőleges, több vízszintes */
}
.section {
padding: 60px 20px; /* Nagy függőleges, kis vízszintes */
}
/* Százalékos padding (szülő SZÉLESSÉGÉHEZ képest!) */
.responsive-padding {
padding: 5%; /* Figyelem: a magasság is a szélességhez képest! */
}Élő példa - Padding:
Margin - Külső térköz EMELT SZINT
A margin az elem és a szomszédos elemek közötti távolságot határozza meg. A margin területe átlátszó.
/* Egyedi oldalak */
.doboz {
margin-top: 10px;
margin-right: 20px;
margin-bottom: 10px;
margin-left: 20px;
}
/* Rövidített formák (ugyanaz mint padding) */
.m1 { margin: 20px; } /* Minden oldalon */
.m2 { margin: 10px 20px; } /* Függőleges | Vízszintes */
.m3 { margin: 10px 20px 30px; } /* Felső | Vízszintes | Alsó */
.m4 { margin: 10px 20px 30px 40px; } /* Felső | Jobb | Alsó | Bal */
/* Auto érték - Vízszintes középre igazítás */
.centered {
width: 800px;
margin: 0 auto; /* Függőlegesen 0, vízszintesen auto = középre */
}
/* Negatív margin (elem eltolása) */
.overlap {
margin-top: -20px; /* Felső elemre rácsúszik */
margin-left: -10px; /* Balra túlnyúlik */
}
/* Margin összeomlás (collapse) figyelembevétele */
.section {
margin-bottom: 40px;
}
.next-section {
margin-top: 30px;
/* A tényleges távolság 40px lesz, nem 70px! */
}Margin collapse (margin összeomlás) BÓNUSZ
- Mi ez? Függőleges margók összeolvadnak, a nagyobb érvényesül
- Mikor történik? Szomszédos block elemek között, szülő-gyerek között
- Megoldás: Padding használata, vagy
overflow: autoa szülőn - Nem történik: Vízszintes margóknál, flex/grid elemeknél
/* Margin collapse probléma */
.parent {
background: #f0f0f0;
/* A gyerek margin-ja "kifolyik" */
}
.child {
margin-top: 20px;
/* Ez a szülő fölé kerül, nem belül marad! */
}
/* Megoldások */
/* 1. Padding a szülőn */
.parent-fix1 {
padding-top: 1px; /* Már nem folyik ki */
}
/* 2. Border a szülőn */
.parent-fix2 {
border-top: 1px solid transparent;
}
/* 3. Overflow */
.parent-fix3 {
overflow: auto; /* Vagy hidden */
}
/* 4. Display: flow-root (modern) */
.parent-fix4 {
display: flow-root;
}Border - Szegély EMELT SZINT
A border a doboz keretét/szegélyét határozza meg. Három fő tulajdonsága van: stílus, vastagság és szín.
/* Egyedi tulajdonságok */
.doboz {
border-width: 2px;
border-style: solid;
border-color: #333;
}
/* Rövidített forma */
.doboz {
border: 2px solid #333; /* vastagság stílus szín */
}
/* Border stílusok */
.solid { border: 2px solid #333; } /* Folytonos */
.dashed { border: 2px dashed #333; } /* Szaggatott */
.dotted { border: 2px dotted #333; } /* Pontozott */
.double { border: 4px double #333; } /* Dupla */
.groove { border: 4px groove #333; } /* Bevésett */
.ridge { border: 4px ridge #333; } /* Kidomborodó */
.inset { border: 4px inset #333; } /* Bemélyedő */
.outset { border: 4px outset #333; } /* Kiemelkedő */
.none { border: none; } /* Nincs */
/* Egyedi oldalak */
.custom {
border-top: 3px solid #007bff;
border-right: 1px solid #ccc;
border-bottom: 3px solid #007bff;
border-left: 1px solid #ccc;
}
/* Csak egy oldal */
.underline {
border: none;
border-bottom: 2px solid #333;
}
/* Border eltávolítása */
input {
border: none;
/* vagy */
border: 0;
}Élő példa - Border stílusok:
border-radius - Lekerekített sarkok
/* Egyenletes lekerekítés */
.rounded { border-radius: 8px; }
.more-rounded { border-radius: 20px; }
.pill { border-radius: 50px; } /* Kapszula forma */
.circle { border-radius: 50%; } /* Kör (négyzet elemből) */
/* Egyedi sarkok */
.custom {
border-top-left-radius: 20px;
border-top-right-radius: 10px;
border-bottom-right-radius: 20px;
border-bottom-left-radius: 10px;
}
/* Rövidített forma (4 érték) */
.shorthand {
border-radius: 20px 10px 20px 10px; /* Bal-felső, jobb-felső, jobb-alsó, bal-alsó */
}
/* 2 érték */
.two-values {
border-radius: 20px 10px; /* Bal-felső & jobb-alsó | Jobb-felső & bal-alsó */
}
/* Elliptikus lekerekítés */
.elliptic {
border-radius: 50px / 25px; /* Vízszintes / függőleges sugár */
}
/* Gyakorlati példák */
.button {
border-radius: 4px; /* Enyhe lekerekítés */
}
.card {
border-radius: 12px; /* Modern kártya */
}
.avatar {
border-radius: 50%; /* Kör alakú profilkép */
width: 100px;
height: 100px;
}Élő példa - border-radius:
Box-sizing - Méretezési modell EMELT SZINT
A box-sizing tulajdonság meghatározza, hogy a width és height mire vonatkozzon.
/* content-box (alapértelmezett) */
.content-box {
box-sizing: content-box;
width: 200px;
padding: 20px;
border: 5px solid #333;
/* Teljes szélesség: 200 + 20*2 + 5*2 = 250px */
}
/* border-box (ajánlott) */
.border-box {
box-sizing: border-box;
width: 200px;
padding: 20px;
border: 5px solid #333;
/* Teljes szélesség: 200px (padding és border beleszámít) */
}
/* Globális beállítás (AJÁNLOTT minden projektben) */
*, *::before, *::after {
box-sizing: border-box;
}
/* Vagy öröklődéssel */
html {
box-sizing: border-box;
}
*, *::before, *::after {
box-sizing: inherit;
}Élő példa - content-box vs border-box:
Mindkettő: width: 200px, padding: 20px, border: 5px
content-box (250px teljes)
border-box (200px teljes)
Miért használj border-box-ot?
- Intuitívabb: A megadott width a teljes doboz szélessége
- Könnyebb számítás: Nem kell fejben összeadni padding + border
- Reszponzív design: width: 50% tényleg 50% lesz
- Ipari szabvány: Szinte minden CSS framework használja
Box-shadow - Dobozárnyék BÓNUSZ
A box-shadow tulajdonsággal árnyékokat adhatsz az elemekhez, ami mélységet és kiemelést ad a designnak.
/* box-shadow: x-offset y-offset blur spread color; */
/* Alapvető árnyék */
.shadow1 {
box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2);
}
/* Nagyobb árnyék (kiemelkedő elem) */
.shadow2 {
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15);
}
/* Spread - árnyék mérete */
.shadow3 {
box-shadow: 0 0 0 5px #007bff; /* Keret effekt */
}
/* Belső árnyék (inset) */
.inner-shadow {
box-shadow: inset 0 2px 5px rgba(0, 0, 0, 0.2);
}
/* Több árnyék */
.multi-shadow {
box-shadow:
0 2px 5px rgba(0, 0, 0, 0.1),
0 10px 30px rgba(0, 0, 0, 0.15);
}
/* Gyakorlati példák */
/* Finom kártya árnyék */
.card {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
/* Hover árnyék növelése */
.card:hover {
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
transform: translateY(-2px);
transition: all 0.3s ease;
}
/* Gomb árnyék */
.button {
box-shadow: 0 4px 6px rgba(0, 123, 255, 0.3);
}
.button:active {
box-shadow: 0 2px 3px rgba(0, 123, 255, 0.3);
transform: translateY(1px);
}
/* Neon glow effekt */
.neon {
box-shadow:
0 0 5px #fff,
0 0 10px #fff,
0 0 20px #ff5500,
0 0 40px #ff5500;
}Élő példa - box-shadow:
Outline - Körvonal BÓNUSZ
Az outline hasonló a border-hez, de nem foglal helyet és nem befolyásolja a layout-ot.
/* Alap outline */
.outline {
outline: 2px solid #007bff;
}
/* Outline eltávolítása (FIGYELEM: akadálymentesség!) */
button:focus {
outline: none; /* ❌ Rossz gyakorlat */
}
/* Helyette: látható focus jelzés */
button:focus {
outline: 2px solid #007bff;
outline-offset: 2px;
}
/* Vagy custom focus ring */
button:focus-visible {
outline: none;
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.5);
}
/* Outline offset (távolság az elemtől) */
.offset {
outline: 2px solid #007bff;
outline-offset: 4px;
}
/* Border vs Outline különbség */
.border-example {
border: 3px solid red; /* Helyet foglal, növeli a méretet */
}
.outline-example {
outline: 3px solid blue; /* Nem foglal helyet, "lebeg" */
}Outline és akadálymentesség
- Ne távolítsd el az outline-t fókusz jelzőként való használata kritikus
- Billentyűzet navigáció: A felhasználók látják, hol van a fókusz
- Ha eltávolítod: Adj helyette látható alternatívát (box-shadow, border)
- :focus-visible: Csak billentyűzetes navigációnál mutatja
Gyakorlati példa: Termékkártyák
<!-- HTML -->
<div class="product-grid">
<div class="product-card">
<div class="product-image">CPU</div>
<div class="product-content">
<h3 class="product-title">Intel Core i9-14900K</h3>
<p class="product-desc">24 mag, 5.8 GHz max turbo</p>
<div class="product-price">249 990 Ft</div>
</div>
</div><div class="product-card">
<div class="product-image">GPU</div>
<div class="product-content">
<h3 class="product-title">GeForce RTX 4080</h3>
<p class="product-desc">16 GB GDDR6X, ray tracing</p>
<div class="product-price">449 990 Ft</div>
</div>
</div><div class="product-card">
<div class="product-image">RAM</div>
<div class="product-content">
<h3 class="product-title">Kingston Fury 32GB</h3>
<p class="product-desc">DDR5-6000, CL36, RGB</p>
<div class="product-price">42 990 Ft</div>
</div>
</div>
</div>
<!-- CSS -->
<style>
/* Globális box-sizing */
*, *::before, *::after {
box-sizing: border-box;
}
/* Konténer */
.product-grid {
width: 100%;
}
/* 3 oszlopos elrendezés inline-block-kal */
/* Számítás: 30% × 3 = 90%, margin 5% × 2 = 10%, összesen 100% */
.product-card {
display: inline-block;
width: 30%;
margin-right: 5%;
vertical-align: top;
/* Háttér és border */
background: white;
border: 1px solid #e0e0e0;
border-radius: 12px;
/* Árnyék */
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
/* Túlcsordulás (lekerekített képhez) */
overflow: hidden;
}
/* Utolsó kártya margin nélkül */
.product-card:last-child {
margin-right: 0;
}
.product-image {
width: 100%;
height: 100px;
background: #007bff;
color: white;
text-align: center;
line-height: 100px;
font-weight: bold;
}
.product-content {
padding: 15px;
}
.product-title {
margin: 0 0 8px 0;
font-size: 1rem;
}
.product-desc {
margin: 0 0 12px 0;
color: #666;
font-size: 0.85rem;
}
.product-price {
font-size: 1.2rem;
font-weight: bold;
color: #007bff;
}
</style>Élő példa - 3 termékkártya egymás mellett:
A display: inline-block és width: 30% segítségével 3 kártya jelenik meg egymás mellett (30% × 3 + 5% × 2 = 100%).
Összefoglalás
Ebben a cikkben megismerkedtél a CSS box modellel:
- Box model rétegek: content → padding → border → margin
- Méretezés: width, height, min/max értékek
- Padding: Belső térköz (háttérszínnel)
- Margin: Külső térköz (átlátszó, összeomlás!)
- Border: Szegély stílus, vastagság, szín, border-radius
- Box-sizing: border-box (ajánlott) vs content-box
- Box-shadow: Árnyékok és effektek
- Outline: Körvonal (fókusz jelzéshez)
Példák a weboldalunkon
Nézd meg, hogyan használjuk a box modellt:
- Főoldal - Termékkártyák padding és border-radius
- Processzor oldal - Specifikációs dobozok margin és padding
- Kapcsolat - Űrlap elemek box-shadow és focus stílusok
Következő lépések
Gyakorold a box modellt: készíts kártyákat különböző padding, margin és árnyék értékekkel. Használd a böngésző DevTools-t a vizualizációhoz!
Következő cikk: Pozicionálás - Ismerd meg a display, position, z-index és overflow tulajdonságokat!