[HTML&CSS] float 속성의 이해와 웹 페이지 레이아웃 잡기 > HTML,CSS,레이아웃

본문 바로가기

검색취소

[HTML&CSS] float 속성의 이해와 웹 페이지 레이아웃 잡기

검색 이전 다음 목록

본문

 이번 글에서는 CSS의 float 속성을 이용하여 웹 페이지의 레이아웃을 잡는 방법에 대해 알아보겠습니다. 이번 글에서 우리의 목표는 블로그와 같은 웹 페이지에서 자주 쓰이는 header, content, sidebar, footer로 구성된 2단 레이아웃을 만드는 것입니다. 즉 다음과 같은 형태의 레이아웃을 잡는 것이 우리의 목표입니다.
  위와 같은 레이아웃을 잡기 위한 HTML과 CSS의 기본 구조은 다음과 같습니다. <div>으로 header, content, sidebar, footer 영역을 나누어 놓았고 각 영역의 크기와 배경색을 정해주었습니다.

layout.html
layout.css

  지금까지의 결과를 브라우져에서 확인해보면 다음과 같습니다.

  HTML은 기본적으로 웹 페이지의 가장 위에서부터 엘리먼트들이 아래쪽으로 하나씩 붙어나가는 형태이기 때문에 위와 같은 결과가 나오게 됩니다. 우리가 원하는 결과는 sidebar가 content의 오른쪽에 붙어있는 모양이지요. 그럼 이제 sidebar를 content의 오른쪽으로 붙이기 위해 float 속성을 이용해보도록 하겠습니다.

  float 속성은 그 값으로 left 또는 right를 갖습니다. float 속성이 붙은 엘리먼트는 웹 페이지 바닥에 딱 붙어서 고정되어있는 것이 아니라 바닥에서 살짝 떠서(실제로 떠있는 것처럼 보인다는 것이 아니라 의미적으로 그렇다는 것입니다^^) 자신이 속한 container의 가장 왼쪽 또는 가장 오른쪽으로 붙게 됩니다. float 속성이 붙어있는 엘리먼트는 말 그대로 둥둥 떠있는 상태이기 때문에 그 바로 다음에 오는 엘리먼트는 그 밑으로 비집고 들어가 자리를 잡을 수 있게 됩니다. 

  우리의 예제에서 content div에 float: left; 속성을 넣어주면 content는 바닥에서 살짝 뜬 채로 화면의 왼쪽에 붙어있게 되고 sidebar는 content의 밑으로 들어가게 될 것입니다. 그러나 이때 주의할 점이 있습니다. float된 엘리먼트 밑으로 비집고 들어가긴 들어가되 그 내용은 결코 가려지지 않습니다. 글로만 봐서는 무슨 뜻인지 잘 이해가 가지 않으실겁니다. 실제 예를 통해 다시 한번 설명드리겠습니다. 먼저 content에 float:left; 속성을 넣었을 때의 결과를 봅시다.

  언뜻 보기에 위의 결과와 차이가 전혀 없는 것으로 보일 수도 있으나 sidebar 영역을 잘 보시면 아까와 다르게 "sidebar"라는 글자가 content 영역 바로 아래 딱 붙어 있음을 알 수 있습니다. 이런 결과가 나온 이유는 content 영역이 float되어 있으므로 sidebar 영역이 content 영역 밑으로 들어가게 되는데 sidebar 영역의 내용("sidebar", "menu 1", "menu 2", "menu 3")이 content 영역에 가려지지 않을 정도까지만 들어간 것입니다.

  조금 이해가 되시나요? 이해를 돕기 위해 또 다른 예를 보겠습니다. 이번에는 sidebar 영역에 float: left; 속성을 주고 footer 영역이 어떻게 되는지 확인해보겠습니다.
  아까의 경우처럼 footer 영역이 sidebar 영역 밑으로 들어가되 "footer"라는 내용이 가리지 않을 정도까지만 들어갈 것이라고 예상하신 분들이 많으실 겁니다. 그러나 이번엔 아까와는 많이 다른 결과가 나왔습니다. "footer"라는 글자가 이상한 위치에 가있지요? 이런 결과가 나온 이유는 아까의 경우와는 달리 "footer"라는 내용이 옆으로 움직여 자리를 잡을 수 있는 여유 공간이 있기 때문입니다. 아까의 경우 sidebar 영역은 width가 좁아서 그 내용이 옆으로 움직일 공간이 없었지만, 이번 경우에는 footer 영역의 width가 넓어서 "footer"라는 내용이 sidebar 영역에 의해 가려지지 않고 옆으로 피할 공간이 있었기 때문에 이와 같은 결과가 나오게 된 것이죠.


  자 이제 float 속성의 특성에 대해 간략하게나마 알아보았으니 다시 본론으로 돌아와 sidebar를 content의 오른쪽에 붙여보도록 하겠습니다. 여러가지 방법이 있지만 우리는 content 영역에 float: left; 속성을 걸고 sidebar에 왼쪽 margin을 두어 목적을 달성해보도록 하겠습니다. content 영역에 float: left; 속성이 붙였을 때의 결과는 아까 위에서 보았습니다. 그 상황에서 sidebar에 왼쪽 margin을 content 영역의 너비만큼, 즉 350px 만큼 넣어주면 sidebar가 content의 오른쪽에 붙게 됩니다.

  그러나 아직 문제가 있군요. footer가 content이나 sidebar 보다 아래로 내려와야하는데 지금 상태는 footer가 content 밑에 깔려있습니다. 이 문제를 해결하기 위해서 footer 영역에 clear라는 속성을 붙여주어야 합니다.

  clear는 float 속성이 걸려있는 엘리먼트들로부터 영향을 받고 싶지 않을 때 사용하는 속성으로서 그 값으로 left, right, both를 가집니다. 즉 clear 속성을 가진 엘리먼트는 다른 엘리먼트들의 float 속성을 무시하고 원래 흐름대로(처음에 잠시 언급했듯이 엘리먼트들이 위에서부터 아래로 차곡차곡 붙어나가는 것이 HTML의 기본 흐름입니다) 자신의 자리를 찾게 됩니다. 위의 경우 footer 영역이 float: left 속성을 갖고 있는 content 영역의 영향을 받아 content의 밑으로 들어가게 된 것이므로 footer 영역에 clear: left(clear: both도 상관없겠죠^^) 속성을 넣어주면 footer 영역이 content 영역에 밑에 깔리지 않고 content 영역 아래쪽에 자리를 잡게 됩니다.(만약 sidebar 영역이 content 영역보다 더 길었다면 footer는 sidebar 아래에 붙게 되겠죠^^) 

  그럼 최종 결과를 보시겠습니다.

  자 이렇게 해서 header, content, sidebar, footer를 가진 기본적인 2단 레이아웃이 완성 되었습니다. 그런데 아직 한가지 문제가 남았습니다. 지금 상태로는 브라우져의 너비가 넓건 좁건 header, content, sidebar, footer를 포함하는 우리 웹 페이지의 메인 부분이 항상 브라우져의 왼쪽에 붙어있다는 것입니다. 브라우져의 너비에 관계없이 웹 페이지의 메인 부분이 브라우져의 중앙에 위치하면 좋을텐데 말이죠. 이를 위해서는 header, content, sidebar, footer 전체를 감싸는 최상위 div과 margin: auto라는 속성을 이용하면 됩니다. 엘리먼트에 margin: auto라는 속성이 붙어있으면 브라우져가 알아서 해당 엘리먼트를 container의 중앙에 배치시켜 줍니다. 먼저 html 파일을 보겠습니다.
  위와 같이 body의 최상위에 header, content, sidebar, footer를 포함하는 main이라는 div를 만들어 주었습니다. 다음으로 css 파일에는 다음의 코드를 추가합니다.
  main div의 width를 고정한 뒤 margin: auto 속성을 넣어주었습니다. 이제 그 결과를 보겠습니다.
  이제는 우리가 원했던 것처럼 우리 웹 페이지의 메인 부분이 브라우져의 중앙에 위치하게 되었습니다.


  이번 글에서 제가 소개한 방법말고도 다른 수많은 방법으로 같은 형태의 레이아웃을 얻을 수 있습니다. 또는 더 멋지고 좀더 복잡한 레이아웃을 만들 수도 있겠지요. 중요한 것은 오늘 공부한 float와 clear 속성을 잘 이해하고 있어야한다는 점입니다.float와 clear의 작동 원리만 머릿속에 명확히 숙지하고 있다면 어떤 형태의 레이아웃이라도 여러분 스스로 쉽게 만들어낼 수 있을 것입니다^^

추천 0

등록된 댓글이 없습니다.

검색취소

HTML,CSS,레이아웃

검색
  • no image
  • CSS : 반응형 웹(Responsive Web)

     CSS : 반응형 웹(Responsive Web)Posted by 서 지수 in 배움터 - 열공on Mar 31st, 2014태블릿 PC, 스마트 폰 등 모바일 기기의 이용이 늘어나면서 모바일 웹에 대한 관심이 많…

  • no image
  • CSS 글 자간 줄간 설정방법

    CSS 글 자간 줄간 설정방법 글 꼴의 종류와 크기를 결정했다면, 볼드/이텔릭과 같은 글꼴의 장식 및 자간, 줄간 들여쓰기와 같은 문단 편집기능에 대하여 살펴봅니다. 몇몇 기능은 브라우저에 따라, 적용/미적용 여부가…

  • #5cf039 헥스 색상 코드
  • #5cf039 헥스 색상 코드

    첨부파일

    #5cf039 정보 반전#a30fc625% 포화도#52ff2a그레이스케일#949494 25% 밝게#94f57e원본#5cf03925% 어둡게#34cf0f lawngreen#7cfc0025% 포화도 저하#6ad94f웹 …

  • CSS 레이아웃... Copy & Paste
  • CSS 레이아웃... Copy & Paste

    첨부파일

    오랜만에 그냥 팁 하나! CSS 레이아웃이 익숙치 않은 나 같은 분을 위한 친절한 사이트.. Copy & Paste를 해도 걱정 없다.Dynamic Drive CSS Layouts via Ajaxian 덤으로 왼쪽 …

  • XHTML+CSS 레이아웃 디자인 예제
  • XHTML CSS 레이아웃 디자인 예제

    첨부파일

    XHTML과 CSS로 레이아웃 디자인을 할 때 많이 쓰이는 레이아웃 디자인 템플릿을 모아둔 싸이트가 있다.http://www.intensivstation.ch/en/templates/일반적으로 사용되는 웬만한 레이아…

  • CSS 레이아웃 - Float 속성을 이용한 레이아웃 만들기
  • CSS 레이아웃 - Float 속성을 이용한 레이아웃 만들기

    *예전에 작성했던 강좌의 마지막 부분입니다. CSS를 통해 이전 강좌에서 작성한 마크업에 모양새를 입히기 전에 한 번 복습 하는 의미로 참고하면 좋겠네요 float 속성이번 시간에는 css를 통해 레이아우팅을 할 때…

?>