기타 · 2024. 12. 8.

CSS 미디어 쿼리 완벽 가이드: 반응형 웹 디자인의 핵심

반응형


오늘날 다양한 디바이스에서 웹 사이트를 최적화하려면 반응형 웹 디자인이 필수입니다. CSS 미디어 쿼리(Media Queries)는 화면 크기, 해상도, 방향 등을 기반으로 스타일을 조정할 수 있는 강력한 도구입니다. 이 글에서는 미디어 쿼리의 기본 개념부터 실전 활용법까지 자세히 설명합니다.

1. CSS 미디어 쿼리란?


CSS 미디어 쿼리는 특정 조건에 따라 스타일을 변경할 수 있는 규칙입니다. 주로 화면 크기와 디바이스 타입에 따라 레이아웃과 스타일을 조정하는 데 사용됩니다.

미디어 쿼리를 사용하면 다음이 가능합니다:
• 모바일, 태블릿, 데스크톱 등 디바이스별 맞춤 디자인
• 특정 화면 크기에서 레이아웃 변경
• 다양한 해상도에서 최적화된 사용자 경험 제공

2. CSS 미디어 쿼리 기본 문법

@media (조건) {
    /* 스타일 규칙 */
}


예제: 화면 너비가 768px 이하일 때 스타일 적용

@media (max-width: 768px) {
    body {
        background-color: lightblue;
    }
}


3. 미디어 쿼리의 주요 조건

3-1. max-width와 min-width

• max-width: 지정된 너비 이하에서 스타일 적용.
• min-width: 지정된 너비 이상에서 스타일 적용.

/* 768px 이하일 때 */
@media (max-width: 768px) {
    body {
        font-size: 14px;
    }
}

/* 1024px 이상일 때 */
@media (min-width: 1024px) {
    body {
        font-size: 18px;
    }
}


3-2. 디바이스 방향 (orientation)

• portrait: 세로 방향.
• landscape: 가로 방향.

@media (orientation: landscape) {
    body {
        background-color: lightgreen;
    }
}


3-3. 해상도 (resolution)


디바이스의 픽셀 밀도에 따라 스타일을 변경할 수 있습니다.

@media (min-resolution: 2dppx) {
    img {
        width: 50%;
    }
}


4. 미디어 쿼리의 실전 활용

4-1. 반응형 레이아웃 구현


다양한 화면 크기에 대응하는 레이아웃을 설계할 때 유용합니다.

/* 기본 스타일 */
.container {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
}

/* 태블릿 화면 */
@media (max-width: 768px) {
    .container {
        grid-template-columns: repeat(2, 1fr);
    }
}

/* 모바일 화면 */
@media (max-width: 480px) {
    .container {
        grid-template-columns: 1fr;
    }
}


결과:
• 데스크톱: 3개의 열.
• 태블릿: 2개의 열.
• 모바일: 1개의 열.

4-2. 글꼴 크기 최적화


화면 크기에 따라 글꼴 크기를 조정합니다.

/* 데스크톱 */
body {
    font-size: 18px;
}

/* 태블릿 */
@media (max-width: 768px) {
    body {
        font-size: 16px;
    }
}

/* 모바일 */
@media (max-width: 480px) {
    body {
        font-size: 14px;
    }
}


4-3. 반응형 네비게이션 바


화면 크기에 따라 네비게이션 메뉴를 변경합니다.

/* 데스크톱 스타일 */
.navbar {
    display: flex;
    justify-content: space-between;
    padding: 20px;
}

.navbar ul {
    display: flex;
    gap: 15px;
}

/* 모바일 스타일 */
@media (max-width: 768px) {
    .navbar ul {
        display: none; /* 메뉴 숨김 */
    }

    .navbar .menu-icon {
        display: block; /* 햄버거 메뉴 표시 */
    }
}


5. 반응형 웹 디자인 예제


HTML

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>미디어 쿼리 예제</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <header class="navbar">
        <h1>My Website</h1>
        <ul>
            <li>Home</li>
            <li>About</li>
            <li>Contact</li>
        </ul>
        <div class="menu-icon">☰</div>
    </header>
    <div class="container">
        <div class="item">Item 1</div>
        <div class="item">Item 2</div>
        <div class="item">Item 3</div>
    </div>
</body>
</html>


CSS

/* 기본 스타일 */
body {
    font-family: Arial, sans-serif;
    margin: 0;
    padding: 0;
}

.navbar {
    background-color: #333;
    color: white;
    padding: 10px 20px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.navbar ul {
    display: flex;
    gap: 20px;
    list-style: none;
}

.navbar .menu-icon {
    display: none;
}

.container {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    padding: 20px;
}

/* 태블릿 스타일 */
@media (max-width: 768px) {
    .container {
        grid-template-columns: repeat(2, 1fr);
    }

    .navbar ul {
        display: none; /* 메뉴 숨김 */
    }

    .menu-icon {
        display: block; /* 햄버거 메뉴 표시 */
    }
}

/* 모바일 스타일 */
@media (max-width: 480px) {
    .container {
        grid-template-columns: 1fr;
    }
}


6. 미디어 쿼리 활용 팁

1. 모바일 우선 접근: 작은 화면을 먼저 설계한 뒤, 화면이 커질수록 스타일을 추가하세요.

body {
    font-size: 14px;
}

@media (min-width: 768px) {
    body {
        font-size: 16px;
    }
}


2. 디자인 일관성 유지: 모든 화면 크기에서 동일한 사용자 경험을 제공하세요.
3. 브라우저 호환성 테스트: 다양한 브라우저와 디바이스에서 미디어 쿼리의 동작을 확인하세요.

CSS 미디어 쿼리는 다양한 화면 크기와 디바이스에서 웹 페이지를 최적화하는 핵심 도구입니다. 이 글의 내용을 바탕으로 반응형 웹 디자인을 실습하며 자신만의 프로젝트에 적용해 보세요.

다음 글에서는 CSS로 애니메이션과 트랜지션 구현하기를 다룰 예정입니다.

반응형