π¨ ν¨μ€νΈμΊ νΌμ€/κ³΅λΆ κΈ°λ‘
[221003-221007] μ€νλ² μ€ μμ
Jane K
2022. 10. 14. 16:59
1. favicon
λ©μΈ ν΄λμ favicon.ico λκ³ title νκ·Έ λ°μ μλ μ½λ μ½μ
<link rel="icon" href="favicon.ico" />
2. μ€ν κ·Έλν, νΈμν° μΉ΄λ
- title νκ·Έ λ°μ μ°¨λ‘λ‘ μ½μ
- seo : κ²μ μμ§μ λ ΈμΆλλ μ 보 μ΅μ ν
- μ€ν κ·Έλν
<meta property="og:type" content="website" />
<!-- νμ΄μ§μ μ ν -->
<meta property="og:site_name" content="jane" />
<!-- μ¬μ΄νΈ μ΄λ¦ -->
<meta property="og:title" content="jane coding" />
<!-- νμ΄μ§ μ΄λ¦ -->
<meta property="og:description" content="janeμ κ°λ°μλ°" />
<!-- νμ΄μ§μ λν μ€λͺ
-->
<meta property="og:image" content="../img/jane_seo.jpg" />
<!-- νμ΄μ§μ λν μ΄λ―Έμ§ -->
<meta property="og:url" content="https://jane-it-story-blog.tistory.com/" />
<!-- νμ΄μ§ μ£Όμ -->
- νΈμν° μΉ΄λ
<meta property="twitter:card" content="summary" />
<!-- νμ΄μ§μ μ ν -->
<meta property="twitter:site" content="jane" />
<!-- μ¬μ΄νΈ μ΄λ¦ -->
<meta property="twitter:title" content="jane coding" />
<!-- νμ΄μ§ μ΄λ¦ -->
<meta property="twitter:description" content="janeμ κ°λ°μλ°" />
<!-- νμ΄μ§μ λν μ€λͺ
-->
<meta property="twitter:image" content="../img/jane_seo.jpg" />
<!-- νμ΄μ§μ λν μ΄λ―Έμ§ -->
<meta property="twitter:url" content="https://jane-it-story-blog.tistory.com/" />
<!-- νμ΄μ§ μ£Όμ -->
3. google font
- main.css μμ link μ½μ
- main.css μ font-family: ~ 볡λΆ
- λΈλΌμ°μ κ° λ¬λΌλ λμΌν ν°νΈκ° λμ€κ² ν νμ μμ
4. κ΅¬κΈ material icon
- μ¬μ΄νΈ - λ‘κ³ - getting started - getting start μ link νκ·Έλ§ λ³΅λΆ
- icons μμ μνλ μμ΄μ½μ μ½λ 볡λΆ
- ν°νΈ μ¬μ΄μ¦λ‘ ν¬κΈ° μ‘°μ
5. λ‘κ³
- common - κ³΅ν΅ (곡ν΅μΌλ‘ λ£μ΄μΌ ν μ€νμΌλ§μ μ μ©)
- μν κ°μ΄λ°λ‘ μμΉ μν€κΈ°
.content{
width: 300px;
height: 300px;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
6. μλΈ λ©λ΄
- a νκ·Έλ‘ λ€λ₯Έ κ³³μΌλ‘ μ΄λν κ±΄λ° λ§ν¬κ° μ€λΉλμ§ μμλ€λ©΄ href μ # μ΄λ javascript:void(0) ν΄μ£Όλ©΄ μ΄λνμ§ μκ³ μλνμ§ μκ² λ€ λΌλ λ», # 보λ€λ void λ₯Ό κΆμ₯.
- position μμ±μ absolute μ fixed μμ±κ°μ κΈ°λ³Έμ μΌλ‘ μμκ° display: block μ²λ¦¬
7. κ²μ
- λΆλͺ¨ μμμ μμ μμλ₯Ό κ°μ΄ λΆλ₯΄λ €λ©΄ document.querySelector 2κ°λ₯Ό ν΄μ£Όλ κ²μ΄ μλλΌ λΆλͺ¨μμλ₯Ό λΆλ₯΄κ³ λΆλͺ¨μμ λ³μλ₯Ό document μ리μ λ£μ΄μ£Όκ³ μκ΄νΈ μμλ μμμμλ§ μ μ΄μ£Όλ©΄ λ¨
- input μλ§ css λ‘ focus λ₯Ό 쀬기 λλ¬Έμ κ²μ μμ΄μ½μ λλ₯΄λ©΄ λμ€μ§ μμ μ΄κ±΄ js λ‘ μ²λ¦¬ν΄μ€μΌ ν¨
- κ·Έλμ ν΄λΉ μμμ λλ₯΄λ©΄ focus ν¨κ³Όλ₯Ό μ£Όλλ‘ μ€μ νλ €λ©΄ λΆλͺ¨ μμμ μ΄λ²€νΈλ₯Ό μΆκ°νμ¬ ν΄λ¦νλ©΄ input μμμ focus λλλ‘ μ€μ
- κ·Έλ¦¬κ³ input μμμ focus λλ©΄ μ΄λ²€νΈλ₯Ό μΆκ°νμ¬ λΆλͺ¨ μμμ focus λλ©΄ μμ΄μ½μ΄ μ¬λΌμ§λ ν¨κ³Όλ₯Ό μ€ css class λ₯Ό μΆκ°νκ³ , input μλ placeholder μ ν΅ν©κ²μμ΄ λ¨λλ‘ μμ±μ μΆκ°.
- λ°λλ‘ input μμμ blur λλ©΄ λ°λλ‘ class λ₯Ό μ§μ°κ³ , placeholder μλ λΉκ°μ΄ λ¨λλ‘ μμ±μ μΆκ°.
8. λ©μΈ λ©λ΄
- λ©μΈ λ©λ΄ μ΄λ¦μλ§ hover νμ λ νμ 컨ν μΈ κ° λ¨λλ‘ νλ κ²μ΄ μλλΌ νμ 컨ν μΈ λ μν₯μ΄ κ°κΈ° λλ¬Έμ μ΄λ¦κ³Ό νμ 컨ν μΈ λ₯Ό ν¨κ» κ°μΈκ³ μλ λΆλͺ¨ μμμ hover λ₯Ό μ μ©ν΄μΌ ν¨
- νμ 컨ν μΈ μ μμΉμ position fixed λ₯Ό μ§μ , top μ΄λ bottom κ°μ μμ§ μμΉ κ°μ΄ μλ€λ©΄ μμμ μλ μμΉλ₯Ό μ¬μ©ν¨. λ§μ½ position absolute λ₯Ό μ¬μ©νλ€λ©΄ λΆλͺ¨ μμλ₯Ό κΈ°μ€μΌλ‘ νκΈ° λλ¬Έμ νλ©΄μ μ’μ° λκΉμ§ λμ΄λ μ μκ² λ¨
- 컨ν μΈ μ μ’μ° λμ΄κ° λμΌν λΆλΆμ΄ κ³μλλ€λ©΄ common κ³΅ν΅ λΆλΆμ .inner λΌλ ν΄λμ€λ₯Ό κ°μ§ 컨ν μΈ λ€μ λͺ¨λ κ°μ μμΉμ μλλ‘ μ€μ
9. bem
- html ν΄λμ€ μμ±μ μλͺ λ²μΌλ‘ block element modifier μ μ½μ
- μμ__μΌλΆλΆ : underscore κΈ°νΈλ‘ μμμ μΌλΆλΆμ νμ
- μμ--μν : hyphen κΈ°νΈλ‘ μμμ μνλ₯Ό νμ, ex) btn btn--error → λ²νΌμΈλ° μλ¬μΈ λ²νΌμ λ»ν¨
10. μ μ λ°°μ§: κ³ μ λ°°λ
- position absolute μ fixed λ block μΌλ‘ μ²λ¦¬λλ€κ³ νλλ° block μμλ κ°λ‘ λμ΄λ₯Ό μ΅λν λμ΄λλ €κ³ μλνμ§λ§ absolute μ fixed μ κ²½μ° μ΅μνμΌλ‘ μ€μ΄λ€λ €κ³ μλν¨
- μ€ν¬λ‘€μ΄ λ΄λ €κ°λ©΄ λ°°μ§λ μ¬λΌμ§λλ° μ΄κ²μ js λ‘ κ΅¬ν
- window μ°½μ scroll μ΄λ²€νΈλ₯Ό μΆκ°ν κ±΄λ° μ€ν¬λ‘€μ΄ λ λλ§λ€ ν΄λΉ ν¨μκ° μ€νλκΈ° λλ¬Έμ νλ©΄μ΄ λ²λ² μΌ μ μμ λ°λΌμ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν κ²μ
- lodash cdn : lodash.js νμ΄μ§ 맨 μμ μλ html νκ·Έ λ₯Ό 볡μ¬ν΄μ main. js νμΌ μμͺ½μ λΆμ¬λ£κΈ°
- μ΄λ²€νΈ ν¨μμ 'scroll' μ μ΄μ λλ²μ§Έ λ§€κ°λ³μλ‘ _.throttle( ) μ΄λΌλ ν¨μλ₯Ό λΆλ¬μ€κ³ μκ΄νΈ μμ 첫λ²μ§Έ λ§€κ°λ³μλ‘λ μ€νν ν¨μλ₯Ό λλ²μ§Έλ‘ μκ°(ms)μ μ λ ₯νλ©΄ κ·Έ μκ°λ§νΌλ§ ν¨μλ₯Ό μ€νν μ μμ
- μ€νν ν¨μμλ if λ¬Έμ μ¬μ©νμ¬ window μ scrollY κ° 500 λ³΄λ€ μ»€μ§λ©΄ λ°°μ§λ₯Ό μ§μ°κ³ μλλ©΄ λμ€κ² νλλ‘ μ€μ
- νμ§λ§ μ λ κ²λ§ νλ©΄ μμ§μμ΄ λΆμμ°μ€λ½κΈ° λλ¬Έμ gsap μ μ λλ©μ΄μ μ μ²λ¦¬ν΄μ£Όλ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν κ² gsap cdn μλ¨μ html νκ·Έλ₯Ό 볡μ¬ν΄μ main.js νμΌ μμͺ½μ λΆμ¬λ£κΈ°
- λ€μ if μμ gsap μΌλ‘ μ λλ©μ΄μ ν¨κ³Όλ₯Ό μ€κ±΄λ° gsap.to( ) λ₯Ό μ΄μ©νμ¬ μκ΄νΈ μμλ μ°¨λ‘λλ‘ μ μ©ν μμ, μ§μμκ°(s), μ μ©ν μ΅μ μ μ μ΄μ£Όλ©΄ λ¨ → gsap.to(badgeEl, .6, { opacity: 0, display: 'none' })
- μ¬κΈ°μ opacity μ display λ₯Ό κ°μ΄ μ£Όλ μ΄μ λ opacity λ§ μ£Όλ©΄ ν΄λΉ μμκ° ν¬λͺ ν΄μ Έ μμ΄μ Έλ³΄μ΄λ κ²μ΄μ§ νλ©΄ μμλ λ¨μ μμ΄ display κ°μ κ°μ΄ μ£Όλ κ²μ΄κ³ , display λ§ μ£Όλ©΄ ν΄λΉ μμ±μ μ«μκ° μλ μμ±μ΄λΌ μ ν μνμ μ€κ°κ°μ΄ μ‘΄μ¬νμ§ μμ μμ°μ€λ¬μ΄ μ ν ν¨κ³Όλ₯Ό μ μ©ν μ μμ΄ opacity κ°μ κ°μ΄ μ£Όλ κ²
11. μ μ λ²νΌ μ€νμΌ
- λΉμ·ν μ€νμΌμ λ²νΌμ μ μμΌλ‘ μΈ κ²μ΄κΈ° λλ¬Έμ common μ btn μΌλ‘ css λμΌνκ² μμ±νκ³ hover, btn κ³Ό λμΌν ꡬ쑰μ§λ§ λ°λ μ€νμΌμΈ reverse μ λ€λ₯Έ μμμ λ²νΌμΈ brown, gold, white λ μ€λ³΅ ν΄λμ€λ‘ κ°μ΄ μμ±. μ΄λ class μ΄λ¦μ μμμ μνλ₯Ό νμνλ bem μΌλ‘ μμ±ν κ².
12. μμ°¨μ μΌλ‘ μμ 보μ΄κΈ°
- λ°°μΉν μ΄λ―Έμ§λ₯Ό μλ‘κ³ μΉ¨νλ©΄ μμ°¨μ μΌλ‘ μ΄λ―Έμ§κ° λνλλλ‘ μ€μ .
- ν΄λΉ μμμ κ° fade-in class μ μ©νκ³ css μ opacity: 0 μΌλ‘ νλ©΄μ μ 보μ΄κ² μ€μ .
- js μμ ν΄λΉ μμλ₯Ό λͺ¨λ κ°μ Έμμ λ³μ(fadeEls)λ‘ λ¬Άμ΄μ μ μ©νκ³ forEach λ¬ΈμΌλ‘ κ°κ° νλμ© μ λλ©μ΄μ μ΄ λλ©΄μ μ μ©λλλ‘ μ€μ . ν¨μμ λ§€κ°λ³μλ‘λ κ° μμμ μ΄λ¦(fadeEl)κ³Ό index λ₯Ό μ€μ νκ³ ν¨μ μμλ λΌμ΄λΈλ¬λ¦¬λ‘ gsap.to( ) λ₯Ό μ΄μ©νμ¬ fadeEl μ 1μ΄μ μ§μμκ°μΌλ‘ opacity: 1 λ‘ μμκ° λνλκ² νκ³ delay λΌλ μ΅μ μΌλ‘ index λΉ νλμ© μ°¨λ‘λλ‘ λνλκ² 0.7μ΄λ₯Ό κ³±νκ² μ€μ . μ΄λ index λ 0λ²λΆν° μμνλ―λ‘ 0 κ³±νκΈ° 0.7μ΄λ₯Ό νλ©΄ 0 μ΄ λμ΄ index μ λνκΈ° 1μ ν΄μ€ κ²
13. μμ μ¬λΌμ΄λ: 곡μ§μ¬ν
- html κ΅¬μ‘°λ‘ μ’μ° λ°°κ²½κ³Ό inner λ₯Ό νμ μμλ‘ λ λ€μ, css λ‘ κ° λ°°κ²½μ height: 100% λ‘ νκ³ κ°μΈλ λΆλͺ¨ μμμλ height λ₯Ό μ μ©νμ§ μμΌλ©΄ auto λ‘ μ€μ μ΄ λλλ° inner μ height κ°μ μ§μ ν΄μ£Όλ©΄ λΆλͺ¨ μμμ height κ°μ΄ μκΈ° λλ¬Έμ μ€μ΄λ€λ €κ³ νλ€κ° κ°μ΄ μ μ©λμ΄ μλ inner μ λ§μΆ° κ°μ΄ λΆλͺ¨ μμμλ λμΌνκ² μ μ©λκ³ absolute λ‘ μ€μ λμ΄ μλ κ° λ°°κ²½μλ μμ°μ€λ½κ² λΆλͺ¨ μμμ λμΌνκ² μ μ©λ inner μ height κ°μ΄ μ μ©.
- μ§λ¬Έ) css λ‘ inner μμ μμ μμμκ² λ°°κ²½μμ μ£Όκ³ κ°μ λλ €μ€¬λλ° μ μ΄μ inner μ νμ μμμΈ λ°°κ²½μκ² κ°μ λλ €μ£Όλ©΄ λλ κ±° μλμ§? inner μμμ μλν΄μΌ νκΈ° λλ¬Έμ κ·Έλ° κ²μΈμ§?
- display: flex μ κ²½μ° λ³λμ λμ΄ κ°μ μ£Όμ§ μμλ align-items: strectch, μ¦ μ΅λλ‘ μ‘μ. λ¨ μ λ ¬μ μν΄ λ€λ₯Έ μμ±κ°μ μ μ©νλ©΄ λμ΄ κ°μ μ μ©νμ§ μμ μμ μμκ° μ‘μλ¨ΉνκΈ° λλ¬Έμ ν΄λΉ μμ μμμκ² λμ΄ κ° λΆμ¬ν΄ μ€ κ²
14. μμ μ¬λΌμ΄λ: swiper.js, μμ§ μ¬λΌμ΄λ
- 6λ²μ , 7/8 λ²μ λ€λ¦ - 6λ²μ μ html ꡬ쑰μμ class μ΄λ¦μ swiper-container λ‘, 7/8 λ²μ μ swiper λ‘ μ€μ .
- swiper : get started → use swipter from cdn : min.css, min.js head μμ λ³΅λΆ → add swiper html layout : λ³΅λΆ (btn, pagination μ μ ν)
- new Swiper ( ) λ‘ μμ±μ(class) ν¨μλ₯Ό μ΄μ©ν΄ 첫λ²μ§Έ μΈμλ‘ ν΄λΉ swiper μμμ μ νμλ₯Ό μμ±νκ³ λλ²μ§Έ μΈμλ‘ μ΅μ μ μμ±. μ΅μ μΌλ‘λ μμ§ μ¬λΌμ΄λλ₯Ό μΈ κ²μ΄λ direction: 'vertical' , μλμΌλ‘ λμ΄κ°κ² ν κ²μ΄λ autoplay: true, λ©μΆμ§ μκ³ λ°λ³΅ν κ²μ΄λ loop: true λ₯Ό μ μ©.
15. μμ μ¬λΌμ΄λ: μμ κ°μ΄λ° λ°°μΉ
- css λ‘ κ° κ³μ°νκΈ° : calc( ) ν¨μ - μλ₯Ό λ€μ΄ μμ μμ μΈκ°κ° κ° 819px μ΄κ³ κ·Έ μ¬μ΄ μ¬λ°±μ΄ ν©μ³μ 20px μΌ λ κ³μ°ν΄μ μ§μ κ°μ μ μ©νλ κ²μ΄ μλλΌ clac(819px * 3 + 20px) λ‘ μμ±ν΄μ£Όλ©΄ css μμ μλμΌλ‘ κ³μ°μ΄ κ°λ₯
- νλ©΄ λΉμ¨μ΄ μ»€μ Έλ μμ κ°μ΄λ° λ°°μΉ : position : absolute λ‘ μ μ© ν μμ μμ(view port) μμμ left: 50% μ μ©νμ¬ μ€μμ κΈ°μ€μΌλ‘ μ€λ₯Έμͺ½μ μμΉμν€κ³ , margin-left: clac( (819px * 3 + 20px) / -2 ) μ μ©νμ¬ ν΄λΉ μμ μ 체 λμ΄ κ°μ λ°λ§νΌ μ¬λ°±μ μμ μ μμλ₯Ό κ°μ΄λ°λ‘ λ°°μΉ
16. μμ μ¬λΌμ΄λ: νλ‘λͺ¨μ μ΄λ―Έμ§ μ¬λΌμ΄λ
- new Swiper( ) λ₯Ό μ΄μ©ν΄ μ΅μ μΌλ‘ νλ²μ 보μ¬μ€ μ¬λΌμ΄λ κ°μκ° 3κ°μ΄λ slidesPerView: 3, μ¬λΌμ΄λ μ¬μ΄ μ¬λ°± 10px μ λ£κΈ° μν΄ spaceBetween: 10, 첫λ²μ§Έλ‘ λ³΄μΌ μ¬λΌμ΄λκ° κ°μ΄λ°μ 보μ΄κΈ° μν΄ centeredSlides: ture, μ΄λ 첫λ²μ§Έλ‘ λ³΄μΌ μ¬λΌμ΄λλ₯Ό κ°μ΄λ°λ‘ μ€μ νκΈ° λλ¬Έμ μ¬λΌμ΄λ μ λμ μ¬λ°±μ΄ μκΈ°κ² λλλ° loop: true λ‘ μ μ©
- μ΄λ κ°λ°μ κ²μ¬λ₯Ό ν΄λ³΄λ©΄ κ°μ΄λ° 보μ΄λ μ¬λΌμ΄λμ class μ΄λ¦μ swiper-slide-active λΌκ³ μΆκ°κ° λμ΄ μλλ° centeredSlides: ture μ΅μ λλ¬Έμ μΆκ°κ° λ κ²μ. κ°μ΄λ° μ¬λΌμ΄λλ₯Ό μ μΈνκ³ λλ¨Έμ§λ λ°ν¬λͺ νκ² ν΄μ€ κ²μ΄κΈ° λλ¬Έμ css λ‘ μ 체 μ¬λΌμ΄λμ opacity: .5 λ₯Ό μ μ©ν ν swiper-slide-active μλ§ opacity: 1 μ μ μ©
- νμ΄μ§ λ§€κΉκ³Ό λ€μ, μ΄μ λ²νΌμ μ μ©νκΈ° μν΄ html ꡬ쑰μ swiper μ slide νμ μμλ‘ pagination κ³Ό next, prev λ²νΌ ꡬ쑰λ₯Ό μΆκ°
- νμ΄μ§ λ§€κΉμ μν΄ swiper μ΅μ μΌλ‘ pagination μ μ μ΄μ£Όκ³ ν΄λΉ μ΅μ μ μ€κ΄νΈ μμ ν΄λΉ μ΅μ μ λν μ΅μ μ μ μ©ν μ μλλ° νμ΄μ§ λ²νΈ μμ μ νμλ₯Ό μ§μ ν΄μ£Όλ el μ ν΄λΉ μμμ class μ΄λ¦μ μ μ΄μ£Όκ³ , μ¬μ©μκ° μκ°μ μΌλ‘ νμ΄μ§λ₯Ό λ³Ό μλ§ μλ κ²μ΄ μλλΌ ν΄λ¦λ κ°λ₯νλλ‘ clickable: true μ μ©
- λ€μ, μ΄μ λ²νΌμ μν΄ swiper μ΅μ μΌλ‘ navigation μ μ μ΄μ£Όκ³ ν΄λΉ μ΅μ μ μ΅μ μΌλ‘ νμ΄μ§ λ²νΈ μμ μ νμλ₯Ό μ§μ ν΄μ£Όλ prevEl κ³Ό nextEl μ ν΄λΉ μμμ class μ΄λ¦μ μ μ©
- pagination λ²νΌμλ swiper κΈ°λ³Έ css μ€νμΌμ΄ μλλ° κ·Έ μ€ position: absolute κ° μμ΄ λ°λ‘ μ μ©νμ§ μμλ λ¨
- λ€μ, μ΄μ λ²νΌ μμΉλ κ°μ΄λ° λ°°μΉνμ λλ λΉμ·νκ² right, margin-right λ₯Ό μ¬μ©ν΄μ μ μ©
17. μμ μ¬λΌμ΄λ: μ¬λΌμ΄λ μμ ν κΈ
- μ¬λΌμ΄λ μμ λΆλΆκ³Ό ν κΈ λ²νΌμ κ°μ Έμ λ³μλ‘ μ μ©νκ³ let μΌλ‘ ν΄λΉ μμμ΄ λ³΄μ΄κ³ μμΌλ κΈ°λ³Έκ°μΌλ‘ isHidePromotion μ flase λ‘ ν λΉ.
- ν κΈ λ²νΌμ μ΄λ²€νΈλ₯Ό μΆκ°νμ¬ ν΄λ¦νλ©΄ isHidePromotion μ true λ‘ λ³κ²½νλ€λ λ»μΌλ‘ ! λ Όλ¦¬λΆμ μ°μ°μλ₯Ό μ¬μ©νμ¬ λ€μ ν λΉν΄μ£Όκ³ if λ¬Έμ μ¬μ©νμ¬ isHidePromotion (true) μΌ κ²½μ° μ¬λΌμ΄λ μμμ hide class λ₯Ό μΆκ°, else λ‘ μ¬λΌμ΄λ μμμ hide class λ₯Ό μ§μ°κ² μ μ©
18. μ νλΈ μμ λ°°κ²½: Youtube iframe API
- 16:9 λΉμ¨ κ³μ° - λΆλͺ¨ μμμ width κ°λ§ μ§μ νκ³ μμ μμμ width: 100%, height: 0, padding-top: 56.25% λ₯Ό μ§μ ν΄μ£Όλ©΄ λΆλͺ¨ μμμ height λ₯Ό μ§μ ν΄μ£Όμ§ μμλ padding-top μ 56.25% λ₯Ό μ§μ ν΄μ£Όλ©΄ λΆλͺ¨ μμμ width κ°μ λ°λΌ ν¬κΈ°κ° λ§μΆ°μ§(μμ μΆλ ₯ν λ λ§μ΄ μ¬μ©)
- μ νλΈ μμ λ°°κ²½ : html ꡬ쑰λ₯Ό youtube > youtube__area > id : player λ‘ ν κ±΄λ° youtube__area λ°μ 16:9 λΉμ¨μ μν΄ μμ μμκ° νμνλ° μ€νμΌμ μν κ²μ΄λΌλ©΄ ::before λ‘ μ‘°μ . before μ width: 100%, height: 0, padding-top: 56.25% μ μ©. νλ©΄ μ’μ° κ°μ΄λ°μ, λΆλͺ¨ κΈ°μ€ μν κ°μ΄λ°μ μμΉν΄μΌ νκΈ° λλ¬Έμ μμ κ°μ΄λ° λ°°μΉλ₯Ό μν΄ left: 50%, top: 50% μ μ© ν κ°κ° margin-left: calc(1920px / -2), margin-top: calc(1920px * 9 / 16 / -2) μ μ©. μ΄λ margin-top μ κ²½μ° before μ padding-top μΌλ‘ 16:9 λΉμ¨λ‘ μ‘°μ λκ³ μκΈ° λλ¬Έμ 1920px μ 16:9 λΉμ¨λ‘ λ§μΆ°μ§ λμ΄κ°μ λ°μ λμ΄μ¬λ¦¬λλ‘ μ μ©ν κ². κ·Έλ¦¬κ³ youtube λΆλΆμμ μ μ©ν λμ΄μ λμ³ μμλκ° νμ΄λμμν λ° overflow λ‘ μ¨κΉμ²λ¦¬ μ μ©.
- youtube iframe api : μμνκΈ° λΆλΆμμ μ½λ 볡λΆ
- μ½λ μ€λͺ : document μμ script λΌλ μμλ₯Ό λ§λ€μ΄ κ°μ Έμμ tag λΌλ λ³μλ‘ μ§μ νκ³ tag μ src λ‘ μ€μ μ νλΈμ μμμ μ¬μν μ μλ λͺ λ Ήμ js νμΌμ κ°μ Έμ΄, μ¦ script νκ·Έ λΆλΆμ src μμ±μ μΈλΆ js λΌμ΄λΈλ¬λ¦¬κ° ν λΉμ΄ λλ κ²(λΌμ΄λΈλ¬λ¦¬ μ¬μ©ν λ script μ½λ κ°μ Έμ€λ κ²κ³Ό λμΌ). λ¬Έμμμ script λΌλ νκ·Έ μ΄λ¦μ κ°μ§ μμ μ€ 0λ²μ§Έ λ₯Ό firstScriptTag λ‘ ν λΉ. firstScriptTag μ λΆλͺ¨ μμμ μ΄μ λΆλΆμ μ½μ ν κ±΄λ° ν΄λΉ μμλ tag μ΄κ³ firstScriptTag μ μ΄μ μ ν κ². → λ°λΌμ μ¬μ©νλ script μ€ μ²«λ²μ§Έ script νκ·Έλ₯Ό μ°Ύμμ κ·Έκ²λ³΄λ€ λ¨Όμ μ νλΈ api λ₯Ό μ¬μ©ν μ μλ script νκ·Έλ₯Ό μμλ€κ° μ½μ ν΄μ μ€ννλ€λ κ².
- μ¬κΈ°μ ν¨μμ΄λ¦μ μ νλΈμμ μ€μ ν κ²μ΄κΈ° λλ¬Έμ μμ νλ©΄ μ λλ©° var player, player =, width, height, events λ μ§μμ£Όκ³ new YT.Player λ YT λΌλ μ νλΈ κ°μ²΄μ Player λΌλ λ©μλκ° μ€νλκ³ μλλ° κ·Έ μμ 'player' λ html ꡬ쑰μμ 미리 λ§λ€μ΄λλ player λΌλ id λ₯Ό κ°μ§ μμλ₯Ό μ νν κ².
- μ΄μ μνλ λμμμ κ°μ ΈμμΌ νλλ° ν΄λΉ μ νλΈ μμμ μ£Όμλ₯Ό 보면 watch?v= λ€μμΌλ‘ λμ€λ κ²μ΄ μ΅μ΄ μ¬μν μ νλΈ μμ id μΈ videoId μ λ€μ΄κ°λ λΆλΆμ 볡μ¬ν΄μ λΆμ¬λ£κ³ , μμμ μ¬μνκΈ° μν μ¬λ¬κ°μ§ λ³μλ€μ λ»νλ playersVars μ μ΅μ μΌλ‘ μλ μ¬μμ μν autoplay: true, λ°λ³΅ μ¬μμ μν loop: true, λ°λ³΅ μ¬μν μ νλΈ μμ id λͺ©λ‘μ μ§μ νκΈ° μν΄ playlist: 'μμ μ£Όμμμ 볡μ¬ν κ²' μ μ μ©. events λΌλ μ΅μ μ μ μ©ν κ²μΈλ° κ·Έμ λ°μ΄ν°λ‘ onReady λΌλ μ΅λͺ μ ν¨μλ₯Ό ν λΉν κ², μ¬κΈ°μ κ°μ²΄ λ°μ΄ν° λ΄λΆμ ν¨μ λ°μ΄ν°κ° ν λΉλλ©΄ λ©μλλΌκ³ λΆλ¦, μ΅λͺ ν¨μμ λ§€κ°λ³μλ‘ event λΌλ μ¬μ©νλλ° μ΄ λμμ νλ μ΄μ΄κ° μ€λΉλλ©΄ μ΄λ μ΅λͺ ν¨μλ₯Ό μ€νν΄μ£Όλλ° μ€νν λ κ·Έ μΈμλ‘ μ΄ λμμμ΄ νλ μ΄λλ μν© μ체λ₯Ό λ°μ΄ν°λ‘ λκ²¨μ£Όκ² λ¨. event λΌλ λ§€κ°λ³μμ μ¬μλκ³ μλ μμ μ체λ₯Ό λ»νλ target μ mute λΌλ λ©μλλ₯Ό μ€ννλ©΄ μμκ±°κ° μ μ©. playersVars μμλ μ§μμ΄ λμ§ μμ events λ‘ λ°λ‘ μ μ©ν΄μ€μΌ ν¨.
- playersVars μμ μ§μνλ μ¬λ¬κ°μ§ λ§€κ°λ³μκ° μμΌλ iframe player api μμ νμΈ.
19. μ νλΈ μμ λ°°κ²½: λ°λ³΅ μ λλ©μ΄μ
- floatingObject λΌλ ν¨μλ₯Ό λ§λ€κ³ νΈμΆλ λ μ νμλ₯Ό λ°μμ μ€νλλ selector λ₯Ό λ§€κ°λ³μλ‘ μ§μ , gsap.to ( ) λ₯Ό μ΄μ©ν΄μ css μ νμλ§ μ§μ΄λ£μΌλ©΄ μ€νλ μ μλλ‘ selector λ₯Ό μμλ‘ νκ³ μκ°μ 1, μ΅μ μΌλ‘λ μΈλ‘λ₯Ό κΈ°μ€μΌλ‘ μμ§μΌ κ²μ΄κΈ° λλ¬Έμ y: 20, 무ν λ°λ³΅λλλ‘ repeat: -1, 20λ§νΌ λ΄λ €κ°λ κ² λΏλ§ μλλΌ μ¬λΌμ€λ κ²λ μ²λ¦¬ν μ μλλ‘ yoyo: true λ₯Ό μ μ©. μ¬κΈ°κΉμ§ νλ©΄ λΆμμ°μ€λ½κΈ° λλ¬Έμ easing ν¨μλ₯Ό μ΄μ©νμ¬ μ²λ¦¬ν κ², gsap easing μμ type: easeInOut μΌλ‘ μ€μ νκ³ run λλ₯Έ λ€ power1 ν΄λ¦νλ©΄ νλ¨μ λμ€λ ease: Power1.easeInOut μ 볡μ¬νμ¬ gsap.to μμ λΆμ¬λ£κΈ°, λ€μ μ΅μ μΌλ‘ μλ‘κ³ μΉ¨νκ³ μ§μ° μκ°μ λ λ€ μ¬μνλ delay: 3 μ μΆκ°.
- λλ€ν μ«μλ₯Ό μμ±νλ ν¨μ : random μ΄λΌλ μ΄λ¦μ ν¨μλ₯Ό μ€μ νμ¬ min κ³Ό max λΌλ λ§€κ°λ³μλ‘ λ°μμ Math.random( ) μ μ΄μ©ν΄ λλ€ λ©μλμλ€κ° (max-min)+min μ μμμ μ리μμ κΈΈμ΄λ₯Ό μ ννλ©° λ¬Έμλ₯Ό λ°ννλ toFixed( ) λ©μλλ₯Ό κ³±ν κ²μ μμμ μ κ°μ§λ μ«μ λ°μ΄ν°λ‘ λ³ννλ parseFloat( ) μ΄λΌλ λ©μλλ₯Ό λ°ν.
- random ν¨μλ₯Ό μ΄μ©ν΄ floatingObject ν¨μ μμ : floatingObject ν¨μμ selector, delay, size λ₯Ό λ§€κ°λ³μλ‘ μ€μ νκ³ floatingObject ν¨μλ₯Ό νΈμΆν λ μΈμλ‘ κ° λ°λ³΅ μ λλ©μ΄μ μ μ μ©ν κ° μμμ μ νμ, μ§μ° μκ°, yμΆμΌλ‘ μμ§μΌ ν¬κΈ°λ₯Ό μ§μ . gsap.to λ©μλ μμ μ΅μ λΆλΆμ y: size λ‘ μμ , 1μ΄λ‘ λμ΄μλ μ λλ©μ΄μ λμ μκ° λΆλΆμ λλ€νκ² μ μ©νκΈ° μν΄ random( ) ν¨μλ‘ μμ νκ³ μΈμλ‘ 1.5μ 2.5 λ₯Ό μ§μ , μ΅μ μ delay λΆλΆμ random( ) ν¨μλ₯Ό μ μ©νμ¬ μΈμλ‘ 0, delay λ₯Ό μ§μ .
- gsap.to λ©μλμ λν μ¬λ¬κ°μ§ μ΅μ μ΄ μμΌλ λΌμ΄λΈλ¬λ¦¬ μ¬μ©λ² νμΈν΄λ³Ό κ².