λ€μ΄κ°λ©°
CSSλ μΉ κ°λ°μμ λμμΈμ λ΄λΉνλ μ€μν μΈμ΄μ
λλ€.
νμ§λ§ λλΆλΆμ κ°λ°μ(μ )λ margin
, padding
, color
, font-size
κ°μ μμ±λ§ μ¬μ©ν©λλ€.
κ·Έλ°λ° CSSμλ μ΄λ³΄λ€ ν¨μ¬ λ λ€μν μ νμμ μμ±λ€μ΄ μμ΅λλ€.
λ§μ μν©μμ μ μ©νκ² μ°μΌ μ μμ§λ§, μ΅μνμ§ μμμ μ¬μ©νμ§ μκ±°λ κ°λ°μ νΈμλ₯Ό μν΄μ JavaScriptλ₯Ό μ¬μ©νλ κ²½μ°κ° λ§μ΅λλ€.
μ€λμ κ·Έ μ€μμλ νΉν ν₯λ―Έλ‘μ΄ λͺ κ°μ§λ₯Ό μκ°ν΄λ³΄κ² μ΅λλ€. κ·ΈλΌ β¦ λ μ°κ³
1. :is()
μ :where()
: μ νμ κ·Έλ£Ήν
μ¬λ¬ μ νμλ₯Ό κ·Έλ£Ήνν λ, 보ν΅μ κ° μ νμλ₯Ό λ°λ‘ μμ±νκ³€ ν©λλ€.
νμ§λ§ :is()
μ :where()
λ₯Ό μ¬μ©νλ©΄ λ κ°κ²°νκ² μμ±ν μ μμ΅λλ€.
/* κΈ°μ‘΄ λ°©μ */
header h1,
header h2,
header h3 {
color: blue;
}
/* :is() μ¬μ© */
header :is(h1, h2, h3) {
color: blue;
}
/* :where() μ¬μ© */
header :where(h1, h2, h3) {
color: blue;
}
:is()
: μ νμ κ·Έλ£Ήμ λ¬Άμ΄μ μ€νμΌμ μ μ©ν©λλ€.:where()
::is()
μ λΉμ·νμ§λ§, νΉμ΄λκ° 0μ λλ€.
μ΄ μ νμλ€μ 볡μ‘ν μ νμλ₯Ό κ°κ²°νκ² μμ±ν λ μ μ©ν©λλ€.
2. :has()
: μ‘°κ±΄λΆ μ νμ
νΉμ μμλ₯Ό ν¬ν¨νλ λΆλͺ¨ μμλ₯Ό μ νν λ, 보ν΅μ JavaScriptλ₯Ό μ¬μ©νκ³€ ν©λλ€.
νμ§λ§ :has()
λ₯Ό μ¬μ©νλ©΄ CSSλ§μΌλ‘λ μ‘°κ±΄λΆ μ νμ΄ κ°λ₯ν©λλ€.
/* μ΄λ―Έμ§λ₯Ό ν¬ν¨νλ divμ μ€νμΌ μ μ© */
div:has(img) {
border: 2px solid blue;
}
/* νΉμ ν΄λμ€λ₯Ό κ°μ§ μμ μμλ₯Ό ν¬ν¨νλ μμ μ ν */
section:has(.highlight) {
background-color: yellow;
}
:has()
: νΉμ μμλ₯Ό ν¬ν¨νλ λΆλͺ¨ μμλ₯Ό μ νν©λλ€.
μ΄ μ νμλ μμ§ μΌλΆ λΈλΌμ°μ μμλ§ μ§μλμ§λ§, λ§€μ° κ°λ ₯ν κΈ°λ₯μ λλ€.
3. @supports
: κΈ°λ₯ μ§μ μ¬λΆ νμΈ
νΉμ CSS κΈ°λ₯μ΄ λΈλΌμ°μ μμ μ§μλλμ§ νμΈν λ, 보ν΅μ JavaScriptλ₯Ό μ¬μ©νκ³€ ν©λλ€.
νμ§λ§ @supports
λ₯Ό μ¬μ©νλ©΄ CSSλ§μΌλ‘λ κΈ°λ₯ μ§μ μ¬λΆλ₯Ό νμΈν μ μμ΅λλ€.
/* 그리λ λ μ΄μμ μ§μ μ¬λΆ νμΈ */
@supports (display: grid) {
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
}
/* μ¬μ©μ μ μ μμ± μ§μ μ¬λΆ νμΈ */
@supports (--custom-property: value) {
.element {
background-color: var(--custom-property);
}
}
@supports
: νΉμ CSS κΈ°λ₯μ΄ μ§μλλμ§ νμΈν©λλ€.
μ΄ κΈ°λ₯μ μ μ§μ ν₯μ(Progressive Enhancement)μ ꡬνν λ μ μ©ν©λλ€.
4. clip-path
: μμμ νν λ³ν
μμμ ννλ₯Ό λ³νν λ, 보ν΅μ border-radius
λ₯Ό μ¬μ©νκ³€ ν©λλ€.
νμ§λ§ clip-path
λ₯Ό μ¬μ©νλ©΄ λ 볡μ‘ν ννλ₯Ό λ§λ€ μ μμ΅λλ€.
/* μνμΌλ‘ μλ₯΄κΈ° */
.circle {
clip-path: circle(50%);
}
/* λ€κ°νμΌλ‘ μλ₯΄κΈ° */
.polygon {
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
}
/* SVGλ₯Ό μ¬μ©ν 볡μ‘ν νν */
.custom-shape {
clip-path: url(#custom-shape);
}
clip-path
: μμμ ννλ₯Ό λ³νν©λλ€.
μ΄ μμ±μ μ°½μμ μΈ λμμΈμ ꡬνν λ λ§€μ° μ μ©ν©λλ€.
5. aspect-ratio
: μμμ μ’
ν‘λΉ μ€μ
μμμ μ’
ν‘λΉλ₯Ό μ€μ ν λ, 보ν΅μ padding-top
μ μ¬μ©νκ³€ ν©λλ€.
νμ§λ§ aspect-ratio
λ₯Ό μ¬μ©νλ©΄ λ κ°λ¨νκ² μ€μ ν μ μμ΅λλ€.
/* 16:9 λΉμ¨ μ€μ */
.video {
aspect-ratio: 16 / 9;
}
/* μ μ¬κ°ν μ€μ */
.square {
aspect-ratio: 1 / 1;
}
aspect-ratio
: μμμ μ’ ν‘λΉλ₯Ό μ€μ ν©λλ€.
μ΄ μμ±μ λ°μν λμμΈμ ꡬνν λ λ§€μ° μ μ©ν©λλ€.
6. scroll-snap
: μ€ν¬λ‘€ μ€λ
κΈ°λ₯
μ€ν¬λ‘€ μ μμκ° νΉμ μμΉμ μ€λ
λλλ‘ ν λ, 보ν΅μ JavaScriptλ₯Ό μ¬μ©νκ³€ ν©λλ€.
νμ§λ§ scroll-snap
μ μ¬μ©νλ©΄ CSSλ§μΌλ‘λ ꡬνν μ μμ΅λλ€.
.container {
scroll-snap-type: y mandatory;
overflow-y: scroll;
height: 300px;
}
.item {
scroll-snap-align: start;
height: 100px;
}
scroll-snap-type
: μ€ν¬λ‘€ μ€λ νμ μ μ€μ ν©λλ€.scroll-snap-align
: μ€λ μμΉλ₯Ό μ€μ ν©λλ€.
μ΄ μμ±μ μΊλ¬μ (Carousel)μ΄λ νμ΄μ§ μ€ν¬λ‘€μ ꡬνν λ μ μ©ν©λλ€.
7. :empty
: λΉ μμ μ ν
λμ μΌλ‘ μ½ν
μΈ κ° λ‘λλλ μν©μμ λΉ μμλ₯Ό μ²λ¦¬ν λ, 보ν΅μ JavaScriptλ₯Ό μ¬μ©νκ³€ ν©λλ€.
νμ§λ§ :empty
μ νμλ₯Ό μ¬μ©νλ©΄ CSSλ§μΌλ‘λ λΉ μμλ₯Ό μ νν μ μμ΅λλ€.
/* λΉ μμ μ¨κΈ°κΈ° */
.container:empty {
display: none;
}
/* λΉ μμμ νλ μ΄μ€νλ νμ */
.content:empty::before {
content: "λ°μ΄ν° λ‘λ© μ€...";
color: #999;
}
:empty
: μμ μμλ ν μ€νΈκ° μλ μμλ₯Ό μ νν©λλ€.
μ΄ μ νμλ λ‘λ© μνλ λΉ μνλ₯Ό μ²λ¦¬ν λ μ μ©ν©λλ€.
8. writing-mode
: ν
μ€νΈ λ°©ν₯ μ€μ
μΈλ‘ λ°©ν₯ ν
μ€νΈλ₯Ό ꡬνν λ, 보ν΅μ 볡μ‘ν λ μ΄μμ κΈ°λ²μ μ¬μ©νκ³€ ν©λλ€.
νμ§λ§ writing-mode
λ₯Ό μ¬μ©νλ©΄ κ°λ¨νκ² ν
μ€νΈ λ°©ν₯μ λ³κ²½ν μ μμ΅λλ€.
/* μΈλ‘ λ°©ν₯ ν
μ€νΈ (μμμ μλλ‘) */
.vertical-text {
writing-mode: vertical-rl;
}
/* κ°λ‘ λ°©ν₯ ν
μ€νΈ (κΈ°λ³Έκ°) */
.horizontal-text {
writing-mode: horizontal-tb;
}
writing-mode
: ν μ€νΈμ μ°κΈ° λ°©ν₯μ μ€μ ν©λλ€.
μ΄ μμ±μ λ€κ΅μ΄ μ§μμ΄λ μ°½μμ μΈ λ μ΄μμμ ꡬνν λ μ μ©ν©λλ€.
λ§λ¬΄λ¦¬
μ€λμ :is()
, :where()
, :has()
, @supports
, clip-path
, aspect-ratio
, scroll-snap
, :empty
, writing-mode
μ κ°μ νΉμ΄ν CSS μ νμμ μμ±λ€μ μκ°νμ΅λλ€.
CSSλ‘ ν΄κ²°ν μ μλ λ¬Έμ λ JSμ λμμ λ°μ§ μμλ ν΄κ²°ν μ μμ΅λλ€.
νμ§λ§ μ΄λ° μ νμμ μμ±λ€μ μ νμ©νλ©΄,
- λ κ°κ²°νκ³ ν¨μ¨μ μΈ CSSλ₯Ό μμ±ν μ μκ³ ,
- JavaScript μμ‘΄λλ₯Ό μ€μΌ μ μμΌλ©°,
- λ§ν¬μ μ½λλ₯Ό λ κΉλνκ² μμ±ν μ μμ΅λλ€.
κ·ΈλΌ λ€μ λ² νλ‘μ νΈμμ νλ² νμ©ν΄λ³΄λ 건 μ΄λ¨κΉμ?