본문 바로가기
Study

08. CSS Layout 종합 학습 | 웹 개발 기초

by 구구 구구 2024. 7. 8.
반응형

익스트림 클로즈업이라고 써 봤는데 딱히, dall-e

 

CSS Layout 종합 학습

 

01. 서론

1) CSS Layout이란?

CSS Layout은 웹 페이지의 구성 요소를 배치하는 다양한 기술을 의미합니다. 이 기술을 통해 웹 디자이너는 텍스트, 이미지, 비디오 등 다양한 콘텐츠를 원하는 위치에 배치하고, 페이지의 구조를 정의할 수 있습니다. CSS Layout의 기본적인 방식으로는 Normal Flow, Flexbox, Grid Layout, Floats, Positioning 등이 있습니다. 각각의 방법은 특정한 상황에서 효과적으로 사용할 수 있습니다.

2) CSS Layout의 중요성

CSS Layout은 웹 페이지의 사용자 경험과 접근성에 직접적인 영향을 미칩니다. 잘 구성된 레이아웃은 사용자가 콘텐츠를 쉽게 이해하고 탐색할 수 있도록 도와줍니다. 또한, 다양한 장치와 화면 크기에 대응하는 반응형 디자인을 구현하여, 모든 사용자가 최적의 경험을 할 수 있도록 합니다. CSS Layout을 효과적으로 활용하면 유지 보수가 쉬워지고, 코드의 가독성도 향상됩니다.

예시 코드

            <!DOCTYPE html>
            <html lang="ko">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Flexbox Layout 예제</title>
                <style>
                    .container {
                        display: flex;
                        justify-content: space-around;
                        align-items: center;
                        height: 100vh;
                    }
                    .box {
                        width: 100px;
                        height: 100px;
                        background-color: lightblue;
                        text-align: center;
                        line-height: 100px;
                        font-size: 20px;
                    }
                </style>
            </head>
            <body>
                <div class="container">
                    <div class="box">1</div>
                    <div class="box">2</div>
                    <div class="box">3</div>
                </div>
            </body>
            </html>

실행 결과

위 코드를 실행하면, 세 개의 박스가 수평으로 배치되고, 각각의 박스는 중앙에 정렬됩니다. 이를 통해 Flexbox의 기본 개념과 활용 방법을 시각적으로 확인할 수 있습니다.

 

02. Normal Flow

1) 기본 배치 방법

Normal Flow는 웹 페이지에서 요소들이 기본적으로 배치되는 방식을 의미합니다. 별도의 CSS 스타일링을 적용하지 않으면, 모든 요소는 Normal Flow에 따라 배치됩니다. 블록 레벨 요소는 수직으로 쌓이고, 인라인 요소는 수평으로 배치됩니다. Normal Flow는 웹 문서의 기본 구조를 유지하는 데 중요한 역할을 합니다.

2) 블록 레벨 요소와 인라인 요소의 차이

블록 레벨 요소는 페이지의 전체 너비를 차지하며, 항상 새로운 줄에서 시작됩니다. 대표적인 블록 레벨 요소로는 <div>, <p>, <h1> ~ <h6> 등이 있습니다. 반면, 인라인 요소는 콘텐츠의 크기만큼만 공간을 차지하며, 다른 요소와 같은 줄에 배치됩니다. 대표적인 인라인 요소로는 <span>, <a>, <strong>, <em> 등이 있습니다.

예시 코드


            <!DOCTYPE html>
            <html lang="ko">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Normal Flow 예제</title>
                <style>
                    .block {
                        background-color: lightblue;
                        margin: 10px 0;
                        padding: 10px;
                    }
                    .inline {
                        background-color: lightcoral;
                        padding: 5px;
                    }
                </style>
            </head>
            <body>
                <div class="block">블록 레벨 요소 1</div>
                <div class="block">블록 레벨 요소 2</div>
                <span class="inline">인라인 요소 1</span>
                <span class="inline">인라인 요소 2</span>
            </body>
            </html>
        

실행 결과

위 코드를 실행하면, 두 개의 블록 레벨 요소는 각각 새로운 줄에서 시작되며, 전체 너비를 차지합니다. 반면, 두 개의 인라인 요소는 같은 줄에 배치되며, 각각의 콘텐츠 크기만큼만 공간을 차지합니다.

 

03. Flexbox

1) Flexbox의 기본 개념

Flexbox(플렉스 박스)는 일차원 레이아웃 모델로, 요소들을 수평 또는 수직 방향으로 쉽게 정렬하고 배치할 수 있게 해줍니다. Flexbox를 사용하면, 복잡한 레이아웃을 단순한 CSS 속성으로 효율적으로 구성할 수 있습니다. Flexbox는 부모 요소(Flex 컨테이너)와 자식 요소(Flex 아이템)로 구성됩니다.

2) Flex 컨테이너와 항목 정렬

Flex 컨테이너는 display: flex 또는 display: inline-flex 속성을 통해 정의됩니다. 컨테이너 안에 있는 모든 자식 요소는 Flex 아이템이 됩니다. Flexbox는 주요 축(main axis)과 교차 축(cross axis)을 사용하여 요소를 정렬합니다.

주요 Flexbox 속성

  • justify-content: 주 축을 따라 아이템을 정렬합니다.
  • align-items: 교차 축을 따라 아이템을 정렬합니다.
  • flex-direction: 주 축의 방향을 설정합니다.
  • flex-wrap: 아이템이 컨테이너를 벗어날 때 줄 바꿈 여부를 설정합니다.

예시 코드


            <!DOCTYPE html>
            <html lang="ko">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Flexbox 예제</title>
                <style>
                    .container {
                        display: flex;
                        justify-content: space-around;
                        align-items: center;
                        height: 100vh;
                    }
                    .box {
                        width: 100px;
                        height: 100px;
                        background-color: lightblue;
                        text-align: center;
                        line-height: 100px;
                        font-size: 20px;
                    }
                </style>
            </head>
            <body>
                <div class="container">
                    <div class="box">1</div>
                    <div class="box">2</div>
                    <div class="box">3</div>
                </div>
            </body>
            </html>
        

실행 결과

위 코드를 실행하면, 세 개의 박스가 수평으로 배치되고, 각각의 박스는 중앙에 정렬됩니다. justify-content: space-around 속성은 박스들 사이에 균등한 간격을 두고 배치하며, align-items: center 속성은 박스들을 수직으로 중앙에 정렬합니다.

 

04. Grid Layout

1) Grid Layout의 기본 개념

Grid Layout은 CSS의 2차원 레이아웃 시스템으로, 행과 열을 기반으로 웹 페이지를 구성할 수 있습니다. Grid Layout을 사용하면 복잡한 레이아웃을 쉽게 관리할 수 있으며, 다양한 화면 크기에 대응할 수 있는 유연한 디자인을 만들 수 있습니다. Grid Layout은 그리드 컨테이너와 그리드 아이템으로 구성되며, display: grid 속성을 사용하여 그리드 컨테이너를 정의합니다.

2) 2차원 레이아웃 구성

Grid Layout은 2차원 구조를 제공하여, 아이템을 정확한 위치에 배치할 수 있습니다. 주요 속성으로는 grid-template-columns, grid-template-rows, grid-gap 등이 있습니다. 이러한 속성들을 통해 그리드의 행과 열을 정의하고, 간격을 설정할 수 있습니다.

예시 코드


            <!DOCTYPE html>
            <html lang="ko">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Grid Layout 예제</title>
                <style>
                    .grid-container {
                        display: grid;
                        grid-template-columns: 100px 200px 1fr;
                        grid-template-rows: 100px 200px;
                        gap: 10px;
                    }
                    .grid-item {
                        background-color: lightblue;
                        text-align: center;
                        padding: 20px;
                        font-size: 20px;
                    }
                    .item1 {
                        grid-column: 1 / 3;
                        grid-row: 1;
                    }
                    .item2 {
                        grid-column: 2 / 4;
                        grid-row: 2;
                    }
                </style>
            </head>
            <body>
                <div class="grid-container">
                    <div class="grid-item item1">A</div>
                    <div class="grid-item">B</div>
                    <div class="grid-item item2">C</div>
                    <div class="grid-item">D</div>
                </div>
            </body>
            </html>
        

실행 결과

위 코드를 실행하면, item1은 첫 번째 행의 첫 번째 열과 두 번째 열을 차지하며, item2는 두 번째 행의 두 번째 열에서 세 번째 열까지 차지합니다. Grid Layout을 사용하면 이러한 복잡한 배치를 간단하게 구현할 수 있습니다.

 

05. Floats

1) 요소를 떠서 배치하는 방법

CSS의 float 속성은 요소를 왼쪽이나 오른쪽으로 떠서 배치하며, 다른 콘텐츠는 이 요소 주위로 흐르게 합니다. float 속성을 사용하면 텍스트가 이미지 주위로 감싸는 것처럼 시각적인 레이아웃을 쉽게 구성할 수 있습니다. float 속성은 left, right, none 값을 가질 수 있습니다.

2) 과거와 현재의 사용 사례

과거에는 float 속성을 사용하여 전체 레이아웃을 구성하는 경우가 많았습니다. 예를 들어, 웹 페이지의 왼쪽 사이드바와 오른쪽 콘텐츠 영역을 만들기 위해 float를 사용했습니다. 하지만, Flexbox와 Grid Layout 같은 더 나은 레이아웃 방법이 등장하면서 float의 사용은 주로 텍스트와 이미지의 혼합 배치와 같은 간단한 레이아웃에 한정되었습니다.

예시 코드


            <!DOCTYPE html>
            <html lang="ko">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Float 예제</title>
                <style>
                    .container {
                        width: 80%;
                        margin: 0 auto;
                    }
                    .image-left {
                        float: left;
                        margin-right: 10px;
                    }
                    .image-right {
                        float: right;
                        margin-left: 10px;
                    }
                </style>
            </head>
            <body>
                <div class="container">
                    <img src="https://via.placeholder.com/150" alt="Placeholder Image" class="image-left">
                    <p>
                        이 예제는 float 속성을 사용하여 이미지를 텍스트의 왼쪽에 배치하는 방법을 보여줍니다. 텍스트는 이미지 주위로 흐르게 됩니다. float 속성은 주로 텍스트와 이미지의 혼합 배치에 사용됩니다. 예를 들어, 블로그 게시물이나 뉴스 기사에서 텍스트와 이미지를 함께 배치할 때 유용합니다. </p> <img src="https://via.placeholder.com/150" alt="Placeholder Image" class="image-right"> <p> 이 예제는 float 속성을 사용하여 이미지를 텍스트의 오른쪽에 배치하는 방법을 보여줍니다. 텍스트는 이미지 주위로 흐르게 됩니다. float 속성은 주로 텍스트와 이미지의 혼합 배치에 사용됩니다. 예를 들어, 블로그 게시물이나 뉴스 기사에서 텍스트와 이미지를 함께 배치할 때 유용합니다. </p> </div> </body> </html> 

실행 결과

위 코드를 실행하면, 첫 번째 이미지는 텍스트의 왼쪽에 배치되고, 두 번째 이미지는 텍스트의 오른쪽에 배치됩니다. 텍스트는 이미지 주위로 흐르게 되어 보다 자연스러운 레이아웃을 제공합니다.

float 속성은 단순한 레이아웃에서 여전히 유용하지만, Flexbox와 Grid Layout과 같은 최신 레이아웃 방법이 더 유연하고 강력한 기능을 제공하기 때문에 주로 이러한 최신 기술을 사용하는 것이 좋습니다.

 

06. Positioning

1) 다양한 위치 속성

CSS의 위치 속성은 요소를 문서 흐름에서 벗어나 특정 위치에 배치하는 방법을 정의합니다. 주요 위치 속성으로는 static, relative, absolute, fixed, sticky가 있습니다.

  • static: 기본 위치로, 문서 흐름에 따라 배치됩니다.
  • relative: 요소를 문서 흐름에 따라 배치한 후, 지정된 위치(offset)만큼 이동합니다.
  • absolute: 가장 가까운 위치 조상 요소에 대해 절대 위치를 설정합니다.
  • fixed: 뷰포트에 대해 고정 위치를 설정합니다.
  • sticky: 스크롤 위치에 따라 요소가 고정 또는 상대적으로 배치됩니다.

2) 상대적, 절대적, 고정 위치

상대적, 절대적, 고정 위치는 다양한 레이아웃을 구성할 때 유용합니다.

상대적 위치

상대적 위치는 요소의 원래 위치를 기준으로 이동합니다.


            <!DOCTYPE html>
            <html lang="ko">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Relative Position 예제</title>
                <style>
                    .relative-box {
                        position: relative;
                        top: 20px;
                        left: 30px;
                        background-color: lightblue;
                        width: 100px;
                        height: 100px;
                    }
                </style>
            </head>
            <body>
                <div class="relative-box">Relative</div>
            </body>
            </html>
        

절대적 위치

절대적 위치는 가장 가까운 위치 조상 요소를 기준으로 배치됩니다.


            <!DOCTYPE html>
            <html lang="ko">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Absolute Position 예제</title>
                <style>
                    .container {
                        position: relative;
                        width: 200px;
                        height: 200px;
                        background-color: lightgrey;
                    }
                    .absolute-box {
                        position: absolute;
                        top: 20px;
                        left: 30px;
                        background-color: lightcoral;
                        width: 100px;
                        height: 100px;
                    }
                </style>
            </head>
            <body>
                <div class="container">
                    <div class="absolute-box">Absolute</div>
                </div>
            </body>
            </html>
        

고정 위치

고정 위치는 뷰포트에 대해 고정되어, 스크롤 시에도 동일한 위치에 유지됩니다.


            <!DOCTYPE html>
            <html lang="ko">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Fixed Position 예제</title>
                <style>
                    .fixed-box {
                        position: fixed;
                        bottom: 10px;
                        right: 10px;
                        background-color: lightgreen;
                        width: 100px;
                        height: 100px;
                    }
                </style>
            </head>
            <body>
                <div class="fixed-box">Fixed</div>
            </body>
            </html>
        

실행 결과

위 코드를 실행하면, 상대적 위치는 기존 위치에서 이동하고, 절대적 위치는 가장 가까운 위치 조상 요소를 기준으로 배치되며, 고정 위치는 뷰포트에 고정됩니다.

이와 같은 다양한 위치 속성을 이해하고 활용하면, 웹 페이지의 레이아웃을 보다 유연하게 설계할 수 있습니다.

 

07. Multiple-column Layout

1) 다단 레이아웃 구성

다단 레이아웃은 텍스트를 여러 열로 나누어 배치하는 방법입니다. 이를 통해 신문이나 잡지 같은 레이아웃을 쉽게 구현할 수 있습니다. CSS의 column-count, column-gap, column-rule 속성을 사용하여 다단 레이아웃을 구성할 수 있습니다.

2) 신문 및 잡지 레이아웃

다단 레이아웃은 긴 텍스트를 읽기 쉽게 나누어 배치하는 데 유용합니다. 신문, 잡지, 블로그에서 자주 사용됩니다.

예시 코드


            <!DOCTYPE html>
            <html lang="ko">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Multiple-column Layout 예제</title>
                <style>
                    .columns {
                        column-count: 3;
                        column-gap: 20px;
                        column-rule: 1px solid #ccc;
                    }
                </style>
            </head>
            <body>
                <div class="columns">
                    <p>
                        이 예제는 CSS 다단 레이아웃을 보여줍니다. 텍스트는 세 개의 열로 나뉘어 배치됩니다.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum vestibulum. Cras venenatis euismod malesuada.
                    </p>
                    <p>
                        더 많은 텍스트가 필요합니다. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum vestibulum.
                    </p>
                    <p>
                        텍스트를 추가하여 다단 레이아웃의 효과를 확인합니다. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum vestibulum.
                    </p>
                </div>
            </body>
            </html>
        

실행 결과

위 코드를 실행하면, 텍스트가 세 개의 열로 나뉘어 배치됩니다. 열 사이의 간격은 column-gap 속성으로 설정되고, 열 사이의 구분선은 column-rule 속성으로 정의됩니다.

다단 레이아웃은 긴 텍스트를 여러 열로 나누어 배치하여 가독성을 높일 수 있는 유용한 도구입니다. 이를 통해 신문, 잡지와 같은 레이아웃을 효과적으로 구현할 수 있습니다.

 

08. Responsive Design

1) 반응형 디자인의 필요성

반응형 디자인은 다양한 장치와 화면 크기에서 일관된 사용자 경험을 제공하는 웹 디자인 기법입니다. 현대 사용자들은 데스크탑, 태블릿, 스마트폰 등 다양한 장치를 사용하므로, 웹 페이지가 모든 장치에서 최적화된 레이아웃을 제공하는 것이 중요합니다. 반응형 디자인은 사용자 만족도를 높이고, 검색 엔진 최적화(SEO)에도 긍정적인 영향을 미칩니다.

2) 미디어 쿼리 사용법

미디어 쿼리는 CSS의 기능으로, 특정 조건(화면 크기, 해상도 등)에 따라 다른 스타일을 적용할 수 있게 합니다. 주로 반응형 디자인을 구현하는 데 사용됩니다. 미디어 쿼리는 @media 규칙을 사용하여 정의합니다.

예시 코드


            <!DOCTYPE html>
            <html lang="ko">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Responsive Design 예제</title>
                <style>
                    .container {
                        width: 80%;
                        margin: 0 auto;
                        background-color: lightblue;
                        padding: 20px;
                    }
                    @media (max-width: 768px) {
                        .container {
                            background-color: lightcoral;
                        }
                    }
                    @media (max-width: 480px) {
                        .container {
                            background-color: lightgreen;
                        }
                    }
                </style>
            </head>
            <body>
                <div class="container">
                    <p>이 예제는 미디어 쿼리를 사용하여 화면 크기에 따라 배경색을 변경하는 방법을 보여줍니다.</p>
                    <p>화면 너비가 768px 이하일 때는 배경색이 lightcoral로 변경되고, 480px 이하일 때는 lightgreen으로 변경됩니다.</p>
                </div>
            </body>
            </html>
        

실행 결과

위 코드를 실행하면, 화면 너비가 768px 이상일 때는 컨테이너의 배경색이 lightblue로 설정됩니다. 화면 너비가 768px 이하로 줄어들면 배경색이 lightcoral로 변경되며, 480px 이하로 줄어들면 배경색이 lightgreen으로 변경됩니다. 이를 통해 미디어 쿼리가 다양한 화면 크기에서 스타일을 조정하는 데 어떻게 사용되는지 알 수 있습니다.

 

09. Fundamental Layout Comprehension

1) 기본 레이아웃 개념의 종합 이해

기본 레이아웃 개념을 종합적으로 이해하는 것은 웹 디자인에서 중요한 역할을 합니다. Normal Flow, Flexbox, Grid Layout, Floats, Positioning 등의 다양한 CSS 레이아웃 기술을 활용하여 웹 페이지를 구조화할 수 있습니다. 이러한 기술들을 종합적으로 이해하면, 더 나은 사용자 경험을 제공하고, 다양한 장치와 화면 크기에 대응하는 반응형 디자인을 구현할 수 있습니다.

2) 다양한 CSS 레이아웃 기술의 활용

다양한 CSS 레이아웃 기술을 조합하여 복잡한 레이아웃을 쉽게 구성할 수 있습니다. Flexbox와 Grid Layout은 복잡한 레이아웃을 유연하게 구성할 수 있는 강력한 도구입니다. 또한, 미디어 쿼리를 사용하여 다양한 화면 크기에 맞춰 레이아웃을 조정할 수 있습니다.

예시 코드


            <!DOCTYPE html>
            <html lang="ko">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>종합 레이아웃 예제</title>
                <style>
                    .container {
                        display: flex;
                        flex-wrap: wrap;
                    }
                    .grid {
                        display: grid;
                        grid-template-columns: repeat(3, 1fr);
                        gap: 10px;
                        width: 100%;
                    }
                    .box {
                        background-color: lightblue;
                        padding: 20px;
                        text-align: center;
                        margin: 10px;
                    }
                </style>
            </head>
            <body>
                <div class="container">
                    <div class="box" style="flex: 1 1 100%;">Header</div>
                    <div class="grid">
                        <div class="box">Grid Item 1</div>
                        <div class="box">Grid Item 2</div>
                        <div class="box">Grid Item 3</div>
                    </div>
                    <div class="box" style="flex: 1 1 100%;">Footer</div>
                </div>
            </body>
            </html>
        

실행 결과

위 코드를 실행하면, 상단에는 Flexbox를 사용하여 전체 너비를 차지하는 헤더가 배치되고, 중간에는 Grid Layout을 사용하여 세 개의 그리드 아이템이 동일한 너비로 배치됩니다. 하단에는 Flexbox를 사용하여 전체 너비를 차지하는 푸터가 배치됩니다. 다양한 CSS 레이아웃 기술을 조합하여 유연하고 복합적인 레이아웃을 구성할 수 있습니다.

 

10. 결론

1) CSS Layout의 중요성 재강조

CSS Layout은 웹 페이지의 구조와 사용자 경험을 결정하는 중요한 요소입니다. 다양한 레이아웃 기법을 이해하고 적용하면, 복잡한 디자인을 유연하게 구성할 수 있습니다. Flexbox, Grid Layout, Positioning, Floats 등의 기술을 종합적으로 활용하면, 모든 장치에서 최적의 사용자 경험을 제공할 수 있습니다.

2) 추가 학습 자료와 참고 링크

위 자료들을 통해 다양한 CSS 레이아웃 기술을 심도 있게 학습하고, 실무에 적용할 수 있습니다. 다양한 예제와 실습을 통해 CSS Layout의 기본 개념부터 고급 기술까지 마스터해 보세요.


관련된 다른 글도 읽어보시길 추천합니다

 

2024.06.26 - [Study] - 00. HTML 개요 및 기본 태그 학습: 웹 개발의 기초

 

00. HTML 개요 및 기본 태그 학습: 웹 개발의 기초

01. 서론1) HTML의 중요성 및 개요HTML(HyperText Markup Language)은 웹 페이지의 구조를 정의하는 마크업 언어입니다. 웹의 기초를 이루는 HTML은 텍스트, 이미지, 링크, 멀티미디어 요소 등을 포함하여 웹

guguuu.com

2024.07.01 - [Study] - 04. CSS 선택자와 기본 스타일링 학습 | 웹 개발 기초

 

04. CSS 선택자와 기본 스타일링 학습 | 웹 개발 기초

CSS 선택자와 기본 스타일링 학습: 웹 개발 기초 01. 서론1) CSS란 무엇인가?CSS(캐스케이딩 스타일 시트)는 HTML 요소의 스타일을 정의하는 언어입니다. CSS는 HTML 문서의 외관을 제어하여 웹 페이지

guguuu.com

2024.07.03 - [Study] - 05. CSS 박스 모델 학습 | 웹 개발 기초

 


읽어주셔서 감사합니다

공감은 힘이 됩니다

 

:)

반응형

TOP

Designed by 티스토리