[CSS] CSS 레이아웃 구성 방법( Floats, Positioning, Display, Box Model, CSS Grid, Flex Box )

CSS 레이아웃 구성 방법

Floats, Positioning, Display, Box Model, CSS Grid, Flex Box

Floats

  • left : 요소를 왼쪽으로 띄웁니다.
  • right : 요소를 오른쪽으로 띄웁니다.
  • none : 플로팅을 전혀 지정하지 않습니다. (기본값)
  • inherit : 플로팅 속성의 값을 요소의 부모 요소에서 상속하도록 지정합니다.

Float 속성 설정 : 요소에 'float' 속성을 적용하고 원하는 방향을 지정합니다.

Float 해제 : Float를 적용한 요소 다음에 다른 요소가 따라오는 경우, 그 요소의 레이아웃이 예상치 못하게 변경될 수 있습니다. 이를 방지하기 위해 'clearfix' 클래스를 추가하는 것입니다.

 

예시코드👇

더보기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Floating Elements</title>
<style>
  .container {
    width: 600px;
    margin: 0 auto;
  }
  .box {
    width: 200px;
    height: 200px;
    margin: 10px;
    float: left; /* 좌측으로 띄움 */
    background-color: lightblue;
  }
  .clearfix::after {
    content: "";
    display: block;
    clear: both;
  }
</style>
</head>
<body>
<div class="container clearfix">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>
</body>

 

위 코드에서는 '.box' 클래스를 가진 세 개의 사각형을 생성하고, 이를 왼쪽으로 띄워 배치합니다. 부모 요소인 '.container'에 'clearfix' 클래스를 추가하여 Float이 적용된 자식 요소들이 부모 요소의 레이아웃에 영향을 미치지 않도록합니다.

 

Positioning

  • Static : 요소의 기본값으로 일반적인 흐름에 따라 배치됩니다. 지정하지 않아도 됩니다.
  • Relative : 상대적 위치를 지정합니다. 요소가 자신의 정상 위치에서 이동되지만 다른 요소의 위치에는 영향을 주지 않습니다. 'top', 'right', 'bottom', 'left' 속성을 사용하여 이동 거리를 지정 할 수 있습니다.
  • Absolute : 일반적인 레이아웃 흐름에서 벗어나 마치 별도의 레이어에 있는 것처럼 이동시킵니다. 가장 가까운 위치에 있는 상윙소의 가장자리를 기준으로 고정할 수 있습니다.(다른 상위 요소가 없는 경우, <html>이 기준이됨)
  • Fixed : 요소를 뷰포트(브라우저 창)의 위치에 고정시킵니다. 스크롤이되더라도 화면 상에서 항상 같은 위치에 유지 됩니다.
  • sticky : 뷰포트(브라우저 창)에서 정의된 오프셋에 도달할 때까지 요소가 position:relative;와 같이 작동하고, 그 시점부터는 position: fixed와 같이 작동합니다.

사용 시 부모 요소의 Positioning 상태를 고려하여 배치해야합니다. 환면 크기에 따른 반응형 처리까지 고려하여 적용하는게 좋습니다.

 

예시코드👇

더보기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Relative Positioning 예제</title>
<style>
  .relative-container {
    position: relative;
    width: 300px;
    height: 200px;
    background-color: lightgray;
  }
  .relative-item {
    position: relative;
    top: 20px;
    left: 20px;
    width: 100px;
    height: 100px;
    background-color: lightblue;
  }
  .absolute-item {
    position: absolute;
    top: 50px;
    left: 50px;
    width: 100px;
    height: 100px;
    background-color: yellow;
  }
  .fixed-item {
    position: fixed;
    top: 20px;
    left: 20px;
    width: 100px;
    height: 100px;
    background-color: green;
  }

</style>
</head>
<body>
<div class="relative-container">
  <div class="relative-item"></div>
   <div class="absolute-item"></div>
  <div class="fixed-item"></div>
</div>
</body>
</html>

 

Display

  • block : 요소를 블록 요소로 지정합니다.
  • inline : 요소를 인란인 요소로 지정합니다.
  • inline-block : 요소를 인라인 요소처럼 표시하면서 블록 요소의 속성을 가집니다. 너비와 높이를 지정할 수 있습니다.

예시코드👇

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Display 요소로 지정하기</title>
<style>
  .block-element {
    display: block;
    width: 200px;
    height: 100px;
    background-color: lightblue;
    margin-bottom: 10px;
  }
    .inline-element {
    display: inline;
    background-color: yellow;
    padding: 5px;
    margin-right: 10px;
  }
  .inline-block-element {
    display: inline-block;
    width: 100px;
    height: 100px;
    background-color: green;
    margin-right: 10px;
  }
</style>
</head>
<body>
<div class="block-element">블록 요소 1</div>
<span class="inline-element">인라인 요소 2</span>
<div class="inline-block-element">인라인블록 요소 3</div>
</body>
</html>

 

Box Model

CSS에서 요소의 크기와 여백을 다루는 모델입니다. 각 요소는 content, padding, border, margin으로 구성되며, 이들을 조절하여 레이아웃을 조작할 수 있습니다.

예시코드👇

<!DOCTYPE html>
<html>
<head>
    <title>Box 모델 예시</title>
    <style>
        .box {
            width: 200px;
            height: 100px;
            background-color: lightblue;
            border: 2px solid blue;
            padding: 20px;
            margin: 10px;
        }
    </style>
</head>
<body>
    <div class="box">Box 모델 예시</div>
    <div class="box">Box 모델 예시</div>
</body>
</html>

 

CSS Grid

2차원 레이아웃 시스템을 만드는 데 사용됩니다.  행과 열을 정의하고 그리드 안의 요소들을 배치할 수 있습니다.

행(row)과 열(column)의 그리드를 사용하여 요소들을 배치합니다. 복잡한 레이아웃을 만드는 데 특히 유용하며, 특히 그리드 아이템의 배치와 정렬을 자유롭게 제어할 수 있습니다.

예시코드👇

<!DOCTYPE html>
<html>
<head>
    <title>Grid 예시</title>
    <style>
        .grid-container {
            display: grid;
            grid-template-columns: 100px 100px 100px;
            grid-gap: 10px;
        }
        .grid-item {
            background-color: lightcoral;
            height: 100px;
            text-align: center;
            line-height: 100px;
        }
    </style>
</head>
<body>
    <div class="grid-container">
        <div class="grid-item">1</div>
        <div class="grid-item">2</div>
        <div class="grid-item">3</div>
        <div class="grid-item">4</div>
        <div class="grid-item">5</div>
        <div class="grid-item">6</div>
    </div>
</body>
</html>

 

Flex Box 

요소들을 하나의 행 또는 열로 정렬하고, 부모 요소 안에서 공간 분배 및 정렬을 쉽게 제어할 수 있습니다.

주축(main axis)과 교차축(cross axis) 개념을 사용하여 요소들을 배치합니다.

예시코드👇

<!DOCTYPE html>
<html>
<head>
    <title>Flexbox 예시</title>
    <style>
        .flex-container {
            display: flex;
            justify-content: space-around;
        }
        .flex-item {
            width: 100px;
            height: 100px;
            background-color: lightgreen;
            margin: 10px;
        }
    </style>
</head>
<body>
    <div class="flex-container">
        <div class="flex-item">1</div>
        <div class="flex-item">2</div>
        <div class="flex-item">3</div>
    </div>
</body>
</html>

 


 

참고사이트

https://developer.mozilla.org/ko/docs/Learn/CSS/CSS_layout/Introduction#%EC%9D%BC%EB%B0%98_%ED%9D%90%EB%A6%84normal_flow

 

CSS 레이아웃 입문서 - Web 개발 학습하기 | MDN

이 문서에서는 이전 모듈에서 이미 다뤘던 CSS 레이아웃 기능, 예를 들어 다양한 display (en-US) 속성값의 차이 등을 복습하고, 이번 과정에서 다룰 몇 가지 CSS 개념을 소개합니다.

developer.mozilla.org