요소(element)가 보통 흐름(normal flow)으로부터 빠져 텍스트 및 인라인(inline) 요소가 그 주위를 감싸는 자기 컨테이너의 좌우측을 따라 배치되어야 함을 지정
CSS 속성(property) float
은 block요소들을 가로, 세로배치 하기 위해 사용한다.
float
은 left
, center
, right
의 속성값을 사용하여 현재위치에 붕뜬 뒤 설정한 방향으로 자신이 갈 수 있는 선에서 움직인다.
block
, inline
, inlineblock
속성값이 전부 block
으로 변경되어 Box model의 모든 속성이 사용 가능
block
은 자신이 width
를 제외한 나머지는 margin
으로 채우지만 float
를 사용하게 되면 채우지 않는다.
<body>
<div class="parent">
<div class="red">red</div>
<div class="yellow">yellow</div>
<div class="blue">blue</div>
</div>
</body>
* {
box-sizing: border-box;
margin: 0;
}
.parent {
width: 400px;
}
.red {
float: left;
width: 200px;
height: 200px;
background-color: red;
color: white;
}
.yellow {
float: left;
width: 200px;
height: 200px;
background-color: yellow;
color: white;
}
.blue {
float: left;
width: 200px;
height: 200px;
background-color: blue;
color: white;
}
위 코드의 실행 순서는 다음과 같다.
red 붕뜨고 float=left
로 자신이 갈 수 있는 가장 왼쪽으로 이동
빈자리를 yellow와 blue가 한칸씩 올라온 뒤 부모의 height
값 조정
yellow가 붕뜨고 float=left
로 자신이 갈 수 있는 가장 왼쪽인 red의 오른쪽위치로 이동
빈자리를 blue가 한칸 올라온 뒤 부모의 height
값 조정
blue가 붕뜨고 float=left
로 자신이 갈 수 있는 가장 왼쪽자리를 찾는다. 해당 위치는 yellow에 오른쪽부분인데 부모의 크기가 부족하므로 빨간색 밑으로 이동
자식 모두 float
가 되었기 때문에 부모의 height
값은 0이된다. 즉 영역을 차지하지 않으므로 요소가 없다.
Float
는 레이아웃의 붕괴를 유발
float
를 사용하면 blockbox들은 float
된 요소들을 없는 box로 취급한다.
하지만 text
, image
같은 inline
요소들은 float
된 요소들을 감지한다.
즉 float
를 사용하면 다른 block
요소들은 float
된 영역을 잡을 수 없지만, block
내 content
는 여전히 float
된 요소들의 영향을 받아서 레이아웃이 붕괴된다.
overflow: hidden
: float
된 자식을 가지고 있는 부모에게 overflow: hidden
을 사용하면 벗어났던 float
의 자식을 찾아준다..parent {
overflow: hidden;
}
clearfix
: clear: left
, right
, both
속성으로 입력된 방향에 float된 요소를 감지한다. 단 clear
속성은 display
가 block
인 요소에만 사용이 가능pseudo-elemrnt
: float
로 인하여 레이아웃이 붕괴되는 것은 스타일적인 문제이므로 CSS로 해결, 가상요소는 각 요소당 2개씩 가능(::before
, ::after
)/* pseudo-elemrnt를 이용해서 float된 자식의 영역을 감지해 부모의 영역을 설정 */
.parent::after {
content: '';
display: block;
clear: left;
/* right, left, both */
}
float - CSS: Cascading Style Sheets | MDN
김버그의 CSS는 재밌다 - 기초부터 실무 레벨까지