CSS 컨ν μ΄λ 쿼리 ν¬κΈ° κ³μ°μ λν μ¬μΈ΅ λΆμ. 컨ν μ΄λ μ°¨μ μ°μ λ°©λ²μ νꡬνκ³ , λ€μν κΈ°κΈ° λ° μ»¨ν μ€νΈμ λ§λ λ°μν μΉ λμμΈμ μν μ€μ©μ μΈ μμ λ₯Ό μ 곡ν©λλ€.
CSS 컨ν μ΄λ 쿼리 ν¬κΈ° κ³μ°: 컨ν μ΄λ μ°¨μ μ°μ
컨ν μ΄λ 쿼리λ λ·°ν¬νΈκ° μλ 컨ν μ΄λμ ν¬κΈ°μ λ°λΌ μμκ° μ μνλλ‘ νμ¬ λ°μν μΉ λμμΈμ νλͺ μ μΌμΌν€κ³ μμ΅λλ€. 컨ν μ΄λ μ°¨μμ΄ μ΄λ»κ² μ°μ λλμ§ μ΄ν΄νλ κ²μ μ΄ κΈ°λ₯μ νμ ν¨κ³Όμ μΌλ‘ νμ©νλ λ° λ§€μ° μ€μν©λλ€. μ΄ μ’ ν© κ°μ΄λμμλ 컨ν μ΄λ ν¬κΈ° κ³μ°μ 볡μ‘μ±μ νꡬνκ³ , κΈλ‘λ² μ»¨ν μ€νΈμ μ μ© κ°λ₯ν μ€μ©μ μΈ μμ λ₯Ό μ 곡ν©λλ€.
컨ν μ΄λ 쿼리λ 무μμΈκ°? κ°λ¨ν μμ½
κΈ°μ‘΄μ λ―Έλμ΄ μΏΌλ¦¬λ μ μ©ν μ€νμΌμ κ²°μ νκΈ° μν΄ λ·°ν¬νΈ ν¬κΈ°μ μμ‘΄ν©λλ€. λ°λ©΄, 컨ν μ΄λ 쿼리λ νΉμ μ‘°μ μμ, μ¦ μ»¨ν μ΄λμ μ°¨μμ κΈ°λ°μΌλ‘ μ€νμΌμ μ μ©ν μ μκ² ν΄μ€λλ€. μ΄λ λ μΈλΆνλκ³ μ»¨ν μ€νΈλ₯Ό μΈμνλ λ°μν λμμ κ°λ₯νκ² νλ©°, νΉν λ ν° λ μ΄μμ λ΄μ μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈμ μ μ©ν©λλ€.
μΉ΄λ μ»΄ν¬λνΈκ° μλ μλ리μ€λ₯Ό μκ°ν΄ 보μμμ€. λ―Έλμ΄ μΏΌλ¦¬λ₯Ό μ¬μ©νλ©΄ μΉ΄λμ λͺ¨μμ΄ λ·°ν¬νΈ λλΉμ λ°λΌ λ³κ²½λ©λλ€. 컨ν μ΄λ 쿼리λ₯Ό μ¬μ©νλ©΄ μΉ΄λμ λͺ¨μμ΄ μ 체 λ·°ν¬νΈ ν¬κΈ°μ κ΄κ³μμ΄ μΉ΄λκ° μμΉν 컨ν μ΄λμ λλΉμ λ°λΌ λ³κ²½λ©λλ€. μ΄λ‘ μΈν΄ μ»΄ν¬λνΈλ ν¨μ¬ λ μ μ°ν΄μ§κ³ λ€μν λ μ΄μμμμ μ¬μ¬μ©νκΈ° μ¬μμ§λλ€.
ν¬ν¨ 컨ν μ€νΈ μ μνκΈ°
ν¬κΈ° κ³μ°μ λν΄ μμ보기 μ μ, ν¬ν¨ 컨ν
μ€νΈλ₯Ό μ€μ νλ λ°©λ²μ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€. μ΄λ container-type λ° container-name μμ±μ μ¬μ©νμ¬ μνλ©λλ€.
container-type
container-type μμ±μ ν¬ν¨ μ νμ μ μν©λλ€. λ€μκ³Ό κ°μ κ°μ κ°μ§ μ μμ΅λλ€:
size: ν¬κΈ° ν¬ν¨μ μ€μ ν©λλ€. 컨ν μ΄λμ μΈλΌμΈ ν¬κΈ°(κ°λ‘ μ°κΈ° λͺ¨λμμλ λλΉ, μΈλ‘ μ°κΈ° λͺ¨λμμλ λμ΄)κ° μ»¨ν μ΄λ 쿼리μ κΈ°μ€μ΄ λ©λλ€. μ΄κ²μ΄ ν¬κΈ° κΈ°λ° κ³μ°μ κ°μ₯ μΌλ°μ μ΄κ³ κ΄λ ¨μ±μ΄ λμ μ νμ λλ€.inline-size:sizeμ λμΌνλ©°, λͺ μμ μΌλ‘ μΈλΌμΈ ν¬κΈ° ν¬ν¨μ μ§μ ν©λλ€.layout: λ μ΄μμ ν¬ν¨μ μ€μ ν©λλ€. 컨ν μ΄λλ μλ‘μ΄ μμ μ§μ 컨ν μ€νΈλ₯Ό μμ±νμ¬ νμ μμκ° μ£Όλ³ λ μ΄μμμ μν₯μ λ―ΈμΉλ κ²μ λ°©μ§ν©λλ€. μ΄λ ν¬κΈ° κ³μ°μ μ§μ μ μΈ μν₯μ λ―ΈμΉμ§λ μμ§λ§ 컨ν μ΄λμ μ¬μ© κ°λ₯ν 곡κ°μ μν₯μ μ€ μ μμ΅λλ€.style: μ€νμΌ ν¬ν¨μ μ€μ ν©λλ€. 컨ν μ΄λμ μμ± λ³κ²½μ 컨ν μ΄λ μΈλΆμ μ€νμΌμ μν₯μ μ£Όμ§ μμ΅λλ€.layoutκ³Ό λ§μ°¬κ°μ§λ‘ ν¬κΈ° κ³μ°μ μ§μ μ μΈ μν₯μ λ―ΈμΉμ§ μμ΅λλ€.paint: νμΈνΈ ν¬ν¨μ μ€μ ν©λλ€. 컨ν μ΄λλ μ€ννΉ μ»¨ν μ€νΈλ₯Ό μμ±νκ³ νμ μμκ° κ²½κ³ λ°μΌλ‘ νμΈν λλ κ²μ λ°©μ§ν©λλ€. λ€μ λ§νμ§λ§, ν¬κΈ° κ³μ° μ체μλ μ§μ μ μΈ κ΄λ ¨μ΄ μμ΅λλ€.content: λ μ΄μμ, μ€νμΌ, νμΈνΈ ν¬ν¨μ μ€μ ν©λλ€.normal: μμκ° μ»¨ν μ΄λκ° μλλλ€.
ν¬κΈ° κ³μ°μ μ΄μ μ λ§μΆκΈ° μν΄, μ°λ¦¬λ μ£Όλ‘ container-type: size;μ container-type: inline-size;λ₯Ό μ¬μ©ν κ²μ
λλ€.
container-name
container-name μμ±μ 컨ν
μ΄λμ μ΄λ¦μ ν λΉν©λλ€. μ΄λ₯Ό ν΅ν΄ 컨ν
μ΄λ 쿼리λ₯Ό μμ±ν λ νΉμ 컨ν
μ΄λλ₯Ό νκ²ν
ν μ μμΌλ©°, νΉν νμ΄μ§μ μ¬λ¬ 컨ν
μ΄λκ° μμ λ μ μ©ν©λλ€.
μμ :
.card-container {
container-type: size;
container-name: card;
}
@container card (min-width: 300px) {
.card-content {
font-size: 1.2em;
}
}
μ΄ μμ μμ .card-container μμλ "card"λΌλ μ΄λ¦μ ν¬κΈ° 컨ν
μ΄λλ‘ μ μλ©λλ€. κ·Έλ° λ€μ 컨ν
μ΄λ 쿼리λ μ΄ νΉμ 컨ν
μ΄λλ₯Ό νκ²ν
νκ³ μ»¨ν
μ΄λμ λλΉκ° 300px μ΄μμΌ λ .card-contentμ μ€νμΌμ μ μ©ν©λλ€.
컨ν μ΄λ μ°¨μ μ°μ : ν΅μ¬ μ리
컨ν μ΄λ 쿼리 ν¬κΈ° κ³μ°μ κΈ°λ³Έ μ리λ 컨ν μ΄λ 쿼리λ₯Ό νκ°νλ λ° μ¬μ©λλ μ°¨μμ΄ μ»¨ν μ΄λμ μ½ν μΈ λ°μ€ μ°¨μμ΄λΌλ κ²μ λλ€. μ΄λ λ€μμ μλ―Έν©λλ€:
- μ¬μ©λλ λλΉλ 컨ν μ΄λ λ΄λΆμ μ½ν μΈ μμ λλΉμ΄λ©°, ν¨λ©, ν λ리, λ§μ§μ μ μΈλ©λλ€.
- μ¬μ©λλ λμ΄λ 컨ν μ΄λ λ΄λΆμ μ½ν μΈ μμ λμ΄μ΄λ©°, ν¨λ©, ν λ리, λ§μ§μ μ μΈλ©λλ€.
컨ν μ΄λμ ν¬κΈ°μ μν₯μ μ€ μ μλ λ€μν CSS μμ±κ³Ό ν¨κ» μ΄κ²μ΄ μ΄λ»κ² μλνλμ§ λΆμν΄ λ³΄κ² μ΅λλ€:
1. λͺ μμ λλΉμ λμ΄
컨ν
μ΄λμ λͺ
μμ μΌλ‘ μ μλ width λλ heightκ° μλ κ²½μ°, μ΄ κ°λ€(box-sizingμ κ³ λ €ν ν)μ΄ μ½ν
μΈ λ°μ€ μ°¨μμ μ§μ μ μΈ μν₯μ λ―ΈμΉ©λλ€.
μμ :
.container {
width: 500px;
padding: 20px;
border: 5px solid black;
box-sizing: border-box;
container-type: size;
}
μ΄ κ²½μ° box-sizing: border-box;κ° μ€μ λμ΄ μκΈ° λλ¬Έμ, 컨ν
μ΄λμ μ΄ λλΉ(ν¨λ© λ° ν
λ리 ν¬ν¨)λ 500pxμ
λλ€. 컨ν
μ΄λ 쿼리μ μ¬μ©λλ μ½ν
μΈ λ°μ€ λλΉλ λ€μκ³Ό κ°μ΄ κ³μ°λ©λλ€:
μ½ν μΈ λ°μ€ λλΉ = λλΉ - padding-left - padding-right - border-left - border-right
μ½ν μΈ λ°μ€ λλΉ = 500px - 20px - 20px - 5px - 5px = 450px
λ°λΌμ, 컨ν μ΄λ 쿼리λ 450pxμ λλΉλ₯Ό κΈ°μ€μΌλ‘ νκ°λ©λλ€.
λ§μ½ box-sizing: content-box;(κΈ°λ³Έκ°)κ° λμ μ€μ λμλ€λ©΄, μ½ν
μΈ λ°μ€ λλΉλ 500pxκ° λκ³ μ»¨ν
μ΄λμ μ΄ λλΉλ 550pxκ° λ©λλ€.
2. μλ λλΉμ λμ΄
컨ν
μ΄λμ λλΉλ λμ΄κ° autoλ‘ μ€μ λλ©΄, λΈλΌμ°μ λ μ½ν
μΈ μ μ¬μ© κ°λ₯ν 곡κ°μ κΈ°λ°μΌλ‘ μ°¨μμ κ³μ°ν©λλ€. μ΄ κ³μ°μ 컨ν
μ΄λμ λμ€νλ μ΄ μ ν(μ: block, inline-block, flex, grid)κ³Ό λΆλͺ¨μ λ μ΄μμμ λ°λΌ λ 볡μ‘ν΄μ§ μ μμ΅λλ€.
λΈλ‘ λ 벨 μμ: width: auto;λ₯Ό κ°μ§ λΈλ‘ λ 벨 μμμ κ²½μ°, λλΉλ μΌλ°μ μΌλ‘ λΆλͺ¨ 컨ν
μ΄λ λ΄μ μ¬μ© κ°λ₯ν μν 곡κ°μ μ±μ°λλ‘ νμ₯λ©λλ€(λ§μ§ μ μΈ). λμ΄λ μμ λ΄μ μ½ν
μΈ μ μν΄ κ²°μ λ©λλ€.
μΈλΌμΈ λΈλ‘ μμ: width: auto;μ height: auto;λ₯Ό κ°μ§ μΈλΌμΈ λΈλ‘ μμμ κ²½μ°, μ°¨μμ μ½ν
μΈ μ μν΄ κ²°μ λ©λλ€. μμλ μ½ν
μΈ μ λ§κ² μΆμλ©λλ€.
Flexbox λ° Grid 컨ν
μ΄λ: Flexboxμ Grid 컨ν
μ΄λλ λ μ κ΅ν λ μ΄μμ μκ³ λ¦¬μ¦μ κ°μ§λλ€. μμ μμμ μ°¨μκ³Ό flex-grow, flex-shrink, grid-template-columns, grid-template-rowsμ κ°μ μμ±λ€μ΄ 컨ν
μ΄λμ ν¬κΈ°μ μν₯μ λ―ΈμΉ©λλ€.
μμ (Flexboxλ₯Ό μ¬μ©ν μλ λλΉ):
.container {
display: flex;
flex-direction: row;
width: auto;
container-type: size;
}
.item {
flex: 1;
min-width: 100px;
}
μ΄ μμ μμ .containerλ width: auto;λ₯Ό κ°μ§λλ€. κ·Έ λλΉλ μ¬μ© κ°λ₯ν 곡κ°κ³Ό μμ μμμ flex μμ±μ μν΄ κ²°μ λ©λλ€. λ§μ½ λΆλͺ¨ 컨ν
μ΄λμ λλΉκ° 600pxμ΄κ³ , flex: 1;κ³Ό min-width: 100px;λ₯Ό κ°μ§ .item μμκ° λ κ° μλ€λ©΄, 컨ν
μ΄λμ λλΉλ 600pxκ° λ κ°λ₯μ±μ΄ λμ΅λλ€(컨ν
μ΄λ μ체μ ν¨λ©/ν
λ리 μ μΈ).
3. Min-Widthμ Max-Width
min-widthμ max-width μμ±μ 컨ν
μ΄λμ λλΉλ₯Ό μ νν©λλ€. μ€μ λλΉλ μΌλ°μ μΈ λλΉ κ³μ°μ κ²°κ³Όμ΄λ©°, min-widthμ max-width κ° μ¬μ΄λ‘ μ νλ©λλ€.
μμ :
.container {
width: auto;
min-width: 300px;
max-width: 800px;
container-type: size;
}
μ΄ κ²½μ°, 컨ν μ΄λμ λλΉλ μ¬μ© κ°λ₯ν 곡κ°μ μ±μ°λλ‘ νμ₯λμ§λ§, 300pxλ³΄λ€ μμμ§κ±°λ 800pxλ³΄λ€ μ»€μ§μ§λ μμ΅λλ€. 컨ν μ΄λ 쿼리λ μ΄ μ νλ λλΉλ₯Ό κΈ°μ€μΌλ‘ νκ°λ©λλ€.
4. λ°±λΆμ¨ λλΉ
컨ν μ΄λκ° λ°±λΆμ¨ λλΉλ₯Ό κ°μ§ λ, λλΉλ ν¬ν¨νλ λΈλ‘μ λλΉμ λν λ°±λΆμ¨λ‘ κ³μ°λ©λλ€. μ΄λ λ°μν λ μ΄μμμ λ§λλ μΌλ°μ μΈ κΈ°μ μ λλ€.
μμ :
.container {
width: 80%;
container-type: size;
}
λ§μ½ ν¬ν¨νλ λΈλ‘μ λλΉκ° 1000pxλΌλ©΄, 컨ν μ΄λμ λλΉλ 800pxκ° λ©λλ€. κ·Έλ¬λ©΄ 컨ν μ΄λ 쿼리λ μ΄ κ³μ°λ λλΉλ₯Ό κΈ°μ€μΌλ‘ νκ°λ©λλ€.
5. contain μμ±
μ§μ μ μΌλ‘ *ν¬κΈ°* κ³μ°μ μν₯μ λ―ΈμΉμ§λ μμ§λ§, contain μμ±μ 컨ν
μ΄λμ κ·Έ νμ μμμ λ μ΄μμ λ° λ λλ§μ μλΉν μν₯μ λ―ΈμΉ©λλ€. contain: layout;, contain: paint;, λλ contain: content;λ₯Ό μ¬μ©νλ©΄ 컨ν
μ΄λμ κ·Έ μμλ€μ 격리νμ¬ μ±λ₯κ³Ό μμΈ‘ κ°λ₯μ±μ ν₯μμν¬ μ μμ΅λλ€. μ΄λ¬ν 격리λ κ°μ μ μΌλ‘ 컨ν
μ΄λμ μ¬μ© κ°λ₯ν 곡κ°μ μν₯μ μ€ μ μμΌλ©°, λ°λΌμ λλΉλ λμ΄κ° `auto`λ‘ μ€μ λ κ²½μ° μ΅μ’
ν¬κΈ°μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
container-typeμ λ ꡬ체μ μΈ contain κ°μ΄ μ΄λ―Έ μ€μ λμ΄ μμ§ μμ κ²½μ° μμμ μΌλ‘ contain: size;λ₯Ό μ€μ νλ€λ μ μ μ μνλ κ²μ΄ μ€μν©λλ€. μ΄λ 컨ν
μ΄λμ ν¬κΈ°κ° λΆλͺ¨ λ° νμ μμμ λ
립μ μ΄ λλλ‘ λ³΄μ₯νμ¬ μ»¨ν
μ΄λ 쿼리λ₯Ό μ λ’°ν μ μκ² λ§λλλ€.
λ€μν λ μ΄μμμ κ±ΈμΉ μ€μ©μ μΈ μμ
λ€μν λ μ΄μμ μλ리μ€μμ 컨ν μ΄λ 쿼리 ν¬κΈ° κ³μ°μ΄ μ΄λ»κ² μλνλμ§ λͺ κ°μ§ μ€μ©μ μΈ μμ λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
μμ 1: 그리λ λ μ΄μμμ μΉ΄λ μ»΄ν¬λνΈ
그리λ λ μ΄μμ λ΄μ νμλλ μΉ΄λ μ»΄ν¬λνΈλ₯Ό μμν΄ λ³΄μμμ€. μ°λ¦¬λ μΉ΄λμ λͺ¨μμ΄ κ·Έλ¦¬λ λ΄μμμ λλΉμ λ°λΌ μ μνκΈ°λ₯Ό μν©λλ€.
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
}
.card {
container-type: size;
padding: 15px;
border: 1px solid #ccc;
}
.card h2 {
font-size: 1.2em;
}
@container (max-width: 350px) {
.card h2 {
font-size: 1em;
}
}
μ΄ μμ μμ .grid-containerλ λ°μν 그리λ λ μ΄μμμ μμ±ν©λλ€. .card μμλ ν¬κΈ° 컨ν
μ΄λμ
λλ€. 컨ν
μ΄λ 쿼리λ μΉ΄λμ λλΉκ° 350px μ΄νμΈμ§ νμΈν©λλ€. λ§μ½ κ·Έλ λ€λ©΄, μΉ΄λ λ΄μ h2 μμμ κΈκΌ΄ ν¬κΈ°κ° μ€μ΄λλλ€. μ΄λ₯Ό ν΅ν΄ μΉ΄λλ 그리λ λ΄μμ μ¬μ© κ°λ₯ν 곡κ°μ λ°λΌ μ½ν
μΈ λ₯Ό μ‘°μ ν μ μμ΅λλ€.
μμ 2: μ¬μ΄λλ° λ΄λΉκ²μ΄μ
μ¬μ© κ°λ₯ν λλΉμ λ°λΌ λ μ΄μμμ μ‘°μ ν΄μΌ νλ μ¬μ΄λλ° λ΄λΉκ²μ΄μ μ»΄ν¬λνΈλ₯Ό μκ°ν΄ 보μμμ€.
.sidebar {
width: 250px;
container-type: size;
background-color: #f0f0f0;
padding: 10px;
}
.sidebar ul {
list-style: none;
padding: 0;
}
.sidebar li {
margin-bottom: 5px;
}
.sidebar a {
display: block;
padding: 8px;
text-decoration: none;
color: #333;
}
@container (max-width: 200px) {
.sidebar a {
text-align: center;
padding: 5px;
}
}
μ΄ μμ μμ .sidebarλ 250pxμ κ³ μ λλΉλ₯Ό κ°μ§ ν¬κΈ° 컨ν
μ΄λμ
λλ€. 컨ν
μ΄λ 쿼리λ μ¬μ΄λλ°μ λλΉκ° 200px μ΄νμΈμ§ νμΈν©λλ€. λ§μ½ κ·Έλ λ€λ©΄, μ¬μ΄λλ° λ΄ λ§ν¬μ ν
μ€νΈ μ λ ¬μ΄ μ€μμΌλ‘ λ³κ²½λκ³ ν¨λ©μ΄ μ€μ΄λλλ€. μ΄λ λ μμ νλ©΄μ΄λ λ μ’μ λ μ΄μμμ μ¬μ΄λλ°λ₯Ό μ μ©νλ λ° μ μ©ν μ μμ΅λλ€.
μμ 3: μ΄λ―Έμ§ ν¬κΈ° μ‘°μ
컨ν μ΄λ 쿼리λ 컨ν μ΄λ λ΄μ μ΄λ―Έμ§ ν¬κΈ°λ₯Ό μ‘°μ νλ λ°μλ μ¬μ©λ μ μμ΅λλ€.
.image-container {
width: 400px;
container-type: size;
}
.image-container img {
width: 100%;
height: auto;
}
@container (max-width: 300px) {
.image-container img {
max-height: 200px;
object-fit: cover;
}
}
μ¬κΈ°μ .image-containerλ ν¬κΈ° 컨ν
μ΄λμ
λλ€. 컨ν
μ΄λ 쿼리λ 컨ν
μ΄λμ λλΉκ° 300px μ΄νμΈμ§ νμΈν©λλ€. λ§μ½ κ·Έλ λ€λ©΄, μ΄λ―Έμ§μ max-heightκ° 200pxλ‘ μ€μ λκ³ , object-fit: cover;κ° μ μ©λμ΄ μ΄λ―Έμ§κ° κ°λ‘μΈλ‘ λΉμ¨μ μ곑νμ§ μκ³ μ¬μ© κ°λ₯ν 곡κ°μ μ±μ°λλ‘ ν©λλ€. μ΄λ₯Ό ν΅ν΄ λ€μν ν¬κΈ°μ 컨ν
μ΄λ λ΄μμ μ΄λ―Έμ§κ° νμλλ λ°©μμ μ μ΄ν μ μμ΅λλ€.
μ£μ§ μΌμ΄μ€ λ° μ μ¬μ ν¨μ λ€λ£¨κΈ°
컨ν μ΄λ 쿼리λ κ°λ ₯νμ§λ§, μ μ¬μ μΈ λ¬Έμ μ μ£μ§ μΌμ΄μ€λ₯Ό μΈμ§νλ κ²μ΄ μ€μν©λλ€.
1. μν μ’ μμ±
컨ν μ΄λ μΏΌλ¦¬κ° μ체 컨ν μ΄λμ ν¬κΈ°μ μν₯μ λ―ΈμΉλ μν μ’ μμ±μ λ§λ€μ§ λ§μμμ€. μ΄λ 무ν 루νλ μκΈ°μΉ μμ λμμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. λΈλΌμ°μ λ μ΄λ¬ν 루νλ₯Ό κΉ¨λ €κ³ μλνμ§λ§, κ·Έ κ²°κ³Όλ μμΈ‘ κ°λ₯νμ§ μμ μ μμ΅λλ€.
2. μ±λ₯ κ³ λ € μ¬ν
νΉν 볡μ‘ν κ³μ°κ³Ό ν¨κ» 컨ν μ΄λ 쿼리λ₯Ό κ³Όλνκ² μ¬μ©νλ©΄ μ±λ₯μ μν₯μ μ€ μ μμ΅λλ€. CSSλ₯Ό μ΅μ ννκ³ λΆνμν 컨ν μ΄λ 쿼리λ₯Ό νΌνμμμ€. λΈλΌμ°μ κ°λ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ±λ₯μ λͺ¨λν°λ§νκ³ μ μ¬μ μΈ λ³λͺ© νμμ μλ³νμμμ€.
3. μ€μ²© 컨ν μ΄λ
컨ν
μ΄λλ₯Ό μ€μ²©ν λ, μΏΌλ¦¬κ° μ΄λ€ 컨ν
μ΄λλ₯Ό νκ²ν
νλμ§ μ μνμμμ€. μλνμ§ μμ λΆμμ©μ νΌνκΈ° μν΄ container-nameμ μ¬μ©νμ¬ λμ 컨ν
μ΄λλ₯Ό λͺ
μμ μΌλ‘ μ§μ νμμμ€. λν, 컨ν
μ΄λ 쿼리λ DOM νΈλ¦¬μμ λ μλμ μλ νμ μμκ° μλ, 컨ν
μ΄λμ μ§κ³ μμμκ²λ§ μ μ©λλ€λ μ μ κΈ°μ΅νμμμ€.
4. λΈλΌμ°μ νΈνμ±
컨ν μ΄λ 쿼리μ ν¬κ² μμ‘΄νκΈ° μ μ λΈλΌμ°μ νΈνμ±μ νμΈνμμμ€. μ§μμ΄ λΉ λ₯΄κ² μ¦κ°νκ³ μμ§λ§, μ€λλ λΈλΌμ°μ λ μ§μνμ§ μμ μ μμ΅λλ€. μ€λλ λΈλΌμ°μ λ₯Ό μν΄ ν΄λ¦¬νμ μ¬μ©νκ±°λ λ체 μ€νμΌμ μ 곡νλ κ²μ κ³ λ €νμμμ€.
5. λμ μ½ν μΈ
컨ν μ΄λ λ΄μ μ½ν μΈ κ° λμ μΌλ‘ λ³κ²½λλ©΄(μ: JavaScriptλ₯Ό ν΅ν΄), 컨ν μ΄λμ ν¬κΈ°λ λ³κ²½λμ΄ μ»¨ν μ΄λ 쿼리λ₯Ό νΈλ¦¬κ±°ν μ μμ΅λλ€. JavaScript μ½λκ° μ΄λ¬ν λ³κ²½ μ¬νμ μ λλ‘ μ²λ¦¬νκ³ λ μ΄μμμ μ μ νκ² μ λ°μ΄νΈνλλ‘ νμμμ€. MutationObserverλ₯Ό μ¬μ©νμ¬ μ»¨ν μ΄λ μ½ν μΈ μ λ³κ²½μ κ°μ§νκ³ μ»¨ν μ΄λ 쿼리μ μ¬νκ°λ₯Ό νΈλ¦¬κ±°νλ κ²μ κ³ λ €νμμμ€.
컨ν μ΄λ 쿼리μ λν κΈλ‘λ² κ³ λ € μ¬ν
κΈλ‘λ² μ»¨ν μ€νΈμμ 컨ν μ΄λ 쿼리λ₯Ό μ¬μ©ν λ λ€μμ κ³ λ €νμμμ€:
- ν μ€νΈ λ°©ν₯ (RTL/LTR): 컨ν μ΄λ 쿼리λ μ£Όλ‘ μ»¨ν μ΄λμ μΈλΌμΈ ν¬κΈ°μ ν¨κ» μλν©λλ€. μ€νμΌμ΄ μΌμͺ½μμ μ€λ₯Έμͺ½(LTR) λ° μ€λ₯Έμͺ½μμ μΌμͺ½(RTL) ν μ€νΈ λ°©ν₯ λͺ¨λμ νΈνλλμ§ νμΈνμμμ€.
- κ΅μ ν (i18n): λ€λ₯Έ μΈμ΄λ ν μ€νΈ κΈΈμ΄κ° λ€λ₯Ό μ μμΌλ©°, μ΄λ 컨ν μ΄λ λ΄ μ½ν μΈ μ ν¬κΈ°μ μν₯μ μ€ μ μμ΅λλ€. λ€λ₯Έ μΈμ΄λ‘ 컨ν μ΄λ 쿼리λ₯Ό ν μ€νΈνμ¬ μ¬λ°λ₯΄κ² μ μνλμ§ νμΈνμμμ€.
- κΈκΌ΄ λ‘λ©: κΈκΌ΄ λ‘λ©μ 컨ν μ΄λ μ½ν μΈ μ μ΄κΈ° ν¬κΈ°μ μν₯μ μ€ μ μμ΅λλ€. κΈκΌ΄μ΄ λ‘λ©λλ λμ λ μ΄μμ μ΄λμ νΌνκΈ° μν΄ `font-display: swap;`μ μ¬μ©νλ κ²μ κ³ λ €νμμμ€.
- μ κ·Όμ±: 컨ν μ΄λ 쿼리 κΈ°λ°μ μ‘°μ μ΄ μ κ·Όμ±μ μ μ§νλλ‘ νμμμ€. μλ₯Ό λ€μ΄, μκ° μ₯μ κ° μλ μ¬μ©μκ° μ½κΈ° μ΄λ €μΈ μ λλ‘ κΈκΌ΄ ν¬κΈ°λ₯Ό μ€μ΄μ§ λ§μμμ€. νμ μ κ·Όμ± λꡬ λ° λ³΄μ‘° κΈ°μ λ‘ ν μ€νΈνμμμ€.
컨ν μ΄λ 쿼리 λλ²κΉ
컨ν μ΄λ 쿼리 λλ²κΉ μ λλλ‘ κΉλ€λ‘μΈ μ μμ΅λλ€. λ€μμ λͺ κ°μ§ μ μ©ν νμ λλ€:
- λΈλΌμ°μ κ°λ°μ λꡬ μ¬μ©: λλΆλΆμ μ΅μ λΈλΌμ°μ λ CSS κ²μ¬λ₯Ό μν νλ₯ν κ°λ°μ λꡬλ₯Ό μ 곡ν©λλ€. μ΄ λꡬλ₯Ό μ¬μ©νμ¬ μμμ κ³μ°λ μ€νμΌμ κ²μ¬νκ³ μ»¨ν μ΄λ μΏΌλ¦¬κ° μ¬λ°λ₯΄κ² μ μ©λκ³ μλμ§ νμΈνμμμ€.
- 컨ν μ΄λ μ°¨μ κ²μ¬: κ°λ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ»¨ν μ΄λμ μ½ν μΈ λ°μ€ μ°¨μμ κ²μ¬νμμμ€. μ΄λ νΉμ 컨ν μ΄λ μΏΌλ¦¬κ° νΈλ¦¬κ±°λκ±°λ νΈλ¦¬κ±°λμ§ μλ μ΄μ λ₯Ό μ΄ν΄νλ λ° λμμ΄ λ©λλ€.
- μκ°μ μ νΈ μΆκ°: λ μ΄μμμ μκ°ννκ³ λ¬Έμ λ₯Ό μλ³νλ λ° λμμ΄ λλλ‘ μ»¨ν μ΄λμ κ·Έ μμλ€μκ² μΌμμ μΌλ‘ μκ°μ μ νΈ(μ: ν λ리, λ°°κ²½μ)λ₯Ό μΆκ°νμμμ€.
- μ½μ λ‘κΉ
μ¬μ©: JavaScript μ½λμμ
console.log()λ¬Έμ μ¬μ©νμ¬ μ»¨ν μ΄λμ μ°¨μκ³Ό κ΄λ ¨ CSS μμ±μ κ°μ κΈ°λ‘νμμμ€. μ΄λ μκΈ°μΉ μμ λμμ μΆμ νλ λ° λμμ΄ λ μ μμ΅λλ€. - μ½λ λ¨μν: 볡μ‘ν 컨ν μ΄λ 쿼리 μ€μ μ λλ²κΉ νλ λ° μ΄λ €μμ΄ μλ€λ©΄, λΆνμν μμμ μ€νμΌμ μ κ±°νμ¬ μ½λλ₯Ό λ¨μνν΄ λ³΄μμμ€. μ΄λ λ¬Έμ λ₯Ό λΆλ¦¬νλ λ° λμμ΄ λ μ μμ΅λλ€.
컨ν μ΄λ 쿼리μ λ―Έλ
컨ν μ΄λ 쿼리λ μμ§ λΉκ΅μ μλ‘μ΄ κΈ°λ₯μ΄λ©°, κ·Έ κΈ°λ₯μ μμΌλ‘ νμ₯λ κ°λ₯μ±μ΄ λμ΅λλ€. λΈλΌμ°μ μ§μ κ°μ , λ μ κ΅ν 쿼리 쑰건, λ€λ₯Έ CSS κΈ°λ₯κ³Όμ κΈ΄λ°ν ν΅ν©μ κΈ°λν μ μμ΅λλ€.
κ²°λ‘
컨ν μ΄λ 쿼리 ν¬κΈ° κ³μ°μ μ΄ν΄νλ κ²μ μ§μ μΌλ‘ λ°μμ μ΄κ³ μ μ κ°λ₯ν μΉ λμμΈμ λ§λλ λ° νμμ μ λλ€. 컨ν μ΄λ μ°¨μμ μ리λ₯Ό λ§μ€ν°νκ³ μ μ¬μ μΈ ν¨μ μ κ³ λ €ν¨μΌλ‘μ¨, 컨ν μ΄λ 쿼리μ νμ νμ©νμ¬ μ μΈκ³ μ¬μ©μλ₯Ό λ§μ‘±μν€λ λ μ μ°νκ³ μ μ§λ³΄μνκΈ° μ¬μ°λ©° μ¬μ©μ μΉνμ μΈ μΉμ¬μ΄νΈλ₯Ό ꡬμΆν μ μμ΅λλ€. 컨ν μ€νΈ μΈμ μ€νμΌλ§μ νμ λ°μλ€μ΄κ³ 컨ν μ΄λ μΏΌλ¦¬λ‘ μλ‘μ΄ μ°¨μμ λ°μν λμμΈμ μ΄μ΄λ³΄μΈμ.