Search
Duplicate

@ ๊ทœ์น™ (At-rules)

CSS @ ๊ทœ์น™ (At-rules)

ํŠน์ • ๊ทœ์น™์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ง€์‹œํ•˜๋Š” ๋ฌธ์žฅ์ž…๋‹ˆ๋‹ค.
@ ๊ธฐํ˜ธ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, ๊ทธ ๋’ค์— ๊ทœ์น™ ์œ ํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” ์‹๋ณ„์ž๊ฐ€ ๋”ฐ๋ผ์˜ต๋‹ˆ๋‹ค.

์ฃผ์š” @ ๊ทœ์น™

@import

๋‹ค๋ฅธ ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ํ˜„์žฌ ์Šคํƒ€์ผ์‹œํŠธ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
@import url('styles.css'); @import url('print.css') print;
CSS
๋ณต์‚ฌ

@media (๋ฏธ๋””์–ด ์ฟผ๋ฆฌ)

ํŠน์ • ๋ฏธ๋””์–ด ์กฐ๊ฑด์— ๋”ฐ๋ผ ์Šคํƒ€์ผ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜์‘ํ˜• ์›น ๋””์ž์ธ์˜ ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค.
@media screen and (max-width: 768px) { .container { width: 100%; } }
CSS
๋ณต์‚ฌ

@font-face

์›น ํฐํŠธ๋ฅผ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ ๊ธ€๊ผด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
@font-face { font-family: 'MyFont'; src: url('myfont.woff2') format('woff2'); }
CSS
๋ณต์‚ฌ

4. @keyframes

CSS ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ์ค‘๊ฐ„ ๋‹จ๊ณ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
@keyframes slide { from { transform: translateX(0); } to { transform: translateX(100px); } }
CSS
๋ณต์‚ฌ

@charset

์Šคํƒ€์ผ์‹œํŠธ์˜ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
@charset "UTF-8";
CSS
๋ณต์‚ฌ

@supports

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŠน์ • CSS ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
@supports (display: grid) { .container { display: grid; } }
CSS
๋ณต์‚ฌ

๋ฐ˜์‘ํ˜• ์›น ๋””์ž์ธ

๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์™€ ํ™”๋ฉด ํฌ๊ธฐ์— ๋งž์ถฐ ๋ ˆ์ด์•„์›ƒ์ด ์ž๋™์œผ๋กœ ์กฐ์ •๋˜๋Š” ์›น ๋””์ž์ธ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ฐœ๋…

๋ทฐํฌํŠธ (Viewport)

๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์—์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”ํƒ€ ํƒœ๊ทธ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
<meta name="viewport" content="width=device-width, initial-scale=1.0">
HTML
๋ณต์‚ฌ

๋ฏธ๋””์–ด ์ฟผ๋ฆฌ (Media Queries)

ํ™”๋ฉด ํฌ๊ธฐ, ํ•ด์ƒ๋„, ๋ฐฉํ–ฅ ๋“ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์Šคํƒ€์ผ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ

๋””๋ฐ”์ด์Šค ์œ ํ˜•
ํ™”๋ฉด ํฌ๊ธฐ ๋ฒ”์œ„
๋ฏธ๋””์–ด ์ฟผ๋ฆฌ
์„ค๋ช…
๋ชจ๋ฐ”์ผ (์†Œํ˜•)
0px ~ 575px
@media (max-width: 575px)
์Šค๋งˆํŠธํฐ ์„ธ๋กœ ๋ชจ๋“œ
๋ชจ๋ฐ”์ผ (๋Œ€ํ˜•)
576px ~ 767px
@media (min-width: 576px)
๋Œ€ํ˜• ์Šค๋งˆํŠธํฐ
ํƒœ๋ธ”๋ฆฟ (์„ธ๋กœ)
768px ~ 991px
@media (min-width: 768px)
ํƒœ๋ธ”๋ฆฟ ์„ธ๋กœ ๋ชจ๋“œ, ์†Œํ˜• ๋…ธํŠธ๋ถ
ํƒœ๋ธ”๋ฆฟ (๊ฐ€๋กœ)
992px ~ 1199px
@media (min-width: 992px)
ํƒœ๋ธ”๋ฆฟ ๊ฐ€๋กœ ๋ชจ๋“œ, ์ค‘ํ˜• ๋ฐ์Šคํฌํ†ฑ
๋ฐ์Šคํฌํ†ฑ
1200px ~ 1399px
@media (min-width: 1200px)
์ผ๋ฐ˜ ๋ฐ์Šคํฌํ†ฑ
๋Œ€ํ˜• ๋ฐ์Šคํฌํ†ฑ
1400px ์ด์ƒ
@media (min-width: 1400px)
๊ณ ํ•ด์ƒ๋„ ๋Œ€ํ˜• ๋ชจ๋‹ˆํ„ฐ
๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ์˜ˆ์ œ:
/* ๋ชจ๋ฐ”์ผ ์šฐ์„  (Mobile First) */ .container { width: 100%; padding: 10px; } /* ํƒœ๋ธ”๋ฆฟ */ @media (min-width: 768px) { .container { width: 750px; margin: 0 auto; } } /* ๋ฐ์Šคํฌํ†ฑ */ @media (min-width: 1024px) { .container { width: 960px; } } /* ๊ณ ํ•ด์ƒ๋„ ๋ฐ์Šคํฌํ†ฑ */ @media (min-width: 1200px) { .container { width: 1140px; } }
CSS
๋ณต์‚ฌ

์œ ์—ฐํ•œ ๊ทธ๋ฆฌ๋“œ (Flexible Grid)

๊ณ ์ •๋œ ํ”ฝ์…€ ๋‹จ์œ„ ๋Œ€์‹  ๋ฐฑ๋ถ„์œจ, em, rem ๋“ฑ ์ƒ๋Œ€์  ๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
.row { display: flex; flex-wrap: wrap; } .col { flex: 1; min-width: 0; } /* ๋˜๋Š” CSS Grid ์‚ฌ์šฉ */ .grid-container { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; }
CSS
๋ณต์‚ฌ

์œ ์—ฐํ•œ ์ด๋ฏธ์ง€

์ด๋ฏธ์ง€๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
img { max-width: 100%; height: auto; display: block; }
CSS
๋ณต์‚ฌ

๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ „๋žต

๋ชจ๋ฐ”์ผ ์šฐ์„  (Mobile First)

์ž‘์€ ํ™”๋ฉด์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๊ณ  ํฐ ํ™”๋ฉด์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
/* ๊ธฐ๋ณธ ์Šคํƒ€์ผ (๋ชจ๋ฐ”์ผ) */ .header { font-size: 16px; } /* ํฐ ํ™”๋ฉด์œผ๋กœ ํ™•์žฅ */ @media (min-width: 768px) { .header { font-size: 20px; } }
CSS
๋ณต์‚ฌ

๋ฐ์Šคํฌํ†ฑ ์šฐ์„  (Desktop First)

ํฐ ํ™”๋ฉด์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๊ณ  ์ž‘์€ ํ™”๋ฉด์œผ๋กœ ์ถ•์†Œํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
/* ๊ธฐ๋ณธ ์Šคํƒ€์ผ (๋ฐ์Šคํฌํ†ฑ) */ .header { font-size: 20px; } /* ์ž‘์€ ํ™”๋ฉด์œผ๋กœ ์ถ•์†Œ */ @media (max-width: 767px) { .header { font-size: 16px; } }
CSS
๋ณต์‚ฌ

๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ์กฐ๊ฑด

ํ™”๋ฉด ํฌ๊ธฐ

@media (min-width: 768px) { } @media (max-width: 1023px) { } @media (min-width: 768px) and (max-width: 1023px) { }
CSS
๋ณต์‚ฌ

ํ™”๋ฉด ๋ฐฉํ–ฅ

@media (orientation: portrait) { /* ์„ธ๋กœ ๋ชจ๋“œ */ } @media (orientation: landscape) { /* ๊ฐ€๋กœ ๋ชจ๋“œ */ }
CSS
๋ณต์‚ฌ

ํ•ด์ƒ๋„

@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { /* ๋ ˆํ‹ฐ๋‚˜ ๋””์Šคํ”Œ๋ ˆ์ด์šฉ ๊ณ ํ•ด์ƒ๋„ ์ด๋ฏธ์ง€ */ .logo { background-image: url('logo@2x.png'); } }
CSS
๋ณต์‚ฌ

๋ฏธ๋””์–ด ํƒ€์ž…

@media screen { } @media print { } @media speech { }
CSS
๋ณต์‚ฌ

์‹ค์ „ ์˜ˆ์ œ

๋ฐ˜์‘ํ˜• ๋„ค๋น„๊ฒŒ์ด์…˜

/* ๋ชจ๋ฐ”์ผ: ํ–„๋ฒ„๊ฑฐ ๋ฉ”๋‰ด */ .nav-menu { display: none; } .nav-toggle { display: block; } .nav-menu.active { display: flex; flex-direction: column; } /* ๋ฐ์Šคํฌํ†ฑ: ๊ฐ€๋กœ ๋ฉ”๋‰ด */ @media (min-width: 768px) { .nav-menu { display: flex; flex-direction: row; } .nav-toggle { display: none; } }
CSS
๋ณต์‚ฌ

๋ฐ˜์‘ํ˜• ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ

/* ๊ธฐ๋ณธ ํฐํŠธ ํฌ๊ธฐ */ html { font-size: 16px; } h1 { font-size: 2rem; /* 32px */ } /* ํƒœ๋ธ”๋ฆฟ */ @media (min-width: 768px) { html { font-size: 18px; } } /* ๋ฐ์Šคํฌํ†ฑ */ @media (min-width: 1024px) { html { font-size: 20px; } } /* ๋˜๋Š” clamp() ํ•จ์ˆ˜ ์‚ฌ์šฉ */ h1 { font-size: clamp(1.5rem, 5vw, 3rem); }
CSS
๋ณต์‚ฌ

CSS Grid์™€ Flexbox๋ฅผ ํ™œ์šฉํ•œ ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ

Flexbox ์˜ˆ์ œ

.container { display: flex; flex-wrap: wrap; gap: 20px; } .item { flex: 1 1 300px; /* ์ตœ์†Œ 300px, ๊ณต๊ฐ„์ด ์žˆ์œผ๋ฉด ํ™•์žฅ */ }
CSS
๋ณต์‚ฌ

Grid ์˜ˆ์ œ

.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 20px; } /* ๋ช…์‹œ์  ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ */ @media (min-width: 768px) { .grid { grid-template-columns: repeat(2, 1fr); } } @media (min-width: 1024px) { .grid { grid-template-columns: repeat(3, 1fr); } }
CSS
๋ณต์‚ฌ

์ปจํ…Œ์ด๋„ˆ ์ฟผ๋ฆฌ (@container)

์ตœ์‹  CSS ๊ธฐ๋Šฅ์œผ๋กœ, ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์Šคํƒ€์ผ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
.container { container-type: inline-size; container-name: card; } @container card (min-width: 400px) { .card-content { display: grid; grid-template-columns: 1fr 2fr; } }
CSS
๋ณต์‚ฌ

๋ฐ˜์‘ํ˜• ๋””์ž์ธ Best Practices

ํ•ญ๋ชฉ
๋‚ด์šฉ
๋ชจ๋ฐ”์ผ ์šฐ์„  ์ ‘๊ทผ
์ž‘์€ ํ™”๋ฉด๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ ์ง„์ ์œผ๋กœ ํ™•์žฅ
ํ„ฐ์น˜ ์นœํ™”์  UI
๋ฒ„ํŠผ๊ณผ ๋งํฌ๋Š” ์ตœ์†Œ 44x44px ํฌ๊ธฐ ์œ ์ง€
์ ์ ˆํ•œ ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ
์ฝ˜ํ…์ธ  ๊ธฐ๋ฐ˜์œผ๋กœ ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ ์„ค์ •
์„ฑ๋Šฅ ์ตœ์ ํ™”
ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋ฆฌ์†Œ์Šค ๋กœ๋“œ
ํ…Œ์ŠคํŠธ
๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์™€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ…Œ์ŠคํŠธ
์ ‘๊ทผ์„ฑ
ํ‚ค๋ณด๋“œ ๋„ค๋น„๊ฒŒ์ด์…˜๊ณผ ์Šคํฌ๋ฆฐ ๋ฆฌ๋” ์ง€์›

์œ ์šฉํ•œ ๋‹จ์œ„

๋‹จ์œ„
์„ค๋ช…
vw, vh
๋ทฐํฌํŠธ ๋„ˆ๋น„/๋†’์ด์˜ 1%
%
๋ถ€๋ชจ ์š”์†Œ ๊ธฐ์ค€ ์ƒ๋Œ€ ํฌ๊ธฐ
em
๋ถ€๋ชจ ์š”์†Œ์˜ ํฐํŠธ ํฌ๊ธฐ ๊ธฐ์ค€
rem
๋ฃจํŠธ(html) ์š”์†Œ์˜ ํฐํŠธ ํฌ๊ธฐ ๊ธฐ์ค€
fr
Grid์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋น„์œจ ๋‹จ์œ„