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

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

Author: jrdioko, 2011-02-16

7 answers

Pozycjonowanie statyczne jest domyślnym modelem pozycjonowania elementów. Są one wyświetlane na stronie, gdzie renderowane jako część normalnego przepływu HTML. Statycznie ustawione elementy nie spełniają left, top, right i bottom Zasady:

statycznie rozmieszczone elementy są zgodne z normalnym przepływem HTML.

Pozycjonowanie względne pozwala określić konkretne przesunięcie (left, top etc), która jest względna do normalnej pozycji elementu w HTML flow. Więc jeśli mam pole tekstowe wewnątrz div mogę zastosować względne pozycjonowanie na polu tekstowym aby wyświetlać go w określonym miejscu w stosunku do miejsca, w którym normalnie byłby umieszczony w div:

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

Istnieje również pozycjonowanie bezwzględne - dzięki któremu można określić dokładną lokalizację elementu względem całego dokumentu, lub następnego względnie pozycjonowanego elementu dalej w górę drzewa elementów :

absolutnie pozycjonowane elementy są usuwane z HTML flow i mogą być umieszczane w określonym miejscu w dokumencie...

I gdy position: relative jest stosowane do elementu nadrzędnego w hierarchii:

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

Zauważ jak nasze element bezwzględnie pozycyjny jest związany elementem względnie pozycyjnym.

I na koniec jest stałe. W przeciwieństwie do innych elementów, które nie są widoczne w widoku, element nie może być ustawiony w pozycji pionowej.]}

elementy o stałej pozycji są również usuwane z HTML flow, ale nie są związane przez viewport i nie będą przewijać strony.

Można również zaobserwować zachowanie, że elementy o stałej pozycji nie powodują przewijania, ponieważ nie są uważane za związane przez Widok:

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

Podczas gdy elementy absolutnie pozycjonowane są nadal związane przez viewport i spowoduje przewijanie:

elementy absolutnie pozycjonowane są nadal zależne od granic widoku, chyba że na elemencie nadrzędnym zastosowano przepełnienie.

..chyba, że element nadrzędny użyje overflow: ? do określenia zachowania przewijania (jeśli istnieje).

Przy absolutnym pozycjonowaniu i stałym pozycjonowaniu elementy są wyjmowane z HTML flow.

 133
Author: Matthew Abbott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-16 10:15:43

Możesz zobaczyć prosty przegląd tutaj: W3School

Również, jeśli dobrze pamiętam, deklarując element relatywny, domyślnie pozostanie on w tym samym miejscu, co w przeciwnym razie powinien, ale zyskujesz możliwość absolutnego pozycjonowania elementów wewnątrz niego w stosunku do tego elementu, co uznałem za bardzo przydatne w przeszłości.

 6
Author: Stoffe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-14 12:12:28

Position relative pozwala na użycie top/bottom/left/right do pozycjonowania. Static nie pozwoli Ci na to, jeśli nie użyjesz parametrów marginesu. Jest różnica między Top i margin-top.

Nie musisz używać statycznego, ponieważ jest to domyślne

 5
Author: Undefined,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-16 00:43:49

W odpowiedzi na "Dlaczego CSS nadal implementowałby position: static;" w jednej scenerii, użycie position: relative dla rodzica i position: absolute dla dziecka ogranicza szerokość skalowania dziecka. W poziomym systemie menu, gdzie możesz mieć 'kolumny' linków, użycie 'width: auto' nie działa z relatywnymi rodzicami. W tym przypadku zmiana na' static ' pozwoli na zmianę szerokości w zależności od zawartości wewnątrz.

Spędziłem kilka dobrych godzin zastanawiając się, dlaczego nie mogę dostać mój pojemnik, aby dostosować się do ilości zawartości w nim. Mam nadzieję, że to pomoże!

 3
Author: user3233352,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-14 14:24:09

Pozycja względna jest względna do normalnego przepływu. Względna pozycja tego elementu (z przesunięciem) jest względna względem pozycji, w której element ten byłby normalnie, gdyby nie został przesunięty.

 2
Author: AvadhootKulkarni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-28 10:06:33

Matthew Abbott ma naprawdę dobrą odpowiedź.

Pozycje bezwzględne i względne top, left, right oraz bottom poleceń (offsetów), w których pozycje statyczne nie

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

Pozycje bezwzględne przenoszą przesunięcia z dokumentu lub następnego względnie położonego elementu w górę drzewa DOM.

 2
Author: Connor Leech,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:09:39

Static: statyczny element pozycjonowany jest tym, co otrzymujemy domyślnie (normalne pozycjonowanie obiektów).

Relative: Relative do aktualnej pozycji, ale może być przesunięty. Lub względny element pozycjonowany jest względem siebie.

 0
Author: Arif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-25 16:55:00