π transition ν¨κ³Όλ₯Ό μ¬μ©νμ¬ μμ½λμΈ λ©λ΄λ₯Ό λ§λ€μ΄λ΄ μλ€.
β¨ μμ½λμΈ λ©λ΄ : λ§μ°μ€λ₯Ό μ¬λ Έμλ 2μ°¨ λ©λ΄κ° μ€λΌλ½ νκ³ νΌμ³μ§λ ννμ λ©λ΄μ λλ€.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>μμ½λμΈ λ©λ΄ λ§λ€κΈ°</title> <style> @import url("https://fonts.googleapis.com/css2?family=Tektur:wght@400..900&display=swap"); body { font-family: "Tektur", serif; } * { margin: 0; padding: 0; } ul, li { list-style: none; } a { text-decoration: none; color: #222; } /* μΈλ‘ λ©λ΄ */ .nav { width: 200px; /* μ€λΌλ½ ν¨κ³Όλ₯Ό μ£ΌκΈ° μν΄ μ μ© */ overflow: hidden; position: relative; } .nav li { font-size: 16px; background-color: rgb(240, 240, 240); text-align: center; font-weight: 700; border-bottom: 1px solid rgb(239, 239, 239); line-height: 40px; box-sizing: border-box; cursor: pointer; color: #222; } /* 2μ°¨ λ©λ΄ */ .submenu li { font-size: 14px; font-weight: 500; background-color: rgb(249, 249, 249); } .submenu li:last-child { border-bottom: 0; } .submenu li:hover a { color: rgb(255, 66, 195); } /* submenuμ λμ΄λ₯Ό 0μΌλ‘ λ§λ¦ λμ΄κ° μμ΄μ κΈμλ€μ΄ κ²Ήμ³μ§ */ .submenu { height: 0px; overflow: hidden; transition: 0.5s; } /* 1μ°¨ λ©λ΄μ λ§μ°μ€λ₯Ό μ¬λ¦¬λ©΄ .submenuμ λμ΄λ₯Ό 160pxλ‘ λ§λ€μ΄μ 2μ°¨ λ©λ΄λ₯Ό 보μ¬μ€λ€. */ .nav > li:hover .submenu { height: 160px; } </style> </head> <body> <ul class="nav"> <li> menu1 <ul class="submenu"> <li><a href="#">menu1-1</a></li> <li><a href="#">menu1-2</a></li> <li><a href="#">menu1-3</a></li> <li><a href="#">menu1-4</a></li> </ul> </li> <li> menu2 <ul class="submenu"> <li><a href="#">menu2-1</a></li> <li><a href="#">menu2-2</a></li> <li><a href="#">menu2-3</a></li> <li><a href="#">menu2-4</a></li> </ul> </li> <li> menu3 <ul class="submenu"> <li><a href="#">menu3-1</a></li> <li><a href="#">menu3-2</a></li> <li><a href="#">menu3-3</a></li> <li><a href="#">menu3-4</a></li> </ul> </li> <li> menu4 <ul class="submenu"> <li><a href="#">menu4-1</a></li> <li><a href="#">menu4-2</a></li> <li><a href="#">menu4-3</a></li> <li><a href="#">menu4-4</a></li> </ul> </li> <li> menu5 <ul class="submenu"> <li><a href="#">menu5-1</a></li> <li><a href="#">menu5-2</a></li> <li><a href="#">menu5-3</a></li> <li><a href="#">menu5-4</a></li> </ul> </li> </ul> </body> </html>
μμ½λμΈ λ©λ΄ ννμμ κ΅¬μ‘°λ§ μ‘°κΈ λ°κΏμ£Όλ©΄ κ°λ‘λ‘ λμ€λ gnb λ©λ΄λ₯Ό λ§λ€μλ μμ΅λλ€.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>κ°λ‘ λ©λ΄ λ§λ€κΈ°</title> <style> @import url("https://fonts.googleapis.com/css2?family=Tektur:wght@400..900&display=swap"); body { font-family: "Tektur", serif; } * { margin: 0; padding: 0; } ul, li { list-style: none; } a { text-decoration: none; color: #222; } /* μΈλ‘ λ©λ΄ */ .nav { width: 1000px; /* μ€λΌλ½ ν¨κ³Όλ₯Ό μ£ΌκΈ° μν΄ μ μ© */ overflow: hidden; /* μνν μμ μ μν΄ ν¬μ§μ νκ·Έλ₯Ό κ±Έμ΄λκ³ μμ */ position: relative; display: flex; } .nav > li { font-size: 16px; background-color: rgb(240, 240, 240); text-align: center; font-weight: 700; border-bottom: 1px solid rgb(239, 239, 239); line-height: 40px; box-sizing: border-box; cursor: pointer; color: #222; width: 200px; } /* 2μ°¨ λ©λ΄ */ .submenu li { font-size: 14px; font-weight: 500; background-color: rgb(249, 249, 249); } .submenu li:last-child { border-bottom: 0; } .submenu li:hover a { color: rgb(255, 66, 195); } /* submenuμ λμ΄λ₯Ό 0μΌλ‘ λ§λ¦ λμ΄κ° μμ΄μ κΈμλ€μ΄ κ²Ήμ³μ§ */ .submenu { height: 0px; overflow: hidden; transition: 0.5s; } /* .nav > li .submenu 1μ°¨ λ©λ΄μ λ§μ°μ€λ₯Ό μ¬λ¦¬λ©΄ .submenuμ λμ΄λ₯Ό 160pxλ‘ λ§λ€μ΄μ 2μ°¨ λ©λ΄λ₯Ό 보μ¬μ€λ€. */ /* μ 체 λ©λ΄ λ΄λ €μ€κ² νκΈ° */ .nav:hover > li .submenu { height: 160px; } </style> </head> <body> <ul class="nav"> <li> menu1 <ul class="submenu"> <li><a href="#">menu1-1</a></li> <li><a href="#">menu1-2</a></li> <li><a href="#">menu1-3</a></li> <li><a href="#">menu1-4</a></li> </ul> </li> <li> menu2 <ul class="submenu"> <li><a href="#">menu2-1</a></li> <li><a href="#">menu2-2</a></li> <li><a href="#">menu2-3</a></li> <li><a href="#">menu2-4</a></li> </ul> </li> <li> menu3 <ul class="submenu"> <li><a href="#">menu3-1</a></li> <li><a href="#">menu3-2</a></li> <li><a href="#">menu3-3</a></li> <li><a href="#">menu3-4</a></li> </ul> </li> <li> menu4 <ul class="submenu"> <li><a href="#">menu4-1</a></li> <li><a href="#">menu4-2</a></li> <li><a href="#">menu4-3</a></li> <li><a href="#">menu4-4</a></li> </ul> </li> <li> menu5 <ul class="submenu"> <li><a href="#">menu5-1</a></li> <li><a href="#">menu5-2</a></li> <li><a href="#">menu5-3</a></li> <li><a href="#">menu5-4</a></li> </ul> </li> </ul> </body> </html>
π μ λλ©μ΄μ μμ±μ λν΄ μμλ΄ μλ€.
β¨ animation : λΈλΌμ°μ κ° λ‘λ©λλ μκ° λͺ¨μ μ μ§ννλ μ λλ©μ΄μ μμ±μ λλ€.
μ λλ©μ΄μ μμ±μ μ¬μ©μμ λμκ³Όλ κ΄κ³μμ΄ νΌμμ μμ§μμ λ§λλλ€.
`μ΄λ μ λλ©μ΄μ μ νμμμ±κ³Ό @keyframes λͺ¨λμ μ΄μ©νμ¬ μμ§μμ λ§λλλ€.``[μμ±] - animation : νμ μμ±λ€μ νκΊΌλ²μ μ μΈν λ μ¬μ©ν©λλ€. μμ±λΌλ¦¬λ 곡백μΌλ‘ ꡬλΆν©λλ€. - animation-delay : μ λλ©μ΄μ μ μ§μ°μκ°μ μ§μ ν©λλ€. λ¨μλ sλ₯Ό μ¬μ©νκ³ μ§μ λ μκ°μ΄ μ§λλ©΄ κ·Έλ μ λλ©μ΄μ μ μ€νν©λλ€. - animation-direction : μ λλ©μ΄μ μ μ§ν λ°©ν₯μ μ€μ ν©λλ€. μμ± κ°μΌλ‘λ μλμ μμ± κ°λ€μ μ¬μ©ν©λλ€. 1. alternate : μ λλ©μ΄μ μ μμ μ§μ μμ λλλ μ§μ μΌλ‘ μ΄λνλ€κ° λλλ μ§μ μμ λ€μ μμ μ§μ μΌλ‘ μ΄λν©λλ€. (from>to>from) 2. normal : κΈ°λ³Έκ°μ΄λ©° μμμ§μ μμ λλλ μ§μ μΌλ‘ μ΄λνλ κ²μ λ°λ³΅ν©λλ€. 3. reverse : μλ°ν₯μΌλ‘ μμ§μ λλ€. 4. alternate-reverse : μλ°©ν₯μΌλ‘ μμ§μλ€κ° μ λ°©ν₯μΌλ‘ μμ§μΈλ€. - animation-iteration-count : μ λλ©μ΄μ μ λ°λ³΅ νμλ₯Ό κ²½μ ν©λλ€. λ¨μ μμ΄ μ«μλ§ μ°κ±°λ infinite κ°μ μΈ μ μμ΅λλ€. infiniteλ 무ν λ°λ³΅μ λ§ν©λλ€. - animation-name : μ λλ©μ΄μ μ μ΄λ¦μ μ§μ ν©λλ€. classλ id μ΄λ¦ μ§λ―μ΄ μ§μ΄μ€λλ€. β νμ μμ±μ΄λ©° μ λλ©μ΄μ μ μ΄λ¦μ΄ μμΌλ©΄ λμνμ§ μμ΅λλ€. - animation-play-state : μ λλ©μ΄μ μ μ¬μ μνλ₯Ό μ§μ ν©λλ€. λ³΄ν΅ :hover μ νμμ ν¨κ» μ¬μ©ν©λλ€. μ¬μ©μκ° λ§μ°μ€λ₯Ό μ¬λ¦¬κ±°λ μ΄λ€ λμμ νλ©΄ μ λλ©μ΄μ μ λμμ λ©μΆκ±°λ λ€μ μ¬μν μ μμ΅λλ€. κ°μ running(μ¬μνλ€)μ΄λ paused(λ©μΆλ€)λ₯Ό μ¬μ©ν©λλ€. - animation-timing-function : μ λλ©μ΄μ μ μλλ₯Ό μ§μ ν©λλ€. κ°μΌλ‘λ transition-timing-functionμ κ°κ³Ό λμΌν κ°μ μ¬μ©ν©λλ€. (ease, ease-in, ease out, ease-in-out, linear) - animation-fill-mode : λλ¬μ λ λͺ¨μ΅μ μ μ§ν κ²μΈμ§λ₯Ό κ²°μ ν©λλ€. backwardsλ κΈ°λ³Έκ°μΌλ‘ μ λλ©μ΄μ μ΄ λλλ©΄ μλ μλ μμΉλ‘ λμκ°λλ€. (μ΄κΈ°μμΉ) forwardsλ μ λλ©μ΄μ μ μ’ λ£ μμΉμμ κ·Έλλ‘ μ리λ₯Ό μ μ§ν©λλ€. (μ’ λ£ μμΉ)
π @keyframes λͺ¨λμ λν΄ μμλ΄ μλ€.
β¨ @keyframes : animationμΌλ‘ ν΄λΉ νκ·Έμ μμ§μμ μ€μ νλ€λ©΄ μ€μ μμ§μ΄λ λμμ @keyframes λͺ¨λμ΄ λ΄λΉν©λλ€.
@keyframes λͺ¨λμ μ§μ λ μκ°μμ μ΄λ€ λμμ λ§λ€κ²μΈμ§λ₯Ό μ§μ ν©λλ€.
μ λλ©μ΄μ μ λͺ¨μ ν¨κ³Όλ₯Ό μ§μ ν λ μ΄κ²μ 'ν€νλ μ'μ΄λΌκ³ λΆλ¦ λλ€.
ν€νλ μμ μ λλ©μ΄μ μ΄ λ³κ²½λλ λͺ¨λ μ§μ μ λ§ν©λλ€.
@keyframes μ€μ μ ν λμλ ν€νλ μ μμμ μκ°μ μν΄ λ³νλλ λΆλΆμ 'μ νμ'λ‘ κ΅¬λΆν©λλ€.
μ νμλ 0% λλ fromμ΄λΌκ³ μ°λ©΄ μ λλ©μ΄μ μ μμμ§μ (0μ΄ μ§μ )μ λ§νκ³ , 100% λλ toλΌκ³ μ°λ©΄ μ λλ©μ΄μ μ΄ λλλ μ§μ μ λ§ν©λλ€.
[κΈ°λ³Έν] μ νμ{ animation : μμ±1 μμ±2....; } @keyframes μ λλ©μ΄μ μ΄λ¦{ from λλ 0% { μ€νμΌ μμ±: κ° } 50% { μ€νμΌ μμ± : κ° } to λλ 100% { μ€νμΌ μμ± : κ° } }
π will-changeμ λν΄ μμλ΄ μλ€.
β¨ will-change : transitionμ΄λ animation μμ μ μννλ λμ λΈλΌμ°μ μ κΉλΉ‘μμ΄λ λ¨λ¦Όνμμ΄ μκΈΈ μ μμ΅λλ€.
will-changeμμ±μ λΈλΌμ°μ μκ² μμμ μμ λ³κ²½ μ¬νμ μλ €μ£Όλ μμ±μ λλ€.
μ΄ μμ±μ μ¬μ©νλ©΄ λΈλΌμ°μ λ μμκ° μ€μ λ‘ μ€νμΌ λ³νμ΄ νμν λ
νμν 리μμ€λ₯Ό μ¬μ μ μ΅μ ν νμ¬ μμμ μ€νμΌ λ³κ²½κ³Ό λλλ§μ λ λΉ λ₯΄κ³ μ΅μ ν λ λ°©μμΌλ‘ μ²λ¦¬ ν©λλ€.
will-changeμ μμ±κ°μΌλ‘λ μ λλ©μ΄μ (ν€νλ μ)κ³Ό transition λλ transformμΌλ‘ λ³νμν¬ μμ±μ μμ±λͺ μ μ¬μ©ν©λλ€.
[will-changeμ λ£μ΄μ£Όλ©΄ μ’μ μμ±κ°] - auto : λ³κ²½ μμ μΈ μμ±μ λν μ΅μ νλ₯Ό μλμΌλ‘ μ²λ¦¬νκΈ° μν΄ λΈλΌμ°μ κ° κ²°μ ν©λλ€. - scroll-position : μ€ν¬λ‘€ μμΉμ λν μ΅μ νλ₯Ό μννκΈ° μν΄ λΈλΌμ°μ κ° μλμΌλ‘ μ²λ¦¬ν©λλ€. - contents : μμ λ΄μ©μ λ³κ²½μ λν μ΅μ νλ₯Ό μννκΈ° μν΄ λΈλΌμ°μ κ° μλμΌλ‘ μ²λ¦¬ν©λλ€. - opacity : ν¬λͺ λ λ³κ²½μ λν μ΅μ νλ₯Ό μννκΈ° μν΄ λΈλΌμ°μ κ° μλμΌλ‘ μ²λ¦¬ν©λλ€. - transform : λ³ν μμ±μ λν μ΅μ νλ₯Ό μννκΈ° μν΄ λΈλΌμ°μ κ° μλμΌλ‘ μ²λ¦¬ν©λλ€. - perspective : μκ·Όκ° λ³κ²½μ λν μ΅μ νλ₯Ό μννκΈ° μν΄ λΈλΌμ°μ κ° μλμΌλ‘ μ²λ¦¬ν©λλ€. - left/top/right/bottom : μ’νκ° λ³κ²½μ λν μ΅μ νλ₯Ό μννκΈ° μν΄ λΈλΌμ°μ κ° μλμΌλ‘ μ²λ¦¬ν©λλ€. - filter : filter μμ±μ λν μ΅μ νλ₯Ό μννκΈ° μν΄ λΈλΌμ°μ κ° μλμΌλ‘ μ²λ¦¬ν©λλ€. - color / background-color : μμ λ³κ²½μ λν μ΅μ νλ₯Ό μννκΈ° μν΄ λΈλΌμ°μ κ° μλμΌλ‘ μ²λ¦¬ν©λλ€. - all : λͺ¨λ λ³κ²½μ λν μ΅μ νλ₯Ό μν΄ λΈλΌμ°μ κ° μλμΌλ‘ μ²λ¦¬νλ€.
π object-fitμ λν΄ μμλ΄ μλ€.
β¨ object-fit : μ΄λ―Έμ§λ λΉλμ€λ± 컨ν μΈ κ° μ¬μ©λ λμ΄μ λμ΄μ λ°λΌ μ€μ λ λΆλͺ¨ μμμ μ΄λ»κ² λ§μΆ°μ ΈμΌ νλμ§ κ²°μ ν©λλ€.
μΉ λ¬Έμμμ μ΄λ―Έμ§λ λΉλμ€ κ°μ μκ° μμλ λ°μνμΌλ‘ ν¬κΈ°κ° λ°λλ©΄
μλ μ΄λ―Έμ§λ λΉλμ€μ κ°λ‘ μΈλ‘ λΉμ¨μ κ·Έλλ‘ μ μ§νκΈ° μ΄λ ΅λ€.
object-fitμ μ¬μ©νλ©΄ 컨ν μΈ (μ΄λ―Έμ§λ λΉλμ€)μ κ°λ‘ μΈλ‘ λΉμ¨μ μ μ§νλ©΄μ ν΄μλμ λ§κ² μ΄λ―Έμ§ ν¬κΈ°λ₯Ό μ‘°μ ν μ μμ΅λλ€.
[μμ±κ°] - fill : κΈ°λ³Έκ°μΌλ‘ 컨ν μΈ μ μλ λΉμ¨μ 무μνκ³ μμμ μ 체 μμμ μ±μλλ€. - contain : λΉμ¨μ μ μ§νλ©΄μ μμμ μ 체 μμμ λ§μΆ μ μμλ§νΌ νλν©λλ€. μμμ λͺ¨λ μ±μ°μ§ λͺ»ν μλ μμ΅λλ€. - cover : λΉμ¨μ μ μ§νλ©΄μ μμμ μ 체 μμμ λ§μΆ μ μμλ§νΌ νλν©λλ€. μμμ μ±μΈ λ 컨ν μΈ μ μΌλΆλ₯Ό μλ₯Ό μλ μμ΅λλ€. - none : 컨ν μΈ μ μλ ν¬κΈ°λ₯Ό μ μ§ν©λλ€. - scale-down : noneκ³Ό containμ€ ν¬κΈ°κ° λ μμμ§λ κ°μΌλ‘ μ€μ νλ€.
π CSSμ μ€νμΌκ°μ΄λ! :rootμ varμ λν΄ μμλ΄ μλ€.
β¨ :rootμ νμ
cssκ° μ²μ λ±μ₯νμ λμλ λ¨μν μ€νμΌλ§λ§ κ°λ₯νμ΅λλ€.
μλ₯Ό λ€μ΄μ, μμμ΄λ κΈκΌ΄, μ€κ°κ²© λ± μ¬μ΄νΈμ κ²λͺ¨μ΅λ§ μ μ΄νλ μμ±λ§ μ 곡νμ΅λλ€.
νμ§λ§ μΉνμ΄μ§μ μ ν리μΌμ΄μ μ΄ μ μ λ 볡μ‘ν΄μ§λ©΄μ μ€νμΌμ λ μΈλ°νκ² μ μ΄ν λ°©λ²μ΄ νμν΄μ‘μ΅λλ€.
κ·Έλ κ² λ±μ₯ν κ²μ΄ css ν¨μ μ λλ€.
css ν¨μλ νΉμ κΈ°λ₯μ λ§νλ©° ()μμ μ¬λ°λ₯Έ κ°μ λ£μ΄ μ€νν©λλ€.
:rootμ νμλ λ¬Έμμ μ΅μμ μμλ₯Ό λ§ν©λλ€. μ¦, html νκ·Έλ₯Ό λ§ν©λλ€.
:rootλ₯Ό μ¬μ©νλ μ΄μ λ cssμμ 'λ³μ'λΌλ κ²μ μ¬μ©νκΈ° μν΄μ μ λλ€.
:rootλ μΉλ¬Έμμμ μ¬μ©ν μ€νμΌλ€μ μ 체μ μΌλ‘ μ μΈνλ 곡κ°μΌλ‘, μΌμ’ μ 'μ€νμΌ κ°μ΄λ'λ‘ μ¬μ©ν©λλ€.
:rootμμ μ¬μ©ν μ€νμΌμ λ³μλ‘ μ μΈνλ©΄ μΌκ΄μ μΈ λμμΈμ μ½κ² μ μ§ν μ μμ΅λλ€.
β¨ CSS λ³μ
λ³μλ νμν λλ§λ€ κ°μ μ μ₯ν΄λκ³ μ¬μ©νλ λ°μ΄ν° κ·Έλ¦μ λ§ν©λλ€.
μ΄ λ°μ΄ν°κ° λ°λμ΄μΌ νλ€λ©΄ κ·Έ κ°μ λ°κΏ μλ μμ΅λλ€.
cssμμ μ¬μ©νλ λ³μλ λ§μΉ νΌκ·Έλ§μ μ»΄ν¬λνΈμ²λΌ μΌκ΄μ μΈ λμμΈμ μ μ§νκΈ° μν΄
미리 μΉ λ¬Έμμμ μ¬μ©ν μμ±κ³Ό μ€νμΌμ μ΄λ¦μ λΆμ¬μ μ μ₯νλ μν μ ν©λλ€.
cssλ³μλ₯Ό μ°λ λ°©λ²μ :rootμ {}μμ νμ΄ν λκ°λ₯Ό μμ λΆμ¬ λ³μ μ΄λ¦μ μ§μ΄μ μ¬μ©ν©λλ€.
λ¨, λ³μ μ΄λ¦μ μ§μ λμλ μλ¬Έμλ‘λ§ μ§μ΄μΌ ν©λλ€.
[κΈ°λ³Έν] :root{ --λ³μμ΄λ¦ : κ°; } var() ================================================================== λ³μμ μ μ₯νλ κ°μ νμνλ ν¨μμ λλ€. κ°μ νμν λμλ var()μκ΄νΈ μμ '--λ³μμ΄λ¦'μ λ£μΌλ©΄ κ·Έμ ν΄λΉνλ κ°μ΄ μ μ©λ©λλ€. [κΈ°λ³Έν] μ νμ{ color : var(--λ³μμ΄λ¦); }
π¨οΈ μμΌλ‘ μ§μ 곡λΆν λ΄μ©μ λ°νμΌλ‘ μμ±ν κΈμ΄λλλ€ !
βοΈ
μμΌλ‘λ μ΄μ¬ν 곡λΆν΄μ λ§μ λ΄μ©μ 곡μ νκ² μ΅λλ€ :)