Junior
Jaka jest różnica między różnymi metodami pozycjonowania elementów w CSS?
sobes.tech AI
Odpowiedź od AI
static- Domyślne położenie. Element jest pozycjonowany zgodnie z normalnym przepływem dokumentu. Właściwościtop,right,bottom,leftnie mają wpływu.relative- Element jest pozycjonowany względem swojej normalnej pozycji w przepływie. Właściwościtop,right,bottom,leftprzesuwają element od jego pierwotnej pozycji, ale zajmowane przez niego miejsce w przepływie jest zachowane.absolute- Element jest całkowicie usuwany z normalnego przepływu dokumentu. Jego pozycja jest określana przez właściwościtop,right,bottom,leftwzględem najbliższego pozycjonowanego przodka (zposition: relative,absolute,fixedlubsticky). Jeśli takich przodków nie ma, pozycja jest określana względem początkowego bloku<html>.fixed- Element jest całkowicie usuwany z normalnego przepływu dokumentu. Jego pozycja jest określana przez właściwościtop,right,bottom,leftwzględem okna widoku (viewport). Element pozostaje na miejscu podczas przewijania strony.sticky- Element jest pozycjonowany jakrelative, dopóki podczas przewijania nie osiągnie ustawionej pozycji (top,right,bottom,left), po czym jego pozycja staje sięfixed.
Tabela różnic:
| Właściwość | static |
relative |
absolute |
fixed |
sticky |
|---|---|---|---|---|---|
| Przepływ dokumentu | Zwykły | Zachowuje | Usuwa się | Usuwa się | Najpierw zwykły, potem usunięty |
Przesunięcie (top itp.) |
Nie | W stosunku do siebie | W stosunku do przodka/viewport | W stosunku do viewport | W stosunku do siebie, potem viewport |
| Przy przewijaniu | Przewija się | Przewija się | Pozostaje na miejscu (jeśli przodek fixed) lub przewija się z przodkiem |
Pozostaje na miejscu | Najpierw przewija się, potem zostaje na miejscu |
Przykład:
.static-box {
position: static; /* Domyślne położenie */
width: 100px;
height: 100px;
background-color: lightblue;
}
.relative-box {
position: relative;
top: 20px; /* Przesunięcie w dół od normalnej pozycji */
left: 20px; /* Przesunięcie w prawo od normalnej pozycji */
width: 100px;
height: 100px;
background-color: lightgreen;
}
.absolute-container {
position: relative; /* Pozycjonowany przodek */
width: 300px;
height: 300px;
border: 1px solid black;
}
.absolute-box {
position: absolute;
top: 50px; /* W stosunku do kontenera */
left: 50px; /* W stosunku do kontenera */
width: 50px;
height: 50px;
background-color: lightcoral;
}
.fixed-box {
position: fixed;
bottom: 10px; /* W stosunku do okna widoku */
right: 10px; /* W stosunku do okna widoku */
width: 70px;
height: 70px;
background-color: lightsalmon;
}
.sticky-header {
position: sticky;
top: 0; /* Przykleja się do górnej krawędzi viewport */
height: 50px;
background-color: lightgoldenrodyellow;
z-index: 10; /* Aby nałożyć się na inne elementy podczas przyklejania */
}