πŸ’¨ 패슀트캠퍼슀/곡뢀 기둝

[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 λ©”μ†Œλ“œμ— λŒ€ν•œ μ—¬λŸ¬κ°€μ§€ μ˜΅μ…˜μ΄ μžˆμœΌλ‹ˆ 라이브러리 μ‚¬μš©λ²• 확인해볼 것.