float
와 display
속성은 CSS에서 요소의 배치와 레이아웃을 제어하는 중요한 역할을 합니다. 이 속성들의 특성에 대해서 알아보고, 사용 예시를 살펴 보겠습니다.
float와 display 속성 개요
float
와 display
는 CSS에서 요소의 배치와 레이아웃을 제어하는 중요한 속성입니다.
- float:
float
속성은 요소를 왼쪽 또는 오른쪽으로 “띄우는” 역할을 합니다. 이를 통해 텍스트나 다른 인라인 요소가 그 주위로 흐르도록 할 수 있습니다. 웹 디자인 초기에는 float 속성이 컬럼 레이아웃을 만드는 주요 방법이었습니다. 하지만 현재에는 Flexbox나 Grid와 같은 레이아웃 기술들이 도입되면서, float의 사용은 이미지 등 몇 가지 특정 경우로 줄어들었습니다.
img { float: right; }
위 예시에서 이미지는 오른쪽으로 띄워져 있고, 주변의 텍스트나 인라인 요소들은 그 주위로 감싸게 됩니다.
- display:
display
속성은 요소가 어떻게 보여질지 결정합니다. 가장 자주 사용되는 값으로block
,inline
,inline-block
,none
, 그리고 최근에 추가된 ‘flex’와 ‘grid’ 등이 있습니다.
- block은 새로운 줄에서 시작하고 종료하는 박스를 생성합니다.
- inline은 새로운 줄을 시작하지 않고, 내용의 넓이만큼 차지하는 박스를 생성합니다.
- inline-block은 inline과 block의 성질을 모두 갖습니다.
- none은 해당 요소를 화면에 보여주지 않습니다(DOM 상에서 삭제되진 않으므로 JavaScript 등으로 다시 보여줄 수 있습니다).
- flex와 grid는 고급 레이아웃 시스템을 위한 값입니다.
div { display: flex; } span { display: block; }
위 예시에서 div 태그가 flex container가 되며, span 태그가 block-level element가 됩니다.
float 속성
float
속성은 속성의 명칭과 같이 요소를 화면위에 떠있는 형식으로 배치 합니다. float
속성을 이용하며 좌측 혹은 우측부터 정렬되는 박스 콘텐츠를 배열할 수 있습니다.
float
float: left;
혹은float: right;
를 지정하면width
는 콘텐츠를 표시할 때 필요한 만큼만 차지하고 다른 요소가 들어올 만큼의 공간을 비워 둡니다.float
속성이 더이상 동작하지 않도록 원할 경우 다음에 나오는clear
속성을 반드시 지정해 주어야 합니다.
clear
- clear 속성은 float 속성이 더 이상 유용하지 않다고 알려 주는 속성입니다.
- 만약
float: left;
로 왼쪽으로 배치했다면clear: left;
로 무효화시킬 수 있습니다. - 무조건 기본 상태로 되돌리고 싶다면
clear: both;
라고 하면 됩니다.
float와 clear 속성의 사용
float
와 clear
속성은 CSS에서 요소의 배치를 제어하는 데 사용됩니다.
- float 속성:
float
속성은 요소를 왼쪽 또는 오른쪽으로 “띄우는” 역할을 합니다. 이를 통해 텍스트나 다른 인라인 요소가 그 주위로 흐르도록 할 수 있습니다.
img { float: right; }
위 예시에서 이미지는 오른쪽으로 띄워져 있고, 주변의 텍스트나 인라인 요소들은 그 주위로 감싸게 됩니다.
- clear 속성:
clear
속성은 float된 요소 아래에 새로운 ‘행’을 시작하는 것을 지정합니다. 값으로는 ‘left’, ‘right’, ‘both’, ‘none’이 사용될 수 있습니다.
left
: 왼쪽에 있는 모든 float된 요소 아래에 새로운 줄이 시작됩니다.right
: 오른쪽에 있는 모든 float된 요소 아래에 새로운 줄이 시작됩니다.both
: 양쪽 방향의 모든 float된 요소 아래에 새로운 줄이 시작됩니다.none
: 기본값입니다. clear를 하지 않습니다.
div { clear: both; }
위 예시에서 div 태그는 양방향(float:left와 float:right)의 모든 floating element들 밑에서 시작하게 됩니다.
주요 웹 레이아웃 기법 중 하나인 clearfix도 이 clear 속성을 활용합니다. clearfix는 부모요소가 자식요소들을 올바르게 “감싸” 보일 수 있도록 하는 기법입니다(자식요소들 중 하나라도 float되어 있다면 부모요소가 자식요소들의 높이를 올바르게 인식하지 못하는 문제 해결).
display 속성
display
속성은 요소를 보여주는 방식을 지정하는 속성 입니다. 콘텐츠를 보이지 않게 할수도 있고 float 을 대체해 콘텐츠를 나란히 배치하는데 사용되기도 합니다.
- none : 보이지 않음 ,
visibility:hidden
속성과 유사하나 영역 자체가 없어짐. - block : 블록 박스
- inline : 인라인 박스
- inline-block : block과 inline의 중간 형태
block과 inline
block 태그는 width=100% 인 태그들로 요소를 나란히 배치할 수 없습니다. inline
은 콘텐츠의 크기만큼만 자리를 차지하기 때문에 다른 콘텐츠와 나란히 배치될 수 있습니다. 다만 width와 height 를 사용할 수 없어 주변 콘텐츠와 균형을 맞추기가 어려운 문제가 있습니다.
inline-block
display 속성을 사용하면 block 태그에 inline 속성을 가지도록 변경할수도 있고 그 반대도 가능합니다. 또한 inline 속성을 가지면서 즉, 다른 콘텐츠와 나란히 배치 되면서 block 요소의 width
, height
등의 속성이 적용되도록 하는 inline-block
속성도 있습니다.
display 속성의 사용 예시
display
속성은 HTML 요소의 표시 유형을 결정합니다. 주로 사용되는 값으로는 block
, inline
, inline-block
, none
, 그리고 최근에 추가된 ‘flex’와 ‘grid’ 등이 있습니다.
- block: 이 값은 요소를 블록 수준 요소로 만듭니다. 블록 수준 요소는 새로운 줄에서 시작하며 가능한 한 넓은 영역을 차지합니다.
div { display: block; }
위 예시에서 div 태그가 block-level element가 됩니다.
- inline: 이 값은 요소를 인라인 수준으로 만듭니다. 인라인 요소는 새로운 줄을 시작하지 않으며 필요한 만큼의 너비만 차지합니다.
span { display: inline; }
위 예시에서 span 태그가 inline-level element가 됩니다.
- inline-block: 이 값은 요소를 인라인-블록 수준으로 만듭니다. 인라인-블록 요소는 새로운 줄을 시작하지 않지만, 블록처럼 너비와 높이를 지정할 수 있습니다.
img { display: inline-block; }
위 예시에서 img 태그가 inline-block element가 됩니다.
- none: 이 값은 해당 요소를 화면에 보여주지 않습니다(DOM 상에서 삭제되진 않으므로 JavaScript 등으로 다시 보여줄 수 있습니다).
div { display: none; }
위 예시에서 div 태그는 화면에 표시되지 않게 됩니다.
- flex와 grid: 이들 속성값은 고급 레이아웃 시스템을 위해 설계되었습니다.
.container { display: flex; /* or grid */ }
위 예제에서 .container 클래스를 가진 엘리먼트들이 flex container 혹은 grid container가 되어 자식요소들의 배치를 제어하게 됩니다.
각각의 경우, 웹 페이지의 전체 구조와 필요에 따라 적합한 방식을 선택하면 됩니다.
float와 display 속성의 주요 차이점
float
와 display
속성의 주요 차이점은 다음과 같습니다:
- 용도:
float
는 주로 이미지 주위로 텍스트를 감싸거나 간단한 레이아웃을 만드는 데 사용되며,display
속성은 문서의 레이아웃을 보다 복잡하게 제어하는데 사용됩니다. - 문제 해결:
float
는 겹치는 문제가 발생할 수 있고 복잡한 레이아웃에서 관리하기 어려울 수 있습니다. 반면에display: flex;
,display: grid;
등의 값은 복잡한 반응형 디자인을 만드는 것을 목적으로 설계되었으므로 레이아웃 문제가 발생할 가능성이 적습니다. - 흐름(Flow):
float
속성은 요소를 일반적인 문서 흐름에서 벗어나게 하므로 예기치 않은 결과를 초래할 수 있습니다. 반면에display
변경사항은 적용된 요소와 그 자식 요소에만 영향을 줍니다. - 클리어링(Clearing): float된 요소들 사이의 레이아웃 문제를 방지하기 위해 ‘clear’ 처리가 종종 필요합니다. 그러나 flex나 grid와 같은 display 속성에서는 이런 처리가 필요하지 않습니다.
- 미래 사용: float를 이용한 레이아웃 구현 방법은 약간 구식으로 여겨집니다. 복잡한 레이아웃을 생성하는데는 현대 CSS 레이아웃 기술인 flexbox나 grid가 권장됩니다.
현대 CSS 레이아웃 기술인 flexbox나 grid 레이아웃 기술에 대해서는 아래 링크 참조.