position에 대해서 알아보자
element에 position을 지정하지 않았을 때 기본으로 적용되는 값이 static이다.
static의 경우 top, right, bottom, left, z-index속성들의 효과가 안먹는다.
relative값을 지정하면 static에서 못쓰던 top, right, bottom, left, z-index를 쓸 수 있다.
relative를 지정한 요소는 원래 요소가 위치한 곳을 기준으로 움직인다.
<style>
div {
position:relative;
top: 100px;
}
</style>
<div>hello</hello>
relative가 적용된 요소는 다른 요소에게 영향을 미치지 않는다.
가장 중요한 것은 원래 위치한곳을 기준으로 움직인다는 것
absolute는 relative와 다르게 원래 위치한 곳을 기준으로 따르지 않고 부모태그를 기준으로 움직인다.
부모 중에 position이 relative, fixed, absolute 하나라도 있으면 그 부모에 대해 절대적으로 움직이게 됩니다.
예제 코드를 보자
<style>
.hello1 {
width: 300px;
height: 300px;
background-color: aqua;
margin-top: 30px;
}
.hello2 {
margin-top: 30px;
width: 100px;
height: 100px;
background-color: blueviolet;
}
</style>
<body>
<div class="hello1">
<div class="hello2"></div>
</div>
</body>
보라색 div상자는 밝은 옥색 상자안에 있다.
이제 보라색 상자에 absolute속성을 부여해보자
<style>
.hello1 {
width: 300px;
height: 300px;
background-color: aqua;
margin-top: 30px;
}
.hello2 {
position: absolute;
top: 30px; >>>>>>>>>>> 추가
margin-top: 30px; >>>>>>>> 추가
width: 100px;
height: 100px;
background-color: blueviolet;
}
</style>
<body>
<div class="hello1">
<div class="hello2"></div>
</div>
</body>
보라색 상자가 밝은 옥색 상자를 기준으로 30px내려갔다.
만약 absolute를 지정한 태그의 부모가 없으면 body태그를 기준으로 움직인다.
absolute값은 부모태그를 기준으로 움직인다.
<style>
body {
height: 3000px;
width: 3000px;
}
.hello1{
width: 100px;
height: 100px;
background-color: blueviolet;
}
.hello2{
position: sticky; >>>> 주목
top: 30px;
width: 100px;
height: 100px;
background-color:aqua;
}
</style>
<body>
<div class="hello1">
형님!
</div>
<div class="hello2">
아우!
</div>
</body>
스크롤을 내려보면!
fixed를 쓰면 다른 요소랑 겹칠 우려가 있는데 sticky는 그러한 문제를 방지할 수 있다.