🎯 Position: Relative vs Absolute

Ghid complet cu exemple practice și explicații detaliate

↗️ Position: Relative - Explicație Detaliată

Position: relative face ca elementul să fie poziționat relativ la poziția sa normală în flux. Elementul își păstrează spațiul original în layout, dar vizual poate fi mutat folosind top, right, bottom, left.

📌 Exemplul 1: Mutare față de poziția originală

Box Normal 1
Box Relative
top: 30px
left: 40px
Box Normal 2
/* Elementul se mută vizual, dar spațiul său original rămâne rezervat */ .element { position: relative; top: 30px; /* Se mută în jos cu 30px */ left: 40px; /* Se mută la dreapta cu 40px */ }

🎴 Exemplul 2: Control z-index cu Relative

Position: relative permite controlul straturilor (z-index). Hover pe carduri pentru a vedea efectul:

Card 1
z-index: 1
Card 2
z-index: 2
Card 3
z-index: 3
/* z-index funcționează doar cu elemente poziționate (non-static) */ .card { position: relative; z-index: 1; } .card:hover { z-index: 10; /* Vine în față la hover */ }

🏠 Exemplul 3: Container pentru elemente absolute

Cel mai comun uz: position: relative creează un context de poziționare pentru copiii absolute:

Container cu position: relative
Top-Left
Top-Right
Bottom-Left
Bottom-Right
Centrat
/* Părintele relative devine referința pentru copiii absolute */ .container { position: relative; } .child { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); /* Centrare perfectă */ }

🎯 Position: Absolute - Explicație Detaliată

Position: absolute scoate elementul din fluxul normal al documentului. Elementul este poziționat relativ la cel mai apropiat părinte cu position: relative/absolute/fixed/sticky, sau față de <body> dacă nu există.

⚠️ Exemplul 4: Absolute fără părinte pozitionat

Când nu există părinte cu position relative, elementul absolute se poziționează față de viewport:

Acest container NU are position: relative

Sunt poziționat față de demo-container!
/* ATENȚIE: Fără părinte relative, absolute se raportează la body/viewport */ .element { position: absolute; right: 20px; top: 20px; /* Se va poziționa față de primul părinte cu position non-static */ }

💬 Exemplul 5: Tooltip-uri cu Absolute

Perfect pentru elemente care apar deasupra conținutului:

Hover pentru tooltip
Sunt un tooltip cu position absolute!
Alt tooltip
Tooltip cu săgeată CSS!
.tooltip-container { position: relative; } .tooltip-content { position: absolute; bottom: 100%; /* Deasupra elementului */ left: 50%; transform: translateX(-50%); /* Centrare orizontală */ }

🖼️ Exemplul 6: Image Overlay & Badge

Overlay-uri și badge-uri poziționate perfect:

NOU
Click pentru detalii
-50%
Vezi mai mult
.container { position: relative; } .overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; /* Acoperă tot containerul */ } .badge { position: absolute; top: 10px; right: 10px; /* Colț dreapta-sus */ }

📋 Exemplul 7: Dropdown Menu

Meniuri dropdown care apar sub butoane:

.dropdown { position: relative; } .dropdown-menu { position: absolute; top: 100%; /* Imediat sub buton */ left: 0; z-index: 100; /* Deasupra altor elemente */ }

🎭 Exemplul 8: Modal/Popup Centrat

Modal centrat perfect în container:

.modal { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 100; }

📊 Exemplul 9: Progress Steps

Linie de progres cu puncte poziționate:

1

Start

2

În progres

3

Finalizare

⚖️ Comparație: Relative vs Absolute

Caracteristică Position: Relative Position: Absolute
Flux document ✅ Rămâne în flux (își păstrează spațiul) ❌ Iese din flux (nu ocupă spațiu)
Punct de referință 📍 Poziția sa originală 📍 Părinte cu position non-static sau body
Afectează alte elemente ✅ Da, spațiul original rămâne ❌ Nu, este scos din flux
Z-index ✅ Funcționează ✅ Funcționează
Utilizare principală • Ajustări fine de poziție
• Container pentru absolute
• Control z-index
• Tooltips, dropdowns
• Overlay-uri
• Elemente flotante
Width/Height auto Se extinde normal (block/inline) Se micșorează la conținut

🎮 Demo Interactiv Combinat

Experimentează cu ambele tipuri de poziționare:

Container părinte (position: relative)

Relative
Absolute

Controlează elementul Relative:

50px
50px

Controlează elementul Absolute:

100px

💡 Sfaturi Practice și Trucuri

🎯 Când să folosești Relative:

🎯 Când să folosești Absolute:

⚠️ Capcane comune de evitat:

1. Uitarea position: relative pe părinte
Elementele absolute vor "sări" la body dacă părintele nu are position setat.

2. Probleme cu overflow
Elementele absolute pot ieși din container. Folosește overflow: hidden pe părinte dacă e necesar.

3. Responsive design
Pozițiile absolute fixe (px) pot cauza probleme pe mobile. Folosește procente sau unități relative.

4. Z-index wars
Evită z-index: 9999. Creează o scară logică (1-10 pentru componente, 100 pentru modals, etc.)