float은 텍스트와 이미지 같은 인라인 요소를 조정하기 위한 목적으로 만들어졌지만flex등장 이전에 레이아웃을 만들기 위해 많이 사용 되었습니다.
float: left: 요소를 부모 컨테이너의 왼쪽으로 띄워줍니다.
float: right: 요소를 부모 컨테이너의 오른쪽으로 띄워줍니다.
float: inherit: 부모 요소의 float 속성을 상속 받습니다.
float 속성을 적용하면 그 다음 요소에 영향을 미칠 수 있습니다.
그것을 방지하기 위해 clear속성을 사용합니다.
float을 사용하면 부모 요소가 자식의 크기를 인식하지 못하는 등의 문제가 생길 수 있습니다. 그래서 clear를 사용하여 다음 요소에 미치는 영향을 제어해 주어야 합니다.
이렇게 float으로는 복잡한 레이아웃을 만들기 힘들고, 반응형 디자인에서는 flex와 같은 레이아웃을 사용하는 것이 좋습니다.
flex는 컨테이너 안에서 유연하고 반응성이 좋은 레이아웃을 만들기 위해 만들어진 속성입니다.
display: flex: 컨테이너를 flex로 지정합니다.
flex-direction: :항목을row, column등으로 방향을 결정합니다.
justify-content:주 축을 기준으로flex-start,center등을 따라서 항목을 정렬해 줍니다.
align-items: 교차축을stretch, center에 따라서 항목을 정렬해 줍니다.
flex-wrap:nowrap,wrap으로 항목의 줄바꿈을 허용할지 말지 정해줍니다.
order: 항목의 순서를 지정해 줍니다.
flex-grow: 항목이 다른 항목에 비해 얼마나 늘어나야 하는지 지정해 줍니다.
flex-shrink: 공간이 부족할 때 항목을 얼마나 줄여야 하는지 정해줍니다.
flex-basis: 항목의 초기 크기를 설정해 줍니다.
align-self: 개별적인 정렬을 하기 위해서 align-items를 재정의 해줍니다.
float과 같이 clear와 같은 속성에 의존하지 않고 복잡하고 반응이 빠른 레이아웃을 비교적 쉽게 만들 수 있습니다.대부분의 레이아웃에 Flex가 더 나은 이유는 아래와 같습니다.
float은 텍스트 흐름용으로 만들어진 반면 flex는 레이아웃용으로 만들어졌습니다.
그로 인해 반응형 레이아웃을 만들기 쉬운 속성을 가지고 있습니다.
때문에 flex는 컨테이너의 크기 조정과 정렬 및 요소의 순서를 효율적으로 처리할 수 있습니다.
하지만 float을 아예 배제 하는 것은 좋다고 할 수 없습니다.
이미 사용 중인 곳도 많고 이미지 주위의 텍스트를 배치하는 등의 일부 상황에서는 유용하기 때문입니다.