media query 올바르게 사용하기
max-width condition
.Color {
color: gray;
}
@media (max-width: 768px) {
.Color {
color: red;
}
}
@media (max-width: 1200px) {
.Color {
color: blue;
}
}
@media (max-width: 1400px) {
.Color {
color: green;
}
}
위 CSS 코드의 실행 결과를 예측해보자.
뷰포트의 너비가 1400을 초과하면 gray, 이하면 green이 된다. 어째서 일까?
CSS에서 동일한 Specificity 를 가진다면 가장 나중에 작성된 스타일이 적용된다.
따라서 현재 뷰포트의 너비가 500px여도, 가장 나중에 작성된
@media (max-width: 1400px) {
.Color {
color: green;
}
}
가 적용된다.
그렇다면 이제 다음 코드의 결과를 예측해보자.
.Color {
color: gray;
}
@media (max-width: 1400px) {
.Color {
color: green;
}
}
@media (max-width: 768px) {
.Color {
color: red;
}
}
@media (max-width: 1200px) {
.Color {
color: blue;
}
}
현재 뷰포트너비를 vw라고 한다면,
- vw > 1400: gray
- 1200 < vw ≤ 1400: green
- vw ≤ 1200: blue
가 된다.
똑같은 코드이지만 작성 순서를 바꾸니 결과가 달라진다. 위 코드는 다음과 같이 바꿔볼 수 있다.
@media (min-width: 1200px) and (max-width: 1400px) {
.Color {
color: green;
}
}
@media (max-width: 1200px) {
.Color {
color: blue;
}
}
@media (max-width: 768px) {
.Color {
color: red;
}
}
위 코드는 Specificity에 따라 무시된다.
따라서 media query에 max-width 조건을 사용하는 경우 breakpoint의 값이 큰 순서대로 작성해야 한다. 그렇지 않으면 무시되는 속성이 발생할 수 있다.
min-width condition
다음 코드의 결과를 예측해보자.
.Color {
color: gray;
}
@media (min-width: 1400px) {
.Color {
color: green;
}
}
@media (min-width: 1200px) {
.Color {
color: blue;
}
}
@media (min-width: 768px) {
.Color {
color: red;
}
}
위 코드는 뷰포트 너비가 768px 보다 크면 red, 이하이면 gray가 된다. min-width를 사용하는 경우에도 specificity에 따라 스타일이 무시되는 경우가 발생할 수 있다. 따라서 min-width condition을 사용하는 경우에는 max-width와는 반대로 breakpoint가 작은 순서대로 작성하는 것이 바람직 해보인다.
✅ .Color {
color: gray;
}
@media (min-width: 768px) {
.Color {
color: red;
}
}
@media (min-width: 1200px) {
.Color {
color: blue;
}
}
@media (min-width: 1400px) {
.Color {
color: green;
}
}
Summary
/* max-width */
/* base style 그리고 1400 < vw 스타일을 여기에 정의 */
@media (max-width: 1400px) {
/* 1200 < vw <= 1400 스타일을 여기에 정의 */
}
@media (max-width: 1200px) {
/* 760 < vw <= 1200 스타일을 여기에 정의 */
}
@media (max-width: 760px) {
/* vw <= 760 스타일을 여기에 정의 */
}
/* min-width */
/* base style 그리고 vw <= 390 스타일을 여기에 정의 */
@media (min-width: 390px) {
/* 390 < vw <= 760 스타일을 여기에 정의 */
}
@media (min-width: 760px) {
/* 760 < vw <= 1400 스타일을 여기에 정의 */
}
@media (min-width: 1400px) {
/* 1400 < vw 스타일을 여기에 정의 */
}