본문 바로가기
Study/CSS

CSS 기초 강의 6편: 반응형 웹 디자인과 미디어 쿼리

by wawManager 2024. 11. 21.
728x90

1. 반응형 웹 디자인이란?

반응형 웹 디자인(Responsive Web Design)은 다양한 화면 크기와 해상도에 맞춰 웹 페이지의 레이아웃과 스타일을 동적으로 조정하는 웹 디자인 방식입니다. 반응형 웹 디자인을 사용하면 디바이스에 상관없이 사용자에게 최적화된 웹 페이지를 제공합니다.


2. 미디어 쿼리(Media Query)

미디어 쿼리는 특정 조건(화면 크기, 해상도 등)에 따라 CSS 스타일을 적용하는 방법입니다. 화면 너비를 기준으로 모바일, 태블릿, 데스크톱 등 디바이스별 스타일을 지정할 수 있습니다.

미디어 쿼리 기본 문법

@media (조건) {
    /* 조건이 참일 때 적용할 CSS */
}

예제: 화면 너비 조건

/* 화면 너비가 768px 이하일 때 */
@media (max-width: 768px) {
    body {
        background-color: lightblue;
    }
}

위 코드는 화면 너비가 768px 이하일 때 body의 배경색을 lightblue로 변경합니다.


3. 미디어 쿼리 주요 조건

1) max-width

화면의 최대 너비를 지정하여 특정 화면 이하에서만 스타일을 적용합니다. 주로 모바일 우선 디자인에 사용됩니다.

@media (max-width: 600px) {
    .container {
        font-size: 14px;
    }
}

2) min-width

화면의 최소 너비를 지정하여 특정 화면 이상에서 스타일을 적용합니다. 주로 데스크톱 우선 디자인에 사용됩니다.

@media (min-width: 1024px) {
    .container {
        font-size: 18px;
    }
}

3) orientation

기기의 방향을 지정하여 스타일을 적용합니다. 가로 모드(landscape)와 세로 모드(portrait) 중 하나를 선택할 수 있습니다.

@media (orientation: landscape) {
    .sidebar {
        display: none;
    }
}

4. 미디어 쿼리를 사용한 반응형 레이아웃

미디어 쿼리를 사용하여 모바일, 태블릿, 데스크톱 환경에 맞게 레이아웃을 조정하는 방법을 살펴보겠습니다.

<!DOCTYPE html>
<html>
<head>
    <title>반응형 웹 디자인 예제</title>
    <style>
        /* 기본 레이아웃 - 데스크톱 */
        .container {
            display: grid;
            grid-template-columns: 1fr 3fr;
            gap: 10px;
            padding: 20px;
        }

        .sidebar {
            background-color: #f4f4f4;
            padding: 10px;
        }

        .content {
            background-color: #ddd;
            padding: 10px;
        }

        /* 태블릿 레이아웃 - 768px 이하 */
        @media (max-width: 768px) {
            .container {
                grid-template-columns: 1fr;
            }

            .sidebar {
                order: 2;
            }

            .content {
                order: 1;
            }
        }

        /* 모바일 레이아웃 - 480px 이하 */
        @media (max-width: 480px) {
            .container {
                padding: 10px;
            }

            .sidebar, .content {
                padding: 5px;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="sidebar">Sidebar</div>
        <div class="content">Content</div>
    </div>
</body>
</html>

코드 설명

  • 데스크톱 레이아웃: 기본적으로 2열 그리드 레이아웃을 사용하여 사이드바와 콘텐츠가 나란히 배치됩니다.
  • 태블릿 레이아웃: 화면 너비가 768px 이하일 때 한 줄 레이아웃으로 변경되며, order 속성으로 콘텐츠가 사이드바 위에 위치하게 합니다.
  • 모바일 레이아웃: 화면 너비가 480px 이하일 때 padding을 줄여 공간을 절약합니다.

5. 반응형 단위와 크기 지정 방법

1) vw와 vh

vw와 vh는 뷰포트 너비와 높이에 비례하여 크기를 지정하는 단위입니다.

  • 1vw는 뷰포트 너비의 1%에 해당합니다.
  • 1vh는 뷰포트 높이의 1%에 해당합니다.
.container {
    width: 80vw; /* 뷰포트 너비의 80% */
    height: 50vh; /* 뷰포트 높이의 50% */
}

2) rem과 em

rem과 em은 폰트 크기를 기준으로 크기를 설정하는 단위입니다. rem은 루트 폰트 크기를 기준으로 하고, em은 부모 요소의 폰트 크기를 기준으로 합니다.

.container {
    font-size: 1.5rem; /* 루트 폰트 크기의 1.5배 */
    padding: 2em;      /* 부모 폰트 크기의 2배 */
}

6. 미디어 쿼리와 반응형 디자인 예제

아래는 vw, vh, rem 단위와 미디어 쿼리를 함께 사용하여 다양한 화면 크기에 맞춰지는 반응형 웹 페이지 예제입니다.

<!DOCTYPE html>
<html>
<head>
    <title>반응형 웹 디자인 예제</title>
    <style>
        body {
            font-size: 16px;
            margin: 0;
            padding: 0;
        }

        header {
            background-color: #333;
            color: white;
            text-align: center;
            padding: 2rem;
            font-size: 2rem;
        }

        .container {
            display: flex;
            flex-direction: column;
            padding: 2vw;
        }

        .content {
            background-color: #f4f4f4;
            padding: 2em;
            margin-bottom: 1rem;
        }

        /* 태블릿 레이아웃 - 768px 이하 */
        @media (max-width: 768px) {
            header {
                font-size: 1.5rem;
                padding: 1.5rem;
            }
            .container {
                padding: 5vw;
            }
        }

        /* 모바일 레이아웃 - 480px 이하 */
        @media (max-width: 480px) {
            header {
                font-size: 1.2rem;
                padding: 1rem;
            }
            .container {
                padding: 3vw;
            }
        }
    </style>
</head>
<body>
    <header>
        반응형 웹 디자인 예제
    </header>

    <div class="container">
        <div class="content">Content 1</div>
        <div class="content">Content 2</div>
        <div class="content">Content 3</div>
    </div>
</body>
</html>

코드 설명

  • 기본 레이아웃: 뷰포트 너비와 높이에 따라 유연하게 변하도록 vw, vh, rem 단위를 사용했습니다.
  • 태블릿 및 모바일 레이아웃: 미디어 쿼리를 사용하여 화면이 줄어들수록 텍스트 크기와 내부 여백을 줄입니다.

요약

이번 강의에서는 반응형 웹 디자인의 기본 개념과 미디어 쿼리 사용법을 배웠습니다. 다양한 화면 크기에서 적절한 레이아웃과 스타일을 적용할 수 있어, 모바일 환경에서도 일관성 있고 사용하기 쉬운 웹 페이지를 만들 수 있습니다. 다음 강의에서는 CSS 애니메이션과 트랜지션을 활용하여 웹 페이지에 시각적 효과를 추가하는 방법을 알아보겠습니다.

728x90