Pozycja statyczna, relatywna, absolutna oraz ustalona
- Data publikacji
- Ostatnio edytowano
W tej części kursu CSS poznamy w jaki sposób sprawić, aby element HTML przestał być elementem statycznym, a stał się elementem wyświetlonym w pozycji relatywnej, absolutnej lub ustalonej. Inaczej mówiąc poznamy do czego służy właściwość position.
W realnym świecie, gdy układamy jedną kartkę papieru na drugiej kartce papieru, gdy powtarzamy tą czynność z kilkoma kartkami papieru, to tworzymy stos z kartek papieru ułożonych na sobie nawzajem.
W świecie wirtualnym, gdy umieszczamy jeden element HTML w drugim, gdy powtarzamy tą czynność z kilkoma elementami HTML, to tworzy się coś, co moglibyśmy nazwać "stosem elementów HTML".
Przyjrzyjmy się następującemu dokumentowi HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Darmowy Kurs CSS</title>
<style>
html {
text-align:center;
padding:30px;
border:2px dashed black;
}
div {
line-height:60px;
background-color:white;
}
#rodzic {
padding:30px;
border:2px dashed red;
}
#dziecko1 {
border:1px dashed blue;
margin-bottom:15px;
}
#dziecko2 {
border:1px dashed blue;
}
</style>
</head>
<body>
<div id="rodzic">
<div id="dziecko1">to jest pierwszy element - div</div>
<div id="dziecko2">to jest drugi przykładowy element - div</div>
</div>
</body>
</html>
A o to rezultat jaki ujrzymy:
W przykładzie zaprezentowanym powyżej, do elementu body
został dodany element div
, do którego z kolei zostały dodane kolejne dwa elementy div
. Do niektórych elementów zostały dodane marginesy wewnętrzne padding
oraz różne obramowanie border
. Do wszystkich elementów div
został dodany biały kolor tła background-color:white;
oraz wartość wysokości wierszy line-height:60px;
a do elementu div#dziecko1
dodatkowo został dodany dolny margines zewnętrzny margin-bottom:15px;
dzięki czemu element div#dziecko2
został odsunięty o 15 pikseli od elementu div#dziecko1
.
Gdy przyjrzymy się naszym elementom HTML nieco bardziej, to możemy stwierdzić, że elementy HTML umieszczone jeden w drugim, tworzą stos, czyli po wyświetleniu w oknie przeglądarki internetowej są ułożone jeden na drugim.
Jeżeli nadal tego nie zauważasz, to spójrz jak będą wyglądać nasze elementy HTML, gdy dodamy do nich pomocniczy cień:
W naszym układzie elementów HTML, obramowanie koloru czarnego określa granice elementu html
, czyli granice przestrzeni w jakiej ten element został wyświetlony, w oknie przeglądarki internetowej. Obramowanie koloru czerwonego określa granice elementu #rodzic
, natomiast obramowanie koloru niebieskiego określa granice elementu #dziecko1
oraz elementu #dziecko2
.
Domyślnie, elementy HTML są wyświetlone w pozycji statycznej, co oznacza, że nie możemy zmienić ich pozycji początkowej. Aby zmienić pozycję początkową elementu HTML, wykorzystuje się do tego celu następujące właściwości CSS:
top
- odsunięcie od góryright
- odsunięcie od prawejbottom
- odsunięcie od dołuleft
- odsunięcie od lewej
Jednak aby wyżej wymienione właściwości CSS mogły przesunąć dany element HTML, nie może on być wyświetlony w domyślnej pozycji statycznej.
Do zmiany pozycji, w jakiej ma być wyświetlony element HTML, wykorzystuje się właściwość position
oraz jedną z następujących wartości:
relative
- pozycja relatywnaabsolute
- pozycja absolutnafixed
- pozycja ustalona
Na początek zajmiemy się pozycją relatywną.
Spójrzmy co się stanie z naszym układem elementów HTML, gdy do elementu #rodzic
zostanie dodana właściwość position:relative;
oraz właściwość right:100px;
#rodzic {
border:2px dashed red;
position:relative;
right:100px;
}
Rezultat:
Do elementu #rodzic
została dodana właściwość position:relative;
dzięki czemu ten element HTML stał się elementem wyświetlonym w pozycji relatywnej. Pozycję takiego elementu relatywnego możemy kontrolować za pomocą właściwości top
, right
, bottom
, left
, co zostało już wcześniej wspomniane. W naszym przypadku element #rodzic
(oraz jego cała zawartość) został odsunięty od prawej strony o 100 pikseli, ponieważ do wspomnianego elementu została dodana właściwość right:100px;
W ten sam sposób możemy odsunąć każdy inny element HTML, który jest wyświetlony w pozycji innej niż domyślna pozycja statyczna. Spójrzmy na następujący przykład:
Tym razem do elementu #dziecko1
została dodana właściwość position:relative;
top:-50px;
oraz left:40px;
dzięki czemu wspomniany element HTML został przysunięty do góry o 50 pikseli (minusowe wartości przysuwają, dodatnie wartości odsuwają) oraz został odsunięty od lewej strony o 40 pikseli.
Gdy element HTML będzie wyświetlony w pozycji innej niż statyczna, czyli w pozycji relative
, absolute
lub fixed
, to nie będzie on wpływał, po przesunięciu go, na położenie sąsiednich elementów HTML, tzn. nie będzie on odsuwał ich od siebie.
Jeżeli chodzi o nasz ostatni przykład i o element HTML wyświetlony w pozycji relatywnej, czyli w pozycji relative
, to mimo tego, że został on odsunięty od swojej pozycji początkowej, to element występujący pod nim, czyli drugi element div
, pozostał na swoim miejscu, ponieważ po elemencie wyświetlonym w pozycji relatywnej pozostaje pusta przestrzeń takich samych rozmiarów jaką zajmowałby dany element HTML wyświetlony w domyślnej pozycji statycznej.
Dla ułatwienia zrozumienia zależności, która została opisana w ostatnim akapicie, poniżej został zaprezentowany ten sam przykład, lecz z zaznaczoną pozycją początkową elementu #dziecko1
.
Wspomniana zależność nie występuje w momencie gdy zmienimy pozycję elementu HTML na pozycję absolutną lub ustaloną.
Spójrzmy co się stanie z naszym przykładowym elementem #dziecko1
, gdy dodamy do niego właściwość position:absolute;
#dziecko1 {
border:1px dashed blue;
margin-bottom:15px;
position:absolute;
}
Rezultat:
Domyślnie, element HTML, do którego zostanie dodana właściwość position:absolute;
nie pozostawia po sobie żadnej dodatkowej przestrzeni, dzięki czemu elementy, które go otaczały, nie reagują w żaden sposób na niego oraz na jego pozycję początkową.
Domyślnie, element wyświetlony z pozycji absolutnej będzie znajdował się w miejscu swojej pozycji początkowej, chyba że zmienimy to za pomocą właściwości CSS, które służą do ustalenia pozycji takiego elementu HTML, czyli za pomocą właściwości top
, right
, bottom
lub left
.
Domyślnie, pozycja elementu absolutnego będzie liczona względem krawędzi okna naszej przeglądarki internetowej. Możemy zauważyć tą zależność, gdy dodamy do naszego przykładowego elementu #dziecko1
następujące właściwości CSS:
#dziecko1 {
border:1px dashed blue;
margin-bottom:15px;
position:absolute;
top:0;
left:0;
}
Rezultat:
Jak widzimy w przykładzie zaprezentowanym powyżej, pierwszy element div
został przesunięty do lewej krawędzi okna przeglądarki internetowej, ponieważ do wspomnianego elementu div
została dodana właściwość left:0;
. Nasz element div
został również przesunięty do górnej krawędzi okna przeglądarki internetowej, ponieważ do wspomnianego elementu div
została dodana właściwość top:0;
Jeżeli dodamy do naszego przykładowego elementu div
, który jest wyświetlony w pozycji absolutnej, marginesy zewnętrzne, np. margin:15px;
to wspomniany element div
zostanie odsunięty od krawędzi okna przeglądarki internetowej o wartość tych marginesów zewnętrznych, czyli o wartość równą 15 pikseli.
Przykład:
Domyślnie, szerokość elementu pozycjonowanego absolutnie, czyli takiego elementu HTML, do którego została dodana właściwość position:absolute;
jest uzależniona od zawartości jaka w tym elemencie zostanie umieszczona.
Jeżeli chcemy, aby szerokość elementu pozycjonowanego absolutnie zajmowała całą szerokość okna naszej przeglądarki internetowej, to do takiego elementu pozycjonowanego absolutnie należy dodać właściwość width:100%;
natomiast sam element pozycjonowany absolutnie musi być ustawiony w lewym górnym rogu okna przeglądarki oraz nie może posiadać w sobie takich właściwości CSS jak: margin
, padding
, border
, po swojej prawej lub lewej stronie.
#dziecko1 {
position:absolute;
width:100%;
top:0;
left:0;
}
Rezultat:
Jeżeli chcielibyśmy, aby nasz przykładowy element div
, pozycjonowany absolutnie, zajmował całą wysokość naszego okna przeglądarki internetowej, to do wspomnianego elementu div
należy dodać właściwość height:100%;
Aby efekt był widoczny, nasz przykładowy element div
nie może posiadać w sobie takich właściwości CSS jak: margin
, padding
, border
, po swojej górnej lub dolnej stronie.
Rezultat:
Jeżeli nie chcemy, aby nasz przykładowy element div
, pozycjonowany absolutnie, zajmował całej szerokości okna naszej przeglądarki internetowej, a mimo to był wyśrodkowany, to należy ustalić, dla wspomnianego elementu div
, jakąś wartość właściwości width
, która odpowiada za szerokość elementu HTML.
Wartość ta powinna być wyrażona w procentach, np. width:60%;
dzięki czemu będziemy wiedzieli ile %
brakuje do wartości 100%
, czyli 100% - 60% = 40%. Dzieląc wartość 40%
na 2, otrzymamy wartość jaką należy użyć wraz z właściwością left
, dzięki czemu nasz omawiany element HTML pozycjonowany absolutnie, zostanie wyśrodkowany w oknie naszej przeglądarki internetowej, jak ten element, który został zaprezentowany w przykładzie umieszczonym poniżej:
Element div#dziecko1
został ustawiony na środku, ponieważ został on odsunięty od lewej krawędzi okna przeglądarki internetowej o wartość 20%
, natomiast jego szerokość wynosi 60%
, czyli przestrzeń jaka zostaje po prawej stronie, wspomnianego elementu div#dziecko1
, wynosi 20%
. Wszystkie wartości w sumie dają 100%
.
Inny ciekawy efekt uzyskamy, gdy do naszego przykładowego elementu div
, pozycjonowanego absolutnie, dodamy następujące właściwości CSS:
#dziecko1 {
border:1px dashed blue;
position:absolute;
top:20px;
right:20px;
bottom:20px;
left:20px;
}
Rezultat:
Tym razem nasz przykładowy element div
, pozycjonowany absolutnie, został rozciągnięty do każdej krawędzi okna przeglądarki internetowej. Przestrzeń, jaka pozostała między krawędziami przeglądarki internetowej, a wspomnianym elementem div
, wynosi 20px
, po każdej stronie.
Do tej pory pozycja naszego przykładowego elementu div
, pozycjonowanego absolutnie, była liczona względem krawędzi okna przeglądarki internetowej, jednak tą zależność możemy zmienić. Aby to uczynić, musimy dodać właściwość position:relative;
lub position:absolute;
lub position:fixed;
do któregoś z przodków wspomnianego elementu div
, dzięki czemu pozycja naszego przykładowego elementu div
, pozycjonowanego absolutnie, będzie liczona względem pierwszego elementu przodka pozycjonowanego relatywnie lub pozycjonowanego absolutnie lub wyświetlonego w pozycji ustalonej, czyli tego, który będzie posiadał w sobie właściwość position:relative;
lub position:absolute;
lub position:fixed;
a nie względem krawędzi okna przeglądarki internetowej.
#rodzic {
border:2px dashed red;
position:relative;
}
#dziecko1 {
border:1px dashed blue;
position:absolute;
bottom:0;
right:0;
}
Rezultat:
W przykładzie przedstawionym powyżej, element #dziecko1
, który jest pozycjonowany absolutnie, został przesunięty do prawej oraz dolnej krawędzi elementu #rodzic
, a nie do prawej oraz dolnej krawędzi okna przeglądarki internetowej, ponieważ do wspomnianego elementu #rodzic
została dodana właściwość position:relative;
Do omówienia została nam ostatnia możliwa pozycja, w jakiej może być wyświetlony element HTML, za pomocą właściwości position
. Tą pozycją jest pozycja ustalona, czyli position:fixed;
Element wyświetlony w pozycji fixed
zachowuje się podobnie jak element HTML, który jest wyświetlony w pozycji absolute
, lecz jego pozycja zawsze jest liczona względem okna przeglądarki internetowej, a sam element wyświetlony w pozycji fixed
zawsze znajduje się w tym samym miejscu, w oknie naszej przeglądarki internetowej, nawet jeżeli będziemy przesuwać nasze okno przeglądarki internetowej, np. za pomocą poziomego lub pionowego suwaka. Ponadto w "normalnych" okolicznościach, gdy umieścimy jakiś element HTML poza prawą krawędzią lub dolną krawędzią okna naszej przeglądarki internetowej, np. za pomocą właściwości top
, right
, bottom
, left
oraz wartości ujemnych, np. -30px
, to do okna naszej przeglądarki internetowej zostaną dodane poziome bądź pionowe suwaki, które służą do przewijania niemieszczącej się zawartości, która pojawiła się w oknie przeglądarki internetowej, lecz opisana sytuacja nie będzie miała miejsca, gdy elementem, który został umieszczony poza granicami okna przeglądarki internetowej, jest element wyświetlony w pozycji fixed
.
Przykład elementu wyświetlonego w pozycji fixed
możemy zobaczyć tutaj (w lewym górnym rogu okna Twojej przeglądarki internetowej).
W tej części kursu CSS zostały zaprezentowane elementy HTML, które były wyświetlane w różnych dostępnych pozycjach. Wspomniane elementy HTML posiadają między sobą wiele różnych zależności, które mogą wydać się skomplikowane (przynajmniej na samym początku nauki języka CSS), dlatego w wielu miejscach działu czwartego będą Ci one pokrótce przypominane.
W następnej części kursu CSS poznamy sposób na zmianę kolejności, w jakiej są widziane przez nas elementy wyświetlane w pozycji relative
, absolute
lub fixed
.