CSS - 미디어 쿼리: 초보자 가이드

안녕하세요, 미래의 웹 개발자 여러분! 오늘 우리는 CSS 미디어 쿼리의 흥미로운 세상으로 뛰어들어 볼 거예요. 여러분의 친절한 이웃 컴퓨터 선생님이자, 저는 이 여정을 단계별로 안내해드리겠습니다. 걱정하지 마세요, 코드를 작성한 적이 없어도 괜찮아요 - 기본부터 시작해 점진적으로 학습해 나갈 거예요. 그러니 커피 한 잔 (또는 차, 만약 그게 당신의 취향이라면)을 마시고, 시작해 보세요!

CSS - Media Queries

미디어 쿼리는 무엇인가요?

복잡한 부분에 이전하기 전에, 미디어 쿼리가 무엇인지 이해해 보겠습니다. 당신이 컴퓨터에서 멋지게 보이는 웹사이트를 디자인하고 있다고 상상해 봅시다. 하지만 누군가가 그것을 휴대폰에서 볼 때 어떻게 될까요? 여기서 미디어 쿼리가 유용하게 쓰입니다! 미디어 쿼리는 당신의 웹사이트가 다양한 화면 크기와 장치에 맞게 적응할 수 있게 해줍니다. 마치 환경에 따라 모습을 바꾸는 변色竜 웹사이트 같은 것입니다.

문법

이제 미디어 쿼리의 기본 문법을 살펴보겠습니다:

@media mediatype and (condition) {
/* CSS 규칙을 여기에 작성합니다 */
}

이것이 무서워하지 마세요! 하나씩 풀어설명해드리겠습니다:

  • @media: 이는 브라우저에게 "이제 조건을 설정할 거야!"라고 알립니다.
  • mediatype: 이는 우리가 타겟으로 삼는 미디어 유형을 지정합니다 (곧 다루겠습니다).
  • and: 이는 조건을 결합하는 데 사용됩니다.
  • (condition): 이는 우리가 설정하는 구체적인 조건입니다.

미디어 유형

미디어 유형은 브라우저에게 어떤 종류의 장치를 타겟으로 삼는지 알립니다. 주요 유형은 다음과 같습니다:

미디어 유형 설명
all 모든 장치에 적용됨
print 프린터용
screen 컴퓨터 화면, 태블릿, 스마트폰용

논리 연산자

논리 연산자를 사용하여 더 복잡한 쿼리를 만들 수 있습니다:

연산자 설명
and 여러 미디어 기능을 결합
not 미디어 쿼리를 부정
only 전체 쿼리가 일치할 때에만 스타일 적용
, 여러 미디어 쿼리를 결합

CSS 미디어 유형 - All

all 미디어 유형은 다양한 장치에 작동하는 스위스 아ーノ이 다이스 - 모든 장치에 적용됩니다. 예를 들어보겠습니다:

@media all {
body {
background-color: lightblue;
}
}

이것은 모든 장치에서 배경색을 연蓝으로 설정합니다. 간단하지 않나요?

CSS 미디어 유형 - Print

print 미디어 유형은 누군가가 인쇄를 원할 때 웹 페이지를 스타일링하는 데 완벽합니다. 실제로 사용해 보겠습니다:

@media print {
body {
font-size: 12pt;
}
.no-print {
display: none;
}
}

이것은 인쇄 시 읽기 쉽도록 글자 크기를 늘리고, no-print 클래스를 가진 요소를 숨깁니다.

CSS 미디어 유형 - Screen

screen 미디어 유형은 가장 자주 사용할 것입니다. 모든 화면 기반 장치에 적용됩니다. 예를 들어보겠습니다:

@media screen and (max-width: 600px) {
.menu {
width: 100%;
}
}

이것은 화면 너비가 600픽셀 이하일 때 메뉴를 화면 전체 너비로 설정합니다.

CSS 미디어 유형 - 쉼표 사용

쉼표를 사용하여 여러 미디어 유형을 타겟으로 삼을 수 있습니다. 여러 친구를 파티에 초대하는 것과 같습니다:

@media screen, print {
body {
line-height: 1.5;
}
}

이것은 화면과 인쇄 미디어 유형 모두에 줄 간격을 설정합니다.

CSS 미디어 유형 - Only 사용

only 키워드는 클럽의 경비원과 같습니다. 오래된 브라우저가 미디어 쿼리를 지원하지 않아도 스타일이 적용되지 않도록 합니다:

@media only screen and (max-width: 600px) {
.container {
width: 100%;
}
}

CSS 미디어 쿼리 - 범위 지정

우리는 조건에 대해 범위를 지정할 수도 있습니다:

@media screen and (min-width: 600px) and (max-width: 900px) {
.sidebar {
display: none;
}
}

이것은 화면 너비가 600px에서 900px 사이일 때 사이드바를 숨깁니다.

미디어 기능

미디어 기능은 사용자의 장치나 브라우저의 특정 특성을 테스트할 수 있게 해줍니다. 일반적인 기능을 몇 가지 소개하겠습니다:

기능 설명
width 뷰포트의 너비
height 뷰포트의 높이
aspect-ratio 너비와 높이의 비율
orientation 풍경 모드 또는 세로 모드
resolution 장치의 픽셀 밀도

복잡한 미디어 쿼리 생성

이제 모든 것을 하나로 모아 더 복잡한 예제를 보겠습니다:

@media screen and (min-width: 600px) and (max-width: 900px) and (orientation: landscape) {
.grid {
display: flex;
flex-wrap: wrap;
}
.grid-item {
width: 50%;
}
}

이것은 풍경 모드로 화면 너비가 600px에서 900px 사이인 경우에 2열 레이아웃을 만듭니다.

CSS 미디어 쿼리 - 여러 유형 또는 기능 결합

and 연산자를 사용하여 여러 유형 또는 기능을 결합할 수 있습니다:

@media screen and (min-width: 600px) and (max-width: 900px), print and (max-width: 600px) {
.content {
font-size: 14px;
}
}

이것은 화면 너비가 600px에서 900px 사이인 경우 또는 인쇄 시 너비가 600px 이하인 경우에 스타일을 적용합니다.

CSS 미디어 쿼리 - 여러 쿼리 테스트

때로는 여러 쿼리 중 하나가 참이면 스타일을 적용하고 싶을 수 있습니다. 이 경우 쉼표를 사용합니다:

@media (min-width: 600px), (orientation: landscape) {
.header {
position: sticky;
top: 0;
}
}

이것은 화면 너비가 최소 600px인 경우 또는 풍경 모드인 경우에 헤더를 고정합니다.

CSS 미디어 쿼리 - 쿼리 의미 반전

not 키워드를 사용하여 쿼리의 의미를 반전할 수 있습니다:

@media not all and (orientation: landscape) {
.sidebar {
float: left;
}
}

이것은 장치가 풍경 모드인 경우를 제외하고 사이드바를 왼쪽에浮动시킵니다.

CSS 미디어 쿼리 - 오래된 브라우저와의 호환성 개선

오래된 브라우저가 미디어 쿼리를 지원하지 않는 경우, 대체 스타일을 제공할 수 있습니다:

.container {
width: 100%; /* 오래된 브라우저 대체 스타일 */
}

@media screen and (min-width: 600px) {
.container {
width: 80%;
}
}

이것은 오래된 브라우저에서도 적절한 레이아웃을 유지합니다.

그리고 이제 여러분은 CSS 미디어 쿼리의 세계로 첫 걸음을 뗐습니다. 연습이 완벽을 이루는 것을 잊지 마세요, 그러니 이 개념들을 실험해 보세요. 행복한 코딩을!

Credits: Image by storyset