meta 태그를 이용하여 head /head 태그 사이에 작성<meta name=“viewport” content=“속성1=값1, 속성2=값2, ... “>| 종류 | 설명 | 사용 가능한 값 | 기본값 |
|---|---|---|---|
| width | 뷰포트 너비 | device-width 또는 크기 | 브라우저 기본값 |
| height | 뷰포트 높이 | device-height 또는 크기 | 브라우저 기본값 |
| user-scalable | 확대/축소 가능 여부 | yes 또는 no | yes |
| initial-scale | 초기 확대/축소 값 | 1 ~ 10 | 1 |
<meta name=“viewport” content=“속성1=값1, 속성2=값2“>
<meta name=“viewport” content=“width=device-width, initial-scale=1.0“>
<!-- 디바이스에 맞는 너비에 크기는 1배로 -->| 단위 | 설명 |
|---|---|
| vw(viewport width) | 1vw는 뷰포트 너비의 1%와 같음 |
| vh(viewport height) | 1vh는 뷰포트 높이의 1%와 같음 |
| vmin(viewport minimum) | 뷰포트의 너비와 높이 중에서 작은 값의 1%와 같음 |
| vmax(viewport maximum) | 뷰포트의 너비와 높이 중에서 큰 값의 1%와 같음 |
뷰포트 너비 1000px 높이 800px
1vw: 10px
1vh: 8px
vmin: 8px
vmax: 10px사이트에 접속하는 기기별로 적용할 스타일 파일을 다르게 지정해주는 CSS의 모듈
미디어 쿼리를 사용해 적용하는 스타일을 기기마다(화면 크기마다) 전환할 수 있음
@media [only 또는 not][미디어 유형] [and 또는 ,] (조건문) {
실행문
}
미디어 쿼리 문법의 시작
| 키워드 | 설명 |
|---|---|
| only | 미디어 쿼리를 지원하는 브라우저에서만 미디어 쿼리를 해석함 |
| not | not 다음에 지정하는 미디어 유형을 제외 |
| 기기명 | 설명 |
|---|---|
| all | 모든 장치(기본값) |
| 인쇄 장치 | |
| screen | 컴퓨터 화면 장치 또는 스마트 기기의 화면 |
| tv | 영상과 음성이 동시에 출력되는 장치 |
사용 방법
```css
@media screen { /* 화면용 스타일 작성 */ }
@media print { /* 인쇄용 스타일 작성 */ }
```
(조건문)| 키워드 | 설명 |
|---|---|
| and | 앞뒤 조건을 모두 만족할 때 뒤에 따라오는 것을 해석함 생략 가능 |
| , | 앞뒤 조건 중 하나만 만족하더라도 뒤에 따라오는 것을 해석함 생략 가능 |
사용 방법
```css
@media screen and (min-width:768px) and (max-width:1439px) {
// 스타일 작성
}
```
| 키워드 | 설명 |
|---|---|
| orientation | landscape: 가로모드(기본값) portrait: 세로모드 |
사용 방법
```css
@media screen and (min-width:768px) and (orientation:landscape) {
// 스타일 작성
}
```
띄어쓰기 주의
@media all and (min-width:320px) { 실행문 }
min/max 사용시 작성 순서 주의
- min을 사용시, 크기가 작은 순서대로 작성
- max를 사용시, 크기가 큰 순서대로 작성
@media all and (min-width:320px) { 실행문 }
@media all and (min-width:768px) { 실행문 }
@media all and (min-width:1024px) { 실행문 }
<!-- 모든 기기가 내 사이트에 들어올 때 320px 이상일 때 미디어 쿼리 실행 -->
<!-- 모든 기기가 내 사이트에 들어올 때 768px 이상일 때 미디어 쿼리 실행 -->
<!-- 모든 기기가 내 사이트에 들어올 때 1024px 이상일 때 미디어 쿼리 실행 -->
<!-- 반대로 max-width는 이하일 때 실행 -->
외부 CSS 파일 연결(링크 방식)
웹 문서에 직접 정의
링크 방식
link 태그로 연결하여 적용<link rel=“stylesheet” media=“미디어 쿼리 조건” href=“css_파일_경로”>
<!-- 중간에 있는 조건을 만족하면 css파일 경로에서 css 파일을 열어서 적용 -->@import문
- style /style 태그 사이에서 사용
@import url(“css_파일_경로”) 미디어_쿼리_조건
/* 뒤에 있는 조건을 만족하면 css파일 경로에서 css 파일을 열어서 적용 */
<style media="조건"> {
// 스타일 작성
}
</style>
사용 방법
<style media="screen and (max-width:320px)">
body {
background: orange;
}
</style>
<style>
@media 조건 {
// 스타일 작성
}
</style>
사용 방법
<style>
@media screen and (max-width:320px) {
body {
background: orange;
}
}
</style>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>반응형 메뉴</title>
<link rel="stylesheet" media="screen" href="./topmenu.css" />
<script src="https://kit.fontawesome.com/d8399212df.js" crossorigin="anonymous"></script>
</head>
<body>
<div class="menubar">
<div class="logo">
<a href="#">
<img src="../medias/tangerines.jpg" alt="" />
<!-- <i class="fa-regular fa-lemon"></i> <b>Lemon</b> -->
</a>
</div>
<ul class="menulist">
<li><a href="#">Home</a></li>
<li><a href="#">Menu1</a></li>
<li><a href="#">Menu2</a></li>
<li><a href="#">Menu3</a></li>
</ul>
<a href="#" class="hamBtn">
<i class="fa-solid fa-bars"></i>
</a>
</div>
</body>
</html>/* 전체 태그 초기화 */
* {
margin: 0;
padding: 0;
}
/* a 태그 밑줄 제거 */
a {
text-decoration: none;
color: olive;
}
.logo a {
float: left;
padding-left: 30px;
font-size: 30px;
}
.logo img {
width: 120px;
vertical-align: middle;
}
.menubar {
overflow: hidden;
}
.menulist {
list-style-type: none;
overflow: hidden;
float: left;
margin-left: 20px;
}
.menubar {
height: 100px;
line-height: 100px;
background: papayawhip;
}
.menulist li {
float: left;
font-size: 30px;
padding: 0 20px;
font-weight: bold;
}
.hamBtn {
float: right;
padding-right: 20px;
font-size: 30px;
display: none;
}
/* 태블릿 사이즈인 경우 */
@media screen and (max-width: 768px) {
/* 메뉴 리스트 제거 */
.menulist {
display: none;
}
/* 햄버거 메뉴 출력 */
.hamBtn {
display: block;
}
}