position을 이용하면 복잡하고 다양한 레이아웃을 실현할 수 있다. position에는 static, relative, absolute, fixed 총 4가지가 있다. 그 중 디폴트인 static을 제외하고 나머지 세 position에 대해서 정리한다.
자기 자신을 기준으로 위치를 이동할 수 있다. top
, left
, right
, bottom
property에 +, -값을 넣어 이동하면 된다.
div {
position: relative;
top: -20px;
left: 10px;
}
-
를 하면 아래로 떨어지는게 아니라 위로 이동한다.
absolute는 position: static
이 아닌 부모에 대해서 절대적으로 위치한다. 만약 해당하는 부모가 없다면 body
가 기준이 된다.
div {
position: absolute;
right: 0;
bottom: 0;
}
이라면 부모의 가장 오른쪽과 아래쪽 위치에 딱 붙어서 절대적으로 위치하게 된다.
fixed는 말그대로 화면에 고정하는 것이다. nav bar나 top버튼같이 스크롤을 내려도 따라오면서 항상 그 위치에 고정되어 있게된다.
만약 top버튼이라면
div {
position: fixed;
bottom: 0;
right: 0;
}
로 설정하면 오른쪽 아래에 항상 top버튼이 존재하게 된다.
block
요소는 바로 옆에 다른 요소가 올 수 없는, 한 줄을 다 차지하는 요소들을 의미한다.
<header>
, <footer>
, <p>
, <li>
, <table>
, <div>
, <h1>
등inline 성격을 가진 태그를 block이 되도록 변경할때는 display: block
을 이용한다. 주로 nav bar를 만들때 a
태그에 적용한다.
inline
요소는 block
과 반대로 다른 요소가 바로 옆에 올 수 있는 요소들이다.
<span>
, <a>
, <img>
등만약 block 성질을 가진 요소를 inline처럼 붙여서 나타내고 싶다면 display: inline
으로 설정하면 된다. 또한 float: left
, float: right
를 이용해서도 block을 inline으로 변경할 수 있다.
block
요소의 성질을 가진 요소에 inline
의 성질을 더할 수 있다. display: inline-block
을 사용하면 block들이 줄바꿈되지 않고 줄지어서 나타나게 된다.
float
는 말그대로 공중에 띄운다는 의미이다. 만약 이미지(<img>
)와 글(<p>
)을 삽입하고 이미지에 float
속성을 적용한다면 float가 없을 때에는 다음줄에 있던 글(<p>
)이 원래 비어있던 자리들을 차지하며 이미지 주변에 글이 둘러쌓이는 모습을 볼 수 있다.
<div class="float-test">
<img src = "https://cdn4.iconfinder.com/data/icons/flat-brand-logo-2/512/css3-512.png">
<p>이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지이것은이미지</p>
</div>
img {
float: left;
}
하지만 float 속성을 사용하면 block 성질을 가진 요소가 올라가면서 레이아웃이 망가지거나 부모가 높이를 인지할 수 없어서 부모를 벗어나는 경우가 발생하기도 한다.
이를 해결하는 방법은 clear
를 사용하는 것이다. clear
는 float
의 속성을 지우는 역할을 하며 left
, right
, both
가 있다. clear
를 적용하는 방법은 다양하다.
div
의 끝부분에 아무 태그나 넣고 clear
속성을 적용한다. <div class="float_test">
<img style="float: left;" src="https://s3.ap-northeast-2.amazonaws.com/cdn.wecode.co.kr/logo/wecode_logo_bk.png">
<p style="clear: left;"></p>
</div>
div
에 overflow: hidden
을 적용한다.overflow
속성은 담고 있는 내용이 박스의 크기보다 클 때 내용을 어떻게 표시할지에 대한 설정이다. hidden
으로 설정하면 박스보다 커서 넘치는 내용들은 숨겨서 보이지 않도록 한다. <div style="overflow: hidden;">
<img class="float-right" src="https://s3.ap-northeast-2.amazonaws.com/cdn.wecode.co.kr/logo/wecode_logo_bk.png">
</div>
div
를 float시키면 자식의 float 높이를 인지하여 그만큼의 높이를 차지한다. 하지만 block 요소의 성질을 잃게 되므로 width: 100%
추가해야한다. <div style="float: right; width: 100%">
<img style="float: right" src="https://s3.ap-northeast-2.amazonaws.com/cdn.wecode.co.kr/logo/wecode_logo_bk.png">
</div>
::after
를 사용할수도 있다.(참고)<div>
<img class="float-left" src="https://s3.ap-northeast-2.amazonaws.com/cdn.wecode.co.kr/logo/wecode_logo_bk.png">
<p>아무거나 써넣어볼게요</p>
</div>
div::after {
content:'';
display: table;
clear: left;
}