Różnica między pozycjonowaniem statycznym i względnym

89

Jaka jest różnica między pozycjonowaniem statycznym (domyślnym) a pozycjonowaniem względnym w CSS?

jrdioko
źródło
21
Różnica jest taka, że często wpisać position: relative, a ty nigdy wpisać position: static:)
thirtydot

Odpowiedzi:

168

Pozycjonowanie statyczne to domyślny model pozycjonowania elementów. Są wyświetlane na stronie, na której zostały wyrenderowane jako część normalnego przepływu HTML. Statycznie rozmieszczone elementy nie są posłuszni left, top, righti bottomzasady:

Elementy pozycjonowane statycznie są zgodne z normalnym przepływem HTML.

Pozycjonowanie względne pozwala na podanie konkretnego offsetu ( left, topetc), który jest w stosunku do normalnego położenia elementu w przepływie HTML. Więc jeśli mam pole tekstowe wewnątrz, divmogę zastosować względne pozycjonowanie w polu tekstowym, aby było wyświetlane w określonym miejscu w stosunku do miejsca, w którym normalnie byłoby umieszczone w div:

względnie pozycjonowane elementy są zgodne z przepływem HTML, ale zapewniają możliwość dostosowania ich położenia względem normalnego położenia w przepływie HTML.

Istnieje również pozycjonowanie absolutne - w ramach którego określasz dokładną lokalizację elementu względem całego dokumentu lub następnego elementu pozycjonowanego względnie dalej w górę drzewa elementów :

elementy pozycjonowane absolutnie są usuwane z przepływu HTML i można je umieścić w określonym miejscu w dokumencie ...

A kiedy position: relativezostanie zastosowane do elementu nadrzędnego w hierarchii:

... lub umieszczony względem pierwszego elementu nadrzędnego w drzewie HTML, który jest umieszczony względnie.

Zwróć uwagę, jak nasz element pozycji absolutnej jest ograniczony przez element pozycjonowany względnie.

I wreszcie jest naprawiony. Stałe pozycjonowanie ogranicza element do określonej pozycji w rzutni, która pozostaje na miejscu podczas przewijania:

Elementy o stałej pozycji są również usuwane z przepływu HTML, ale nie są związane z widocznym obszarem i nie będą przewijać się wraz ze stroną.

Możesz również zaobserwować zachowanie, w którym elementy o stałej pozycji nie powodują przewijania, ponieważ nie są uważane za ograniczone przez rzutnię:

elementy o stałej pozycji nie mają wpływu na przewijanie.

Podczas gdy elementy pozycjonowane bezwzględnie są nadal ograniczone przez rzutnię i powodują przewijanie:

obwiednie rzutni nadal mają wpływ na elementy pozycjonowane bezwzględnie, chyba że na elemencie nadrzędnym zastosowano przepełnienie.

.. chyba że twój element nadrzędny używa overflow: ?do określenia zachowania przewijania (jeśli istnieje).

Dzięki pozycjonowaniu bezwzględnemu i ustalonemu pozycjonowaniu elementy są usuwane z przepływu HTML.

Matthew Abbott
źródło
4
Dobra odpowiedź, ale (dla pozycji względnej) czy przesunięcie nie jest oparte na normalnej pozycji elementu?
Baztoune
4
Zgadzam się z Baztoune, ta definicja względnie pozycjonowanych elementów jest myląca. A statici relativeelement są takie same, z tym wyjątkiem, że w przypadku tego drugiego można zmienić jego położenie względem jego pierwotnej pozycji , a nie elementu zawierającego - w tym miejscu absolutepojawia się. Podobnie jak każdy element pozycjonowany przy użyciu wartości innej niż ta, staticktórej można użyć z-index.
Ryan Williams
Przerobiłem tę odpowiedź, aby dokładniej zdefiniować względne pozycjonowanie i dołączyłem obrazy, aby zademonstrować różne typy pozycji.
Matthew Abbott,
3
Zastanawiam się, dlaczego CSS nadal miałby implementować position: static;zamiast po prostu zastępować go position: relative;domyślnie? Jeśli ktoś nie chce pozycjonować pozycji innej niż, top: 0;a left: 0;następnie nie róbmy tego, prawda? Czy jest jakiś podstawowy powód, dla którego position: static;nadal jest wymagany jako część CSS?
cram2208
8
@ cram2208, ponieważ względna sprawia, że ​​węzły potomne pozycjonowane bezwzględnie są pozycjonowane względem nich, static pozwala pozycjonowanym absolutnie dzieciom ignorować ich pozycję i być umieszczane względem najbliższego względnego elementu pozycjonowanego. To ważna koncepcja
Felype
7

Tutaj możesz zobaczyć prosty przegląd: W3School

Ponadto, jeśli dobrze pamiętam, kiedy deklaruję element jako względny, domyślnie pozostanie on w tym samym miejscu, w którym powinien, ale zyskujesz możliwość absolutnego pozycjonowania elementów wewnątrz niego względem tego elementu, co uważam za bardzo przydatne w przeszłości.

Stoffe
źródło
29
w3schools ... Nie będę tego odrzucał, ale musisz żyć ze wstydem.
Myles Grey,
4
Tymczasem w 2017 roku W3Schools nie jest tak zły jak kiedyś (nadal nie jest doskonały, ale poważnie potraktował reakcję społeczności i faktycznie się poprawił).
Priidu Neemre
Tymczasem w 2018 roku W3Schools nadal nie są tak złe, jak kiedyś, ale szkoda im, że ich reputacja nawet dzisiaj jest taka, że ​​wspomnienie powyższego pierwszego komentarza do innych programistów wciąż wywołuje klasyczny chichot ... wstecz za moich czasów ... W3School .... pierwsze wrażenia hej ...
redfox05
7

W odpowiedzi na pytanie „dlaczego CSS nadal implementowałoby position: static;” w jednym scenariuszu, użycie pozycji: względna dla rodzica i pozycji: bezwzględnej dla dziecka ogranicza szerokość skalowania dziecka. W poziomym systemie menu, w którym możesz mieć „kolumny” linków, użycie opcji „width: auto” nie działa w przypadku względnych rodziców. W takim przypadku zmiana na „statyczną” pozwoli na zmianę szerokości w zależności od zawartości wewnątrz.

Spędziłem kilka godzin zastanawiając się, dlaczego nie mogę dostosować mojego kontenera do ilości zawartej w nim zawartości. Mam nadzieję że to pomoże!

user3233352
źródło
To jest odpowiedź! Każdy mówi zawodowcom tylko o względnym pozycjonowaniu, pomijając sedno takiego pytania: jaka jest różnica.
Bartis Áron
5

Pozycja względna umożliwia ustawienie pozycji góra / dół / lewo / prawo. Static nie pozwoli ci tego zrobić, chyba że użyjesz parametrów marginesu. Istnieje różnica między górą a górą marginesu.

Nie będziesz musiał używać statycznego, ponieważ jest to ustawienie domyślne

frontsideup
źródło
2

Względne położenie odnosi się do normalnego przepływu. Względne położenie tego elementu (z przesunięciami) odnosi się do położenia, w którym element byłby normalnie, gdyby nie został przesunięty.

AvadhootKulkarni
źródło
2

Matthew Abbott ma naprawdę dobrą odpowiedź.

Bezwzględne i względne umieszczone elementy posłuszeństwa top, left, rightibottom polecenia (offsetu), gdzie statyczne ustawione pozycje nie.

Względnie pozycjonowane elementy przesuwają przesunięcia z miejsca, w którym normalnie znajdowałyby się w html.

Elementy pozycjonowane bezwzględnie przenoszą przesunięcia z dokumentu lub następnego względnie pozycjonowanego elementu w górę drzewa DOM.

Connor Leech
źródło
0

Statyczny: STATIC pozycjonowany element jest tym, co otrzymujemy przez DEFAULT (Normalne pozycjonowanie obiektów).

Względny: Względem aktualnej pozycji, ale można go przenieść. Lub WZGLĘDNIE pozycjonowany element jest umieszczony względem SIEBIE.

Arif
źródło
0

statyczne i względne to atrybuty pozycji. relatywne są używane do wielu zastosowań. Nie dla jednego. Pamiętaj jednak, że statyczne i względne nie szkodzą normalnemu przepływowi dokumentów HTML. static to domyślna pozycja, w której piszesz dowolny element w formacie HTML. Jeśli element ma położenie względne, można go ustawić względem swojego miejsca natywnego. jeśli chcesz dopasować element z małych przestrzeni, użyj pozycji względnej, aby nie trzeba było dodawać marginesu, dopełnienia itp., jeśli element ma pozycję względną i ma element podrzędny. Tutaj możemy wykonać pomiary względem jego rodzica. Jeśli dodasz szerokość 10% do dziecka, oznacza to (szerokość + dopełnienie) x10%. Ale nie dodasz względnego słowa kluczowego, otrzymasz szerokość x 10%. Poza tym najważniejszym zastosowaniem krewnego jest; możesz umieścić dowolny element na górze.

Lakruwan Pathirage
źródło