CSS Containment Level 3λ₯Ό νμνμΈμ: λ μ΄μμ, μ€νμΌ, νμΈνΈλ₯Ό 격리νμ¬ μ±λ₯μ ν₯μμν€κ³ μ μ§λ³΄μκ° μ©μ΄ν CSSλ₯Ό λ§λμΈμ. κΈλ‘λ² μΉ κ°λ°μ μν μ€μ©μ μΈ κΈ°μ κ³Ό κ³ κΈ μ λ΅μ λ°°μ보μΈμ.
CSS Containment Level 3: μ±λ₯ ν₯μμ μν κ³ κΈ λ μ΄μμ λ° νμΈνΈ 격리 λ§μ€ν°νκΈ°
λμμμ΄ μ§ννλ μΉ κ°λ° νκ²½μμ μ±λ₯ μ΅μ νλ κ°μ₯ μ€μν©λλ€. μΉμ¬μ΄νΈκ° λμ± λ³΅μ‘ν΄μ§κ³ μνΈμμ©μ΄ λ§μμ§λ©΄μ, κ°λ°μλ€μ λ μ΄μμκ³Ό λ λλ§μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκΈ° μν κ°λ ₯ν λκ΅¬κ° νμν©λλ€. CSS Containment Level 3λ λ¬Έμμ μΌλΆλ₯Ό 격리ν μ μκ² ν΄μ£Όλ κ°λ ₯ν μμ± λͺ¨μμ μ 곡νμ¬, μλΉν μ±λ₯ ν₯μκ³Ό μ μ§λ³΄μμ± κ°νλ₯Ό μ΄λμ΄λ λλ€. μ΄ κΈμμλ CSS Containment Level 3μ 볡μ‘ν λ΄μ©λ€μ κΉμ΄ νκ³ λ€μ΄ κΈλ‘λ² μΉ κ°λ°μ μν μ€μ©μ μΈ μμ μ ν΅μ°°λ ₯μ μ 곡ν κ²μ λλ€.
CSS Containmentλ 무μμΈκ°?
CSS Containmentλ νΉμ μμμ κ·Έ λ΄μ©μ΄ μ μ΄λ νΉμ μΈ‘λ©΄μμλ λ¬Έμμ λλ¨Έμ§ λΆλΆκ³Ό λ 립μ μ΄λΌκ³ λΈλΌμ°μ μ μ릴 μ μκ² ν΄μ£Όλ κΈ°μ μ λλ€. μ΄λ₯Ό ν΅ν΄ λΈλΌμ°μ λ 격리λ μμ λ°μ μμμ λν λ μ΄μμ, μ€νμΌ λλ νμΈνΈ κ³μ°μ 건λλ°μ΄ μ΅μ νλ₯Ό μνν μ μμ΅λλ€. νμ΄μ§μ μΌλΆλ₯Ό 격리ν¨μΌλ‘μ¨ λΈλΌμ°μ λ λ λΉ λ₯΄κ³ ν¨μ¨μ μΈ λ λλ§μ μνν μ μμ΅λλ€.
μ΄λ κ² μκ°ν΄λ³΄μΈμ: λΉμ μ΄ ν° μ§μ νΌμ¦μ λ§μΆκ³ μλ€κ³ μμν΄λ³΄μΈμ. νΌμ¦μ νΉμ ꡬμμ΄ μμ±λμκ³ λ€λ₯Έ ꡬμκ³Ό μνΈμμ©νμ§ μλλ€λ κ²μ μλ€λ©΄, λλ¨Έμ§ λΆλΆμ μμ νλ λμ κ·Έ ꡬμμ ν¨κ³Όμ μΌλ‘ 무μν μ μμ΅λλ€. CSS Containmentλ λΈλΌμ°μ κ° μΉ νμ΄μ§μ λ λλ§ κ³Όμ μμ μ΄μ λΉμ·ν μμ μ μνν μ μκ² ν΄μ€λλ€.
Containment κ°λ€
CSS Containment Level 3λ contain μμ±μ λν λ€ κ°μ§ μ£Όμ κ°μ μκ°ν©λλ€. κ° κ°μ λ€λ₯Έ μμ€μ 격리λ₯Ό λνλ
λλ€:
contain: none;: κΈ°λ³Έκ°μΌλ‘, 컨ν μΈλ¨ΌνΈκ° μ μ©λμ§ μμμ μλ―Έν©λλ€. μμμ κ·Έ λ΄μ©μ μ μμ μΌλ‘ μ²λ¦¬λ©λλ€.contain: layout;: μμμ λ μ΄μμμ΄ λ¬Έμμ λλ¨Έμ§ λΆλΆκ³Ό λ 립μ μμ λνλ λλ€. μμμ μμ μμ λ³κ²½μ΄ 격리λ μμ μΈλΆμ λ μ΄μμμ μν₯μ λ―ΈμΉμ§ μμ΅λλ€.contain: paint;: μμμ νμΈν μ΄ λ¬Έμμ λλ¨Έμ§ λΆλΆκ³Ό λ 립μ μμ λνλ λλ€. μμ λλ κ·Έ μμ μμμ λ³κ²½μ΄ 격리λ μμ μΈλΆμμ 리νμΈνΈλ₯Ό μ λ°νμ§ μμ΅λλ€.contain: style;: 격리λ μμμ μμμ μλ μμ±μ΄ 컨ν μ΄λ μΈλΆμ μμμ μλ μμ±μ μν₯μ μ€ μ μμμ λνλ λλ€. μ΄λ μ€νμΌ λ³κ²½μ 격리λ μμ λ΄λ‘ κ΅νμν€λ λ° λμμ΄ λ©λλ€.contain: size;: μμμ ν¬κΈ°κ° λ 립μ μμ 보μ₯νλ©°, μ΄λ μμ μμμ λ³κ²½μ΄ λΆλͺ¨μ ν¬κΈ°μ μν₯μ λ―ΈμΉμ§ μμμ μλ―Έν©λλ€. λμ μ½ν μΈ κ° μλ μμμ νΉν μ μ©ν©λλ€.contain: content;:layout,paint,style컨ν μΈλ¨ΌνΈλ₯Ό κ²°ν©ν λ¨μΆ μμ±μ λλ€:contain: layout paint style;.contain: strict;:size,layout,paint,style컨ν μΈλ¨ΌνΈλ₯Ό κ²°ν©ν λ¨μΆ μμ±μ λλ€:contain: size layout paint style;.
Containment κ° μμΈν μ΄ν΄νκΈ°
contain: none;
κΈ°λ³Έκ°μΈ contain: none;μ 컨ν
μΈλ¨ΌνΈλ₯Ό ν¨κ³Όμ μΌλ‘ λΉνμ±νν©λλ€. λΈλΌμ°μ λ μμμ κ·Έ λ΄μ©μ μ μμ μΈ λ λλ§ νλ¦μ μΌλΆλ‘ μ²λ¦¬ν©λλ€. 컨ν
μΈλ¨ΌνΈμ κΈ°λ°ν νΉλ³ν μ΅μ ν μμ΄ νμλλ‘ λ μ΄μμ, μ€νμΌ, νμΈνΈ κ³μ°μ μνν©λλ€.
contain: layout;
contain: layout;μ μ μ©νλ©΄ λΈλΌμ°μ μκ² ν΄λΉ μμμ κ·Έ μμμ λ μ΄μμμ΄ λ¬Έμμ λλ¨Έμ§ λΆλΆκ³Ό λ
립μ μ΄λΌκ³ μ립λλ€. μ΄λ μμμ μμ μμ λ³κ²½μ΄ 격리λ μμ μΈλΆμ μμμ λν λ μ΄μμ μ¬κ³μ°μ μ λ°νμ§ μμμ μλ―Έν©λλ€. μ΄λ λμ λͺ©λ‘, λνν μ»΄ν¬λνΈ λλ μλνν° μμ ―κ³Ό κ°μ΄ 볡μ‘νκ±°λ μμ£Ό λ³κ²½λλ λ μ΄μμμ κ°μ§ νμ΄μ§ μΉμ
μ νΉν μ μ©ν©λλ€.
μμ: μ€μκ° μ£Όκ°λ₯Ό νμνλ 볡μ‘ν λμ보λ μμ ―μ μμν΄λ³΄μΈμ. κ°κ²©μ΄ λ³ν¨μ λ°λΌ μμ ―μ λ μ΄μμμ΄ μμ£Ό μ
λ°μ΄νΈλ©λλ€. μμ ―μ 컨ν
μ΄λμ contain: layout;μ μ μ©νλ©΄ μ΄λ¬ν λ μ΄μμ μ
λ°μ΄νΈκ° λλ¨Έμ§ λμ보λμ μν₯μ λ―ΈμΉλ κ²μ λ°©μ§νμ¬ λ λΆλλ½κ³ λ°μμ±μ΄ μ’μ μ¬μ©μ κ²½νμ μ 곡ν μ μμ΅λλ€.
contain: paint;
contain: paint; μμ±μ λΈλΌμ°μ μκ² μμμ κ·Έ μμμ νμΈν
μ΄ λ¬Έμμ λλ¨Έμ§ λΆλΆκ³Ό λ
립μ μ΄λΌκ³ μ립λλ€. μ΄λ μμ λλ κ·Έ μμ μμμ λ³κ²½μ΄ 격리λ μμ μΈλΆμμ 리νμΈνΈλ₯Ό μ λ°νμ§ μμμ μλ―Έν©λλ€. 리νμΈνΈλ λΉμ©μ΄ λ§μ΄ λλ μμ
μ΄λ―λ‘ μ΄λ₯Ό μ΅μννλ κ²μ΄ μ±λ₯μ λ§€μ° μ€μν©λλ€.
μμ: νμ΄μ§ μμ λνλλ λͺ¨λ¬ μ°½μ μκ°ν΄λ³΄μΈμ. λͺ¨λ¬μ΄ μ΄λ¦¬κ±°λ λ«ν λ λΈλΌμ°μ λ μΌλ°μ μΌλ‘ μ 체 νμ΄μ§λ₯Ό λ€μ 그립λλ€. λͺ¨λ¬μ 컨ν
μ΄λμ contain: paint;λ₯Ό μ μ©νλ©΄ 리νμΈνΈλ₯Ό λͺ¨λ¬ μμ²΄λ‘ μ ννμ¬ νΉν 볡μ‘ν νμ΄μ§μμ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
contain: style;
contain: style;μ μ¬μ©νλ©΄ μμμ νμ νΈλ¦¬ λ΄μ μ€νμΌ λ³κ²½μ΄ κ·Έ μΈλΆ μμμ μ€νμΌλ§μ μν₯μ μ€ μ μμμ λνλ
λλ€. μ¦, 격리λ μμ λ΄λΆλ‘λΆν°μ κ³λ¨μ κ·μΉμ΄ 격리λ μμ μΈλΆμ μμμ μν₯μ λ―ΈμΉμ§ μμΌλ©°, κ·Έ λ°λλ λ§μ°¬κ°μ§μ
λλ€. μ΄λ μ체μ μΈ κ³ μ ν μ€νμΌλ§μ κ°μ§ μλνν° μ»΄ν¬λνΈλ νμ΄μ§ μΉμ
μ 격리νλ λ° νΉν μ μ©ν©λλ€.
μμ: μλνν° κ΄κ³ λ μμ ―μ νμ΄μ§μ μ½μ
νλ κ²½μ°λ₯Ό μκ°ν΄λ³΄μΈμ. μ΄λ¬ν μ»΄ν¬λνΈλ μ’
μ’
μ¬μ΄νΈμ μ€νμΌκ³Ό μΆ©λν μ μλ μ체 CSSλ₯Ό κ°μ§κ³ μμ΅λλ€. μμ ―μ 컨ν
μ΄λμ contain: style;μ μ μ©νλ©΄ μ΄λ¬ν μ€νμΌ μΆ©λμ λ°©μ§νκ³ μ¬μ΄νΈμ μ€νμΌμ΄ μΌκ΄μ±μ μ μ§νλλ‘ ν μ μμ΅λλ€.
contain: size;
contain: size; μμ±μ λΈλΌμ°μ μκ² κ²©λ¦¬λ μμμ ν¬κΈ°κ° λ
립μ μ΄λΌκ³ μ립λλ€. μ΄λ μμ μμμ λ³κ²½μ΄ λΆλͺ¨ μμκ° ν¬κΈ°λ₯Ό μ¬κ³μ°νκ² νμ§ μμμ μλ―Έν©λλ€. μ΄λ μμ λ΄λΆμ μ½ν
μΈ κ° λμ μΌλ‘ λ‘λλκ±°λ μμ£Ό λ³κ²½λλ μλ리μ€μμ μμΉ μλ 리νλ‘μ° λ° λ μ΄μμ λ³κ²½μ λ°©μ§νλ λ° νΉν μ μ©ν©λλ€.
μμ: λκΈ μΉμ
μ΄ μλ λ΄μ€ κΈ°μ¬λ₯Ό μμν΄λ³΄μΈμ. λκΈμ μμ κΈΈμ΄λ μλΉν λ€λ₯Ό μ μμ΅λλ€. λκΈ μΉμ
μ 컨ν
μ΄λμ contain: size;λ₯Ό μ μ©νλ©΄ λκΈ μΉμ
μ λ³κ²½μ΄ κΈ°μ¬ μ체μ λ μ΄μμμ μν₯μ λ―ΈμΉλ κ²μ λ°©μ§ν μ μμ΅λλ€.
contain: content;
contain: content; λ¨μΆ μμ±μ layout, paint, style 컨ν
μΈλ¨ΌνΈμ κ°λ ₯ν μ‘°ν©μ
λλ€. μ΄λ ν¬κ΄μ μΈ μμ€μ 격리λ₯Ό μ 곡νμ¬ μμμ κ·Έ λ΄μ©μ΄ λ¬Έμμ λλ¨Έμ§ λΆλΆκ³Ό κ±°μ λ
립μ μ΄ λλλ‘ λ³΄μ₯ν©λλ€. μ΄λ€ νΉμ κ°μ μ¬μ©ν΄μΌ ν μ§ νμ€νμ§ μμ λ 컨ν
μΈλ¨ΌνΈλ₯Ό μ μ©νκΈ° μν μ’μ μΆλ°μ μ
λλ€.
contain: strict;
contain: strict; λ¨μΆ μμ±μ size, layout, paint, style 컨ν
μΈλ¨ΌνΈλ₯Ό κ²°ν©νμ¬ κ°μ₯ κ°λ ₯ν μμ€μ 격리λ₯Ό μ 곡ν©λλ€. μ΅λμ μ΅μ ν μ μ¬λ ₯μ μ 곡νμ§λ§ κ°μ₯ λ§μ μ ν μ¬νλ λ°λ¦
λλ€. μ λλ‘ μ΄ν΄νμ§ μκ³ μ¬μ©νλ©΄ λλλ‘ μμμΉ λͺ»ν λμμ μ λ°ν μ μμΌλ―λ‘ μ΄ κ°μ μ μ€νκ² μ¬μ©νλ κ²μ΄ μ€μν©λλ€.
μ€μ©μ μΈ μμ λ° μ¬μ© μ¬λ‘
μ€μ μλ리μ€μμ CSS Containmentκ° μ΄λ»κ² μ μ©λ μ μλμ§ λ³΄μ¬μ£ΌκΈ° μν΄ λͺ κ°μ§ μ€μ©μ μΈ μμ μ μ¬μ© μ¬λ‘λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
1. λμ λͺ©λ‘μ μ±λ₯ ν₯μ
κ²μ κ²°κ³Όλ μ ν λͺ©λ‘μ νμνλ λ° μ¬μ©λλ κ²κ³Ό κ°μ λμ λͺ©λ‘μ νΉν λκ·λͺ¨ λ°μ΄ν° μΈνΈλ₯Ό λ€λ£° λ μ’
μ’
μ±λ₯ λ³λͺ© νμμ μΌμΌν¬ μ μμ΅λλ€. κ° λͺ©λ‘ νλͺ©μ contain: layout;μ μ μ©νλ©΄ ν νλͺ©μ λ³κ²½μ΄ λ€λ₯Έ νλͺ©μ λ μ΄μμμ μν₯μ λ―ΈμΉλ κ²μ λ°©μ§νμ¬ μ€ν¬λ‘€ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
<ul class="search-results">
<li style="contain: layout;">...</li>
<li style="contain: layout;">...</li>
<li style="contain: layout;">...</li>
</ul>
2. λͺ¨λ¬ μ°½ λ° μ€λ²λ μ΄ μ΅μ ν
λͺ¨λ¬ μ°½κ³Ό μ€λ²λ μ΄λ λνλκ±°λ μ¬λΌμ§ λ μ’
μ’
μ 체 νμ΄μ§μ 리νμΈνΈλ₯Ό μ λ°ν©λλ€. λͺ¨λ¬μ 컨ν
μ΄λμ contain: paint;λ₯Ό μ μ©νλ©΄ 리νμΈνΈλ₯Ό λͺ¨λ¬ μμ²΄λ‘ μ ννμ¬ λ λΆλλ¬μ΄ μ νκ³Ό ν₯μλ μ±λ₯μ μ»μ μ μμ΅λλ€.
<div class="modal" style="contain: paint;">
...content...
</div>
3. μλνν° μμ ― 격리
μμ
λ―Έλμ΄ νΌλλ κ΄κ³ λ°°λμ κ°μ μλνν° μμ ―μ μ’
μ’
μμμΉ λͺ»ν μ€νμΌλ§ μΆ©λμ΄λ μ±λ₯ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€. μμ ―μ 컨ν
μ΄λμ contain: style;μ μ μ©νλ©΄ ν΄λΉ μ€νμΌμ 격리νκ³ λλ¨Έμ§ μ¬μ΄νΈμ μν₯μ λ―ΈμΉλ κ²μ λ°©μ§ν μ μμ΅λλ€. μΆκ°μ μΈ μ±λ₯ μ΄μ μ μν΄ contain: layout; λ° contain: paint; μ¬μ©λ κ³ λ €ν΄λ³΄μΈμ.
<div class="widget-container" style="contain: style layout paint;">
...widget code...
</div>
4. κΈ΄ νμ΄μ§μμ μ€ν¬λ‘€ μ±λ₯ ν₯μ
μλ§μ μΉμ
μ΄ μλ κΈ΄ νμ΄μ§λ μ€ν¬λ‘€ μ±λ₯μ΄ μ νλ μ μμ΅λλ€. κ°λ³ μΉμ
μ contain: paint; λλ contain: content;λ₯Ό μ μ©νλ©΄ λΈλΌμ°μ κ° μ€ν¬λ‘€ μ€ λ λλ§μ μ΅μ ννλ λ° λμμ΄ λ μ μμ΅λλ€.
<section style="contain: paint;">
...content...
</section>
5. λμ μ½ν μΈ μμ κ΄λ¦¬
λκΈ μΉμ
, μΌν μΉ΄νΈ λλ μ€μκ° λ°μ΄ν° λμ€νλ μ΄μ κ°μ λμ μ½ν
μΈ κ° μλ μμμ contain: size;, contain: layout;, contain: paint;μ μ΄μ μ λ릴 μ μμ΅λλ€. μ΄λ μ½ν
μΈ λ³κ²½μ ν΄λΉ μΉμ
μΌλ‘ 격리νμ¬ μ 체 νμ΄μ§μ 리νλ‘μ°λ 리νμΈνΈλ₯Ό μ λ°νλ κ²μ λ°©μ§ν©λλ€.
<div class="dynamic-area" style="contain: size layout paint;">
...dynamic content...
</div>
CSS Containment μ¬μ©μ μν λͺ¨λ² μ¬λ‘
CSS Containmentλ₯Ό ν¨κ³Όμ μΌλ‘ νμ©νλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμΈμ:
contain: content;λλcontain: strict;λ‘ μμνκΈ°: μ΄λ€ νΉμ 컨ν μΈλ¨ΌνΈ κ°μ μ¬μ©ν΄μΌ ν μ§ νμ€νμ§ μμ λλcontain: content;λλcontain: strict;λ‘ μμνμΈμ. μ΄ λ¨μΆ μμ±λ€μ μ’μ μΆλ°μ μ μ 곡νλ©° ν¬κ΄μ μΈ μμ€μ 격리λ₯Ό μ 곡ν©λλ€.- μ±λ₯ μΈ‘μ : λΈλΌμ°μ κ°λ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ»¨ν μΈλ¨ΌνΈ μ μ©μ μ±λ₯ μν₯μ μΈ‘μ νμΈμ. 컨ν μΈλ¨ΌνΈκ° κ°μ₯ ν° μ΄μ μ μ 곡νλ μμμ μλ³νμΈμ. Chrome DevToolsμ Performance νκ³Ό κ°μ λꡬλ 리νμΈνΈ λ° λ μ΄μμ λ³λͺ© νμμ μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€.
- κ³Όλν 컨ν μΈλ¨ΌνΈ νΌνκΈ°: 컨ν μΈλ¨ΌνΈλ₯Ό 무λΆλ³νκ² μ μ©νμ§ λ§μΈμ. κ³Όλν 컨ν μΈλ¨ΌνΈλ λλλ‘ μμμΉ λͺ»ν λμμ μ λ°νκ±°λ λΈλΌμ°μ μ λ λλ§ μ΅μ ν λ₯λ ₯μ μ ν΄ν μ μμ΅λλ€. μ λ§λ‘ νμν κ³³μλ§ μ»¨ν μΈλ¨ΌνΈλ₯Ό μ μ©νμΈμ.
- μ² μ ν ν μ€νΈ: 컨ν μΈλ¨ΌνΈλ₯Ό μ μ©ν ν μΉμ¬μ΄νΈλ₯Ό μ² μ ν ν μ€νΈνμ¬ μκ°μ κ²°ν¨μ΄λ κΈ°λ₯μ λ¬Έμ λ₯Ό μΌμΌν€μ§ μλμ§ νμΈνμΈμ. ν¬λ‘μ€ λΈλΌμ°μ νΈνμ±μ 보μ₯νκΈ° μν΄ λ€μν λΈλΌμ°μ μ μ₯μΉμμ ν μ€νΈνμΈμ.
- λΈλΌμ°μ νΈνμ± κ³ λ €: CSS Containmentλ μ΅μ λΈλΌμ°μ μμ λ리 μ§μλμ§λ§, μ€λλ λΈλΌμ°μ μμ νΈνμ±μ κ³ λ €νλ κ²μ΄ μ€μν©λλ€. 컨ν μΈλ¨ΌνΈλ₯Ό μ§μνμ§ μλ λΈλΌμ°μ μ λν λ체 λμμ μ 곡νκΈ° μν΄ κΈ°λ₯ κ°μ§λ ν΄λ¦¬νμ μ¬μ©νμΈμ. (μλ λΈλΌμ°μ νΈνμ± μΉμ μ°Έμ‘°)
- 컨ν μΈλ¨ΌνΈ μ λ΅ λ¬Έμν: CSS μ½λμ 컨ν μΈλ¨ΌνΈ μ¬μ©μ λͺ ννκ² λ¬ΈμννμΈμ. μ΄λ λ€λ₯Έ κ°λ°μλ€μ΄ 컨ν μΈλ¨ΌνΈκ° μ μ©λ μ΄μ λ₯Ό μ΄ν΄νκ³ μ€μλ‘ μ κ±°νλ κ²μ λ°©μ§νλ λ° λμμ΄ λ©λλ€.
λΈλΌμ°μ νΈνμ±
CSS Containmentλ Chrome, Firefox, Safari, Edgeλ₯Ό ν¬ν¨ν μ΅μ λΈλΌμ°μ μμ λ리 μ§μλ©λλ€. κ·Έλ¬λ μ€λλ λΈλΌμ°μ μ λν μ§μμ μ νμ μ΄κ±°λ μμ μ μμ΅λλ€. CSS Containmentλ₯Ό μ¬μ©νκΈ° μ μ Can I useμ κ°μ μΉμ¬μ΄νΈμμ λΈλΌμ°μ νΈνμ± νλ₯Ό νμΈνμ¬ μ¬μ©μλ€μ΄ μ¬μ©ν κ°λ₯μ±μ΄ μλ λΈλΌμ°μ μμ μ§μλλμ§ νμΈνλ κ²μ΄ μ€μν©λλ€.
μ€λλ λΈλΌμ°μ λ₯Ό μ§μν΄μΌ νλ κ²½μ°, κΈ°λ₯ κ°μ§λ ν΄λ¦¬νμ μ¬μ©νμ¬ λ체 λμμ μ 곡νλ κ²μ κ³ λ €νμΈμ. κΈ°λ₯ κ°μ§λ λΈλΌμ°μ κ° contain μμ±μ μ§μνλμ§ νμΈν ν μ μ©νλ κ²μ ν¬ν¨ν©λλ€. ν΄λ¦¬νμ λΈλΌμ°μ μμ κΈ°λ³Έμ μΌλ‘ μ§μλμ§ μλ CSS κΈ°λ₯μ ꡬνμ μ 곡νλ JavaScript λΌμ΄λΈλ¬λ¦¬μ
λλ€.
κ³ κΈ μ»¨ν μΈλ¨ΌνΈ μ λ΅
κΈ°λ³Έμ μΈ μ»¨ν μΈλ¨ΌνΈ κ° μΈμλ μ±λ₯κ³Ό μ μ§λ³΄μμ±μ λμ± μ΅μ ννκΈ° μν΄ μ¬μ©ν μ μλ λ κ³ κΈ μ λ΅λ€μ΄ μμ΅λλ€.
1. λ€λ₯Έ μ΅μ ν κΈ°λ²κ³Ό 컨ν μΈλ¨ΌνΈ κ²°ν©
CSS Containmentλ λ€μκ³Ό κ°μ λ€λ₯Έ μ±λ₯ μ΅μ ν κΈ°λ²κ³Ό κ²°ν©λ λ κ°μ₯ μ μλν©λλ€:
- DOM ν¬κΈ° μ΅μν: DOMμ μμ μλ₯Ό μ€μ΄λ©΄ λ λλ§ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
- μ λλ©μ΄μ μ CSS λ³ν λ° ν¬λͺ λ μ¬μ©: CSS λ³ν λ° ν¬λͺ λλ₯Ό μ λλ©μ΄μ νλ κ²μ΄ μΌλ°μ μΌλ‘ λ€λ₯Έ μμ±μ μ λλ©μ΄μ νλ κ²λ³΄λ€ μ±λ₯μ΄ λ°μ΄λ©λλ€.
- μ΄λ²€νΈ νΈλ€λ¬ λλ°μ΄μ± λ° μ€λ‘νλ§: μ΄λ²€νΈ νΈλ€λ¬ μ€ν λΉλλ₯Ό μ ννλ©΄ κ³Όλν λ μ΄μμ λ° λ¦¬νμΈνΈ μμ μ λ°©μ§ν μ μμ΅λλ€.
- μ΄λ―Έμ§ λ° κΈ°ν μμ°μ μ§μ° λ‘λ©: μ΄λ―Έμ§ λ° κΈ°ν μμ°μ νμν λλ§ λ‘λνλ©΄ μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ μ€μΌ μ μμ΅λλ€.
2. μΉ μ»΄ν¬λνΈμ ν¨κ» 컨ν μΈλ¨ΌνΈ μ¬μ©
CSS Containmentλ μΉ μ»΄ν¬λνΈμ μμ°μ€λ½κ² μ΄μΈλ¦½λλ€. μΉ μ»΄ν¬λνΈμ μλ DOMμ 컨ν μΈλ¨ΌνΈλ₯Ό μ μ©νλ©΄ ν΄λΉ μ€νμΌλ§κ³Ό λ μ΄μμμ νμ΄μ§μ λλ¨Έμ§ λΆλΆκ³Ό 격리νμ¬ μΆ©λμ λ°©μ§νκ³ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
3. λμ 컨ν μΈλ¨ΌνΈ
κ²½μ°μ λ°λΌ νΉμ 쑰건μ λ°λΌ 컨ν
μΈλ¨ΌνΈλ₯Ό λμ μΌλ‘ μ μ©νκ±°λ μ κ±°ν΄μΌ ν μλ μμ΅λλ€. μλ₯Ό λ€μ΄, νμ΄μ§μ ν μΉμ
μ΄ λ·°ν¬νΈμ λ³΄μΌ λλ§ contain: paint;λ₯Ό μ μ©ν μ μμ΅λλ€.
const element = document.querySelector('.my-element');
function checkVisibility() {
const rect = element.getBoundingClientRect();
const isVisible = (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
);
if (isVisible) {
element.style.contain = 'paint';
} else {
element.style.contain = 'none';
}
}
window.addEventListener('scroll', checkVisibility);
window.addEventListener('resize', checkVisibility);
checkVisibility(); // Initial check
CSS Containmentμ λ―Έλ
CSS Containmentλ μ§ννλ κΈ°μ μ λλ€. μΉ λΈλΌμ°μ μ CSS λͺ μΈκ° κ³μ λ°μ ν¨μ λ°λΌ, μ°λ¦¬λ 컨ν μΈλ¨ΌνΈ λͺ¨λΈμ λν μΆκ°μ μΈ κ°μ κ³Ό ν₯μμ κΈ°λν μ μμ΅λλ€. λ―Έλμ κ°λ°μλ λ€μμ΄ ν¬ν¨λ μ μμ΅λλ€:
- λ μΈλΆνλ 컨ν μΈλ¨ΌνΈ κ°: λ μ΄μμ, μ€νμΌ λ° νμΈνΈ 격리μ λν λ λ―ΈμΈν μ μ΄λ₯Ό μ 곡νλ μλ‘μ΄ μ»¨ν μΈλ¨ΌνΈ κ°.
- ν₯μλ λΈλΌμ°μ μ΅μ ν: λΈλΌμ°μ λ CSS Containmentλ₯Ό κΈ°λ°μΌλ‘ λ μ κ΅ν μ΅μ ν μ λ΅μ κ°λ°νμ¬ λ ν° μ±λ₯ ν₯μμ μ΄λμ΄λΌ μ μμ΅λλ€.
- λ€λ₯Έ CSS κΈ°λ₯κ³Όμ ν΅ν©: CSS 그리λ λ° νλ μ€λ°μ€μ κ°μ λ€λ₯Έ CSS κΈ°λ₯κ³Όμ μνν ν΅ν©μ ν΅ν΄ λ κ°λ ₯νκ³ ν¨μ¨μ μΈ λ μ΄μμμ μμ±ν μ μμ΅λλ€.
κΈλ‘λ² κ³ λ €μ¬ν
CSS Containmentλ₯Ό ꡬνν λ μΉμ¬μ΄νΈ μ±λ₯κ³Ό μ¬μ©μ κ²½νμ μν₯μ λ―ΈμΉ μ μλ κΈλ‘λ² μμΈμ κ³ λ €νλ κ²μ΄ μ€μν©λλ€:
- λ€μν λ€νΈμν¬ μλ: μΈκ³ κ°μ§μ μ¬μ©μλ€μ λ§€μ° λ€λ₯Έ λ€νΈμν¬ μλλ₯Ό κ°μ§ μ μμ΅λλ€. CSS Containmentμ κ°μ μ΅μ ν κΈ°μ μ μ°κ²°μ΄ λλ¦° μ¬μ©μμκ² λμ± μ€μν΄μ§λλ€.
- μ₯μΉ λ€μμ±: μΉμ¬μ΄νΈλ κ³ κΈ λ°μ€ν¬ν±μμ μ μ¬μ ν΄λν°μ μ΄λ₯΄κΈ°κΉμ§ λ€μν μ₯μΉμ μ΅μ νλμ΄μΌ ν©λλ€. CSS Containmentλ 리μμ€κ° μ νλ μ₯μΉμμ μ±λ₯μ ν₯μμν€λ λ° λμμ΄ λ μ μμ΅λλ€.
- νμ§ν: μ¬λ¬ μΈμ΄λ₯Ό μ§μνλ μΉμ¬μ΄νΈλ λ€λ₯Έ μΈμ΄μ λ μ΄μμ λ° λ λλ§ νΉμ±μ λ°λΌ 컨ν μΈλ¨ΌνΈ μ λ΅μ μ‘°μ ν΄μΌ ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ μ°λ ν μ€νΈ λ°©ν₯μ κ°μ§ μΈμ΄λ λ€λ₯Έ 컨ν μΈλ¨ΌνΈ ꡬμ±μ΄ νμν μ μμ΅λλ€.
- μ κ·Όμ±: CSS Containment μ¬μ©μ΄ μΉμ¬μ΄νΈ μ κ·Όμ±μ λΆμ μ μΈ μν₯μ λ―ΈμΉμ§ μλλ‘ νμΈμ. 보쑰 κΈ°μ λ‘ μΉμ¬μ΄νΈλ₯Ό ν μ€νΈνμ¬ λͺ¨λ μ¬μ©μκ° κ³μ μ¬μ©ν μ μλλ‘ νμΈμ.
κ²°λ‘
CSS Containment Level 3λ μΉμ¬μ΄νΈ μ±λ₯μ μ΅μ ννκ³ μ μ§λ³΄μμ±μ ν₯μμν€λ κ°λ ₯ν λꡬμ λλ€. λ¬Έμμ μΌλΆλ₯Ό 격리ν¨μΌλ‘μ¨ λΈλΌμ°μ κ° μΉμ¬μ΄νΈλ₯Ό λ ν¨μ¨μ μΌλ‘ λ λλ§νλλ‘ λμ λ λΆλλ½κ³ λ°μμ±μ΄ μ’μ μ¬μ©μ κ²½νμ μ 곡ν μ μμ΅λλ€. λ€μν 컨ν μΈλ¨ΌνΈ κ°μ μ΄ν΄νκ³ μ λ΅μ μΌλ‘ μ μ©ν¨μΌλ‘μ¨ μλΉν μ±λ₯ ν₯μμ μ΄λ£¨κ³ λ κ²¬κ³ νκ³ μ μ§λ³΄μνκΈ° μ¬μ΄ CSS μ½λλ₯Ό λ§λ€ μ μμ΅λλ€. μΉ κ°λ°μ΄ κ³μ μ§νν¨μ λ°λΌ CSS Containmentλ κ³ μ±λ₯μ μ μΈκ³μ μΌλ‘ μ κ·Ό κ°λ₯ν μΉμ¬μ΄νΈλ₯Ό ꡬμΆνλ λ° μ μ λ μ€μν κΈ°μ μ΄ λ κ²μ λλ€.
CSS Containmentλ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©νκ³ μλμ§ νμΈνκΈ° μν΄ μ±λ₯μ μΈ‘μ νκ³ , μ² μ ν ν μ€νΈνλ©°, 컨ν μΈλ¨ΌνΈ μ λ΅μ λ¬Έμννλ κ²μ κΈ°μ΅νμΈμ. μ μ€ν κ³νκ³Ό ꡬνμ ν΅ν΄ CSS Containmentλ μΉ κ°λ° ν΄ν·μμ κ·μ€ν μμ°μ΄ λ μ μμΌλ©°, μ μΈκ³ μ¬μ©μλ€μ΄ λΉ λ₯΄κ³ ν¨μ¨μ μ΄λ©° μ¦κ²κ² μ¬μ©ν μ μλ μΉμ¬μ΄νΈλ₯Ό λ§λλ λ° λμμ μ€ κ²μ λλ€.
μ€λ λ°λ‘ CSS Containmentλ₯Ό μ€νν΄λ³΄κ³ μΉ νλ‘μ νΈμ κ°μ Έμ¬ μ μλ μ±λ₯μμ μ΄μ μ λ°κ²¬ν΄λ³΄μΈμ. μ¬μ©μμ νΉμ μꡬμ¬νκ³Ό μΉμ¬μ΄νΈκ° μ μλ κΈλ‘λ² λ§₯λ½μ κ³ λ €νμΈμ. CSS Containment λ° κΈ°ν μ΅μ ν κΈ°μ μ μμ©ν¨μΌλ‘μ¨ μ§μ μΌλ‘ μΈκ³μ μΈ μμ€μ μΉμ¬μ΄νΈλ₯Ό λ§λ€ μ μμ΅λλ€.