κ°λ ₯ν CSS @split at-ruleμ ν΅ν΄ κ³ κΈ μ½λ λΆν μ νμνμ¬ λ λΉ λ₯Έ νμ΄μ§ λ‘λ, ν₯μλ μ¬μ©μ κ²½ν λ° μ΅μ νλ μΉ μ±λ₯μ ꡬννμΈμ.
CSS @split: ν₯μλ μΉ μ±λ₯μ μν μ½λ λΆν μ¬μΈ΅ λΆμ
λμμμ΄ μ§ννλ μΉ κ°λ° νκ²½μμ μ±λ₯ μ΅μ νλ κ°μ₯ μ€μν©λλ€. μ¬μ©μλ€μ μΉμ¬μ΄νΈκ° λΉ λ₯΄κ² λ‘λλκ³ μ¦κ°μ μΌλ‘ λ°μνκΈ°λ₯Ό κΈ°λν©λλ€. μ΄λ₯Ό λ¬μ±νκΈ° μν ν κ°μ§ ν΅μ¬ μμλ ν¨μ¨μ μΈ μ½λ μ λ¬μ΄λ©°, λ°λ‘ μ΄ μ§μ μμ CSS μ½λ λΆν μ΄ μ€μν μν μ ν©λλ€. μμ§ λͺ¨λ λΈλΌμ°μ μ λ리 ꡬνλμ§λ μμμ§λ§, @split
at-ruleμ μΉ μ±λ₯ ν₯μμ μν΄ CSSλ₯Ό λͺ¨λννκ³ μ‘°κ±΄λΆλ‘ λ‘λνλ κ°λ ₯ν νμ€ κΈ°λ° μ κ·Ό λ°©μμ μ 곡ν©λλ€.
CSS μ½λ λΆν μ΄λ 무μμΈκ°?
CSS μ½λ λΆν μ ν° CSS νμΌμ λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ μ¬λ¬ μ²ν¬λ‘ λλλ κ²μ μλ―Έν©λλ€. μ΄ μμ νμΌλ€μ λ 립μ μΌλ‘, κ·Έλ¦¬κ³ νμν λλ§ λ‘λλ μ μμ΅λλ€. μ΄λ¬ν "μ£Όλ¬Έν(on-demand)" λ‘λ© μ λ΅μ λΈλΌμ°μ κ° νμ΄μ§λ₯Ό λ λλ§νκΈ° μ μ μ 체 CSS μ€νμΌμνΈλ₯Ό λ€μ΄λ‘λνκ³ νμ±ν νμκ° μμΌλ―λ‘ μΉμ¬μ΄νΈμ μ΄κΈ° λ‘λ μκ°μ μ€μ¬μ€λλ€. μ½λ λΆν μ μΉμ¬μ΄νΈκ° λ λΉ λ₯΄κ³ λ°μμ±μ΄ μ’κ² λκ»΄μ§λλ‘ λ§λ€μ΄ μ¬μ©μ κ²½ν(UX)μ κ°μ ν©λλ€.
μ ν΅μ μΌλ‘ κ°λ°μλ€μ CSS μ½λ λΆν μ λ¬μ±νκΈ° μν΄ λ€μν μ μ²λ¦¬κΈ°(Sass λλ Less λ±)μ λΉλ λꡬ(Webpack λλ Parcel λ±)μ μμ‘΄ν΄μμ΅λλ€. μ΄λ¬ν λꡬλ€μ μ’
μ’
볡μ‘ν μ€μ κ³Ό μν¬νλ‘μ°λ₯Ό μλ°ν©λλ€. @split
at-ruleμ λ€μ΄ν°λΈ CSS μ½λ λΆν κΈ°λ₯μ λΈλΌμ°μ μ λμ
νμ¬ νλ‘μΈμ€λ₯Ό λ¨μννκ³ μ μ¬μ μΌλ‘ λ λμ μ±λ₯ μ΅μ νλ₯Ό μ 곡νλ κ²μ λͺ©νλ‘ ν©λλ€.
@split
At-Rule μκ°
@split
at-ruleμ κ°λ°μκ° CSS μ€νμΌμνΈ λ΄μμ λ€μν "λΆν (splits)"μ μ μν μ μλλ‘ νλ μ μλ CSS κΈ°λ₯μ
λλ€. κ° λΆν μ νΉμ 쑰건μ λ°λΌ λ
립μ μΌλ‘ λ‘λλ μ μλ κ³ μ ν μ€νμΌ μ§ν©μ λνλ
λλ€.
@split
ꡬ문
@split
at-ruleμ κΈ°λ³Έ ꡬ문μ λ€μκ³Ό κ°μ΅λλ€:
@split [split-name] {
[condition]: {
[CSS rules];
}
...
}
κ΅¬μ± μμλ₯Ό νλμ© μ΄ν΄λ³΄κ² μ΅λλ€:
@split [split-name]
: κ³ μ ν μ΄λ¦μ κ°μ§ μλ‘μ΄ λΆν μ μ μΈν©λλ€. μ΄ μ΄λ¦μ λμ€μ λΆν μ μ°Έμ‘°νλ λ° μ¬μ©λ©λλ€.[condition]
: λΆν λ΄μ μ€νμΌμ΄ μΈμ μ μ©λμ΄μΌ νλμ§λ₯Ό κ²°μ νλ λ―Έλμ΄ μΏΌλ¦¬ λλ CSS 쑰건μ λλ€.[CSS rules]
: μ‘°κ±΄μ΄ μΆ©μ‘±λ κ²½μ° μ μ©λ νμ€ CSS κ·μΉμ λλ€.
μμ : λ€μν νλ©΄ ν¬κΈ°μ λ°λ₯Έ μ€νμΌ λΆν
λ€μμ νλ©΄ ν¬κΈ°μ λ°λΌ λ€λ₯Έ μ€νμΌμ λ‘λνκΈ° μν΄ @split
μ μ¬μ©νλ μ€μ©μ μΈ μμ μ
λλ€:
@split responsive-layout {
screen and (max-width: 768px): {
.container {
width: 100%;
padding: 10px;
}
h1 {
font-size: 2em;
}
}
screen and (min-width: 769px): {
.container {
width: 960px;
padding: 20px;
}
h1 {
font-size: 3em;
}
}
}
μ΄ μμ μμλ responsive-layout
μ΄λΌλ μ΄λ¦μ λΆν μ μ μν©λλ€. μ¬κΈ°μλ νλ©΄ λλΉλ₯Ό κΈ°λ°μΌλ‘ ν λ κ°μ§ μ‘°κ±΄μ΄ ν¬ν¨λ©λλ€. νλ©΄ λλΉκ° 768px μ΄νμ΄λ©΄ λͺ¨λ°μΌ μ₯μΉμ© μ€νμΌμ΄ μ μ©λ©λλ€. νλ©΄ λλΉκ° 768pxλ³΄λ€ ν¬λ©΄ λ ν° νλ©΄μ© μ€νμΌμ΄ μ μ©λ©λλ€.
μμ : μΈμ 맀체λ₯Ό μν μ€νμΌ λΆν
λ λ€λ₯Έ μΌλ°μ μΈ μ¬μ© μ¬λ‘λ μΈμ 맀체λ₯Ό μν΄ νΉλ³ν μ€νμΌμ λΆν νλ κ²μ λλ€:
@split print-styles {
print: {
body {
font-size: 12pt;
color: black;
}
.no-print {
display: none;
}
}
}
μ¬κΈ°μλ print-styles
λΌλ μ΄λ¦μ λΆν μ μ μν©λλ€. print
쑰건μ μ΄ μ€νμΌμ΄ νμ΄μ§κ° μΈμλ λλ§ μ μ©λλλ‘ λ³΄μ₯ν©λλ€. no-print
ν΄λμ€λ₯Ό κ°μ§ μμλ₯Ό μ¨κΈ°κ³ μΈμ μ κ°λ
μ±μ λμ΄κΈ° μν΄ κΈκΌ΄ ν¬κΈ°λ₯Ό μ‘°μ ν μ μμ΅λλ€.
@split
μ¬μ©μ μ΄μ
@split
at-ruleμ μ¬μ©νλ©΄ μΉ μ±λ₯ λ° μ μ§λ³΄μ μΈ‘λ©΄μμ λ€μκ³Ό κ°μ μ¬λ¬ μ΄μ μ μ»μ μ μμ΅λλ€:
- μ΄κΈ° λ‘λ μκ° κ°μ : μ΄κΈ° λ λλ§μ νμν CSSλ§ λ‘λν¨μΌλ‘μ¨ λΈλΌμ°μ κ° νμ΄μ§λ₯Ό λ 빨리 νμνμ¬ μ¬μ©μ κ²½νμ ν₯μμν¬ μ μμ΅λλ€.
- CSS ν¬κΈ° κ°μ: ν° CSS νμΌμ λ μκ³ μ§μ€λ μ²ν¬λ‘ λΆν νλ©΄ λΈλΌμ°μ κ° λ€μ΄λ‘λν΄μΌ νλ μ 체 CSS ν¬κΈ°κ° μ€μ΄λλλ€.
- μΊμ± ν₯μ: μμ CSS νμΌμ λΈλΌμ°μ μ μν΄ λ ν¨μ¨μ μΌλ‘ μΊμλ μ μμ΄ μ΄ν νμ΄μ§ λ‘λ μλκ° λΉ¨λΌμ§λλ€.
- μ μ§λ³΄μμ± ν₯μ: CSSλ₯Ό λͺ¨λννλ©΄ ν λΆν μ λ³κ²½ μ¬νμ΄ μ€νμΌμνΈμ λ€λ₯Έ λΆλΆμ μν₯μ λ―ΈμΉ κ°λ₯μ±μ΄ μ μ΄μ§λ―λ‘ μ€νμΌμ κ΄λ¦¬νκ³ μ λ°μ΄νΈνκΈ°κ° λ μ¬μμ§λλ€.
- μ‘°κ±΄λΆ λ‘λ©:
@split
μ μ¬μ©νλ©΄ νλ©΄ ν¬κΈ°, λ―Έλμ΄ μ ν λλ μ¬μ©μ κΈ°λ³Έ μ€μ κ³Ό κ°μ νΉμ 쑰건μ λ°λΌ CSSλ₯Ό λ‘λν μ μμ΅λλ€. - λ€μ΄ν°λΈ λΈλΌμ°μ μ§μ (μ μ¬μ ): μ μ²λ¦¬κΈ° κΈ°λ° μ루μ
κ³Ό λ¬λ¦¬
@split
μ λ€μ΄ν°λΈ CSS κΈ°λ₯μ΄ λλ κ²μ λͺ©νλ‘ νλ©°, μ μ¬μ μΌλ‘ λ λμ μ±λ₯κ³Ό κ°λ¨ν μν¬νλ‘μ°λ₯Ό μ 곡ν©λλ€.
@split
μ μ¬μ© μ¬λ‘
@split
at-ruleμ μΉ μ±λ₯μ μ΅μ ννκΈ° μν΄ λ€μν μλ리μ€μ μ μ©λ μ μμ΅λλ€:
- λ°μν λμμΈ: νλ©΄ ν¬κΈ°λ μ₯μΉ λ°©ν₯μ λ°λΌ λ€λ₯Έ μ€νμΌμ λ‘λν©λλ€.
- μΈμ μ€νμΌ: μΈμ 맀체λ₯Ό μν νΉμ μ€νμΌμ μ μνμ¬ λΆνμν μμλ₯Ό μ¨κΈ°κ³ κ°λ μ±μ μ΅μ νν©λλ€.
- ν λ§ μ ν: μ¬μ©μ κΈ°λ³Έ μ€μ (μ: λΌμ΄νΈ λͺ¨λ vs. λ€ν¬ λͺ¨λ)μ λ°λΌ λ€λ₯Έ CSS ν λ§λ₯Ό λ‘λν©λλ€.
- A/B ν μ€νΈ: λ€μν λμμΈ μμλ₯Ό A/B ν μ€νΈνκΈ° μν΄ λ€λ₯Έ CSS λ³νμ λ‘λν©λλ€.
- κΈ°λ₯ νλκ·Έ: κΈ°λ₯ νλκ·Έμ λ°λΌ νΉμ κΈ°λ₯μ λν CSSλ₯Ό 쑰건λΆλ‘ λ‘λν©λλ€.
- κ΅μ ν(i18n): μ¬μ©μμ μΈμ΄λ μ§μμ λ°λΌ λ€λ₯Έ CSS μ€νμΌμ λ‘λν©λλ€. μλ₯Ό λ€μ΄, μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ μ°λ μΈμ΄μλ λ€λ₯Έ κΈκΌ΄ μ€νμΌμ΄λ λ μ΄μμ μ‘°μ μ΄ νμν μ μμ΅λλ€.
- μ κ·Όμ±: λλΉ μ¦κ°λ κΈκΌ΄ ν¬κΈ° νλμ κ°μ΄ μ₯μ κ° μλ μ¬μ©μλ₯Ό μν΄ μ΅μ νλ CSSλ₯Ό λ‘λν©λλ€.
κΈ°μ‘΄ CSS μ½λ λΆν κΈ°μ κ³Όμ λΉκ΅
νμ¬ CSS μ½λ λΆν μ μ£Όλ‘ μ μ²λ¦¬κΈ°μ λΉλ λꡬλ₯Ό ν΅ν΄ μ΄λ£¨μ΄μ§λλ€. λ€μμ @split
κ³Ό μ΄λ¬ν κΈ°μ‘΄ κΈ°μ μ λΉκ΅ν κ²μ
λλ€:
μ μ²λ¦¬κΈ° (Sass, Less, Stylus)
- μ₯μ : μ±μνκ³ λ리 μ±νλμμΌλ©°, λ³μ, λ―Ήμ€μΈ, μ€μ²©κ³Ό κ°μ κΈ°λ₯μ μ 곡ν©λλ€.
- λ¨μ : μ»΄νμΌ λ¨κ³κ° νμνκ³ , 볡μ‘μ±μ΄ μ¦κ°ν μ μμΌλ©°, μ½λ λΆν μ μν΄ λΉλ λꡬμ μμ‘΄νλ κ²½μ°κ° λ§μ΅λλ€.
λΉλ λꡬ (Webpack, Parcel)
- μ₯μ : κ°λ ₯ν μ½λ λΆν κΈ°λ₯, 볡μ‘ν μ’ μμ± μ²λ¦¬, μμ° μ΅μ νκ° κ°λ₯ν©λλ€.
- λ¨μ : ꡬμ±μ΄ 볡μ‘ν μ μκ³ , λΉλ νλ‘μΈμ€κ° νμνλ©°, κ°λ° μν¬νλ‘μ°μ μ€λ²ν€λλ₯Ό μΆκ°ν©λλ€.
@split
- μ₯μ : λ€μ΄ν°λΈ λΈλΌμ°μ μ§μ(μ μ¬μ ), λ κ°λ¨ν μν¬νλ‘μ°, λΉλ νλ‘μΈμ€ λΆνμ, μ μ¬μ μΌλ‘ λ λμ μ±λ₯.
- λ¨μ : μμ§ λ리 ꡬνλμ§ μμμΌλ©°, μ μ²λ¦¬κΈ° λ° λΉλ λꡬμ λΉν΄ κΈ°λ₯ μΈνΈκ° μ νμ μ λλ€.
@split
at-ruleμ CSS μ½λ λΆν μ λν λ³΄λ€ κ°μνλκ³ λ€μ΄ν°λΈν μ κ·Ό λ°©μμ μ 곡νμ¬ κ²½μ°μ λ°λΌ 볡μ‘ν λΉλ λꡬλ μ μ²λ¦¬κΈ°μ νμμ±μ μμ λ κ²μ λͺ©νλ‘ ν©λλ€. νμ§λ§ @split
μ΄ μ΄λ¬ν λꡬλ€μ μμ ν λ체νκΈ° μν κ²μ μλλΌλ μ μ μ μν΄μΌ ν©λλ€. μ΄ λꡬλ€μ μ¬μ ν @split
μ΄ λ€λ£¨μ§ μλ λ³μ κ΄λ¦¬λ μμ° μ΅μ νμ κ°μ κ°μΉ μλ κΈ°λ₯μ μ 곡ν©λλ€.
κ³ λ € μ¬ν λ° λͺ¨λ² μ¬λ‘
@split
at-ruleμ΄ CSS μ½λ λΆν μ μ λ§ν μ κ·Ό λ°©μμ μ 곡νμ§λ§, λͺ κ°μ§ κ³ λ € μ¬νκ³Ό λͺ¨λ² μ¬λ‘λ₯Ό μΌλμ λμ΄μΌ ν©λλ€:
- λΈλΌμ°μ μ§μ: νμ¬ μμ± μμ μ κΈ°μ€μΌλ‘
@split
μ μμ§ λͺ¨λ λΈλΌμ°μ μ λ리 ꡬνλμ§ μμμ΅λλ€. νλ‘λμ νκ²½μμ μ¬μ©νκΈ° μ μ λΈλΌμ°μ νΈνμ±μ νμΈνλ κ²μ΄ μ€μν©λλ€. ꡬν λΈλΌμ°μ λ₯Ό μν ν΄λ°± λ©μ»€λμ¦μ μ 곡ν΄μΌ ν μλ μμ΅λλ€. - μ±λ₯ ν
μ€νΈ:
@split
μ ꡬνν νμλ μΉμ¬μ΄νΈμ μ±λ₯μ νμ ν μ€νΈνμ¬ μ€μ λ‘ λ‘λ μκ°μ΄ κ°μ λμλμ§ νμΈν΄μΌ ν©λλ€. λΈλΌμ°μ κ°λ°μ λꡬλ₯Ό μ¬μ©νμ¬ λ€νΈμν¬ μμ²κ³Ό λ λλ§ μ±λ₯μ λΆμνμΈμ. - λΆν λ¨μ: λΆν μ μ μ ν μμ€μ λ¨μλ₯Ό μ ννμΈμ. λ무 μμ λΆν μ΄ λ§μΌλ©΄ κ³Όλν HTTP μμ²μ΄ λ°μν μ μκ³ , λΆν μ΄ λ무 μ μΌλ©΄ μλΉν μ±λ₯ μ΄μ μ μ 곡νμ§ λͺ»ν μ μμ΅λλ€.
- μ μ§λ³΄μμ±: μ΄ν΄νκ³ μ μ§λ³΄μνκΈ° μ¬μ΄ λ°©μμΌλ‘ CSSλ₯Ό ꡬμ±νμΈμ. λΆν κ³Ό 쑰건μ λͺ ννκ³ μ€λͺ μ μΈ μ΄λ¦μ μ¬μ©νμΈμ.
- ν΄λ°± μ λ΅:
@split
μ μ§μνμ§ μλ λΈλΌμ°μ λ₯Ό μν ν΄λ°± μ λ΅μ ꡬννμΈμ. μ΄λ μ ν΅μ μΈ CSS κΈ°μ μ΄λ ν΄λ¦¬νμ μ¬μ©νλ κ²μ ν¬ν¨ν μ μμ΅λλ€. - λ€λ₯Έ μ΅μ ν κΈ°μ κ³Ό κ²°ν©:
@split
μ νΌμ¦μ ν μ‘°κ°μ λΆκ³Όν©λλ€. ν¨κ³Όλ₯Ό κ·ΉλννκΈ° μν΄ CSS μΆμ, μ΄λ―Έμ§ μ΅μ ν, λΈλΌμ°μ μΊμ±κ³Ό κ°μ λ€λ₯Έ μ±λ₯ μ΅μ ν κΈ°μ κ³Ό κ²°ν©νμΈμ.
CSS μ½λ λΆν μ λ―Έλ
@split
at-ruleμ CSS λ° μΉ μ±λ₯ μ΅μ νμ μ§νμ μμ΄ μ€μν μ§μ μ λνλ
λλ€. @split
μ λν λΈλΌμ°μ μ§μμ΄ μ¦κ°ν¨μ λ°λΌ, λ λΉ λ₯΄κ³ λ°μμ±μ΄ μ’μ μΉμ¬μ΄νΈλ₯Ό ꡬμΆνκΈ° μν νμ€μ μΈ κ΄νμ΄ λ μ μ¬λ ₯μ κ°μ§κ³ μμ΅λλ€. λ€μν μμΈμ λ°λΌ CSSλ₯Ό 쑰건λΆλ‘ λ‘λνλ κΈ°λ₯μ κ³ λλ‘ λ§μΆ€νλκ³ μ΅μ νλ μ¬μ©μ κ²½νμ μ°½μΆν μλ‘μ΄ κ°λ₯μ±μ μ΄μ΄μ€λλ€.
λ λμκ°, @split
μ κ°λ°μ λ κ³ κΈ κΈ°λ₯μ κ°μΆ CSSλ₯Ό ν₯μμν€λ €λ μ§μμ μΈ λ
Έλ ₯μ 보μ¬μ£Όλ©°, κ°λ°μλ€μ΄ μλ°μ€ν¬λ¦½νΈ κΈ°λ° μ루μ
μλ§ μμ‘΄νμ§ μκ³ λ μ κ΅νκ³ μ±λ₯μ΄ λ°μ΄λ μΉ μ ν리μΌμ΄μ
μ λ§λ€ μ μλλ‘ νμ μ€μ΄μ€λλ€. μ°λ¦¬λ νλ μΉ κ°λ°μ κ³Όμ λ₯Ό ν΄κ²°νλ CSSμ μΆκ°μ μΈ νμ μ κΈ°λν μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ 볡μ‘νκ³ λ§€λ ₯μ μΈ μΉ κ²½νμ λ μ½κ² ꡬμΆνκ³ μ μ§ν μ μκ² λ κ²μ
λλ€.
κ²°λ‘
CSS @split
at-ruleμ μΉ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μλ μ½λ λΆν μ μν κ°λ ₯ν λꡬμ
λλ€. CSSλ₯Ό λ μκ³ μ‘°κ±΄λΆλ‘ λ‘λλλ μ²ν¬λ‘ λΆν΄ν¨μΌλ‘μ¨ κ°λ°μλ μ΄κΈ° λ‘λ μκ°μ μ€μ΄κ³ , μΊμ±μ κ°ννλ©°, μ μ§λ³΄μμ±μ ν₯μμν¬ μ μμ΅λλ€. λΈλΌμ°μ μ§μμ μμ§ λ°μ μ€μ΄μ§λ§, @split
μ CSS μ½λ λΆν μ μ λ§ν λ―Έλλ₯Ό λννλ©° μΉ κ°λ°μ μ§μμ μΈ μ§νλ₯Ό μΏλ³Ό μ μκ² ν΄μ€λλ€. μΉμ΄ κ³μν΄μ λ λΉ λ₯΄κ³ λ°μμ±μ΄ μ’μ κ²½νμ μꡬν¨μ λ°λΌ, @split
κ³Ό κ°μ κΈ°μ μ μ μΈκ³ μ¬μ©μλ₯Ό λ§μ‘±μν€λ κ³ μ±λ₯ μΉμ¬μ΄νΈλ₯Ό ꡬμΆνλ λ° μ μ λ νμμ μ΄ λ κ²μ
λλ€. CSSμ μ΅μ κ°λ° λν₯μ λν μ 보λ₯Ό κ³μ νμΈνκ³ @split
μ μ€ννμ¬ μΉ νλ‘μ νΈ μ΅μ νλ₯Ό μν μ μ¬λ ₯μ μ΅λν νμ©νμΈμ.