40 Wonders

seung weon, seoΒ·2024λ…„ 6μ›” 6일
0

project

λͺ©λ‘ 보기
6/8
post-thumbnail

πŸ“ˆ 40 Wonders

  • ν”„λ‘œμ νŠΈ 이름: 40 Wonders
  • μ‚¬μš©ν•œ μ–Έμ–΄: HTML, SCSS, JavaScript, jQuery
  • μ‚¬μš©ν•œ JavaScript 라이브러리: GSAP (ScrollTrigger)
  • μ›Ήμ‚¬μ΄νŠΈ μœ ν˜• : Responsive (λ°˜μ‘ν˜•)

SCSSλž€?

SCSSλŠ” Sassy CSS의 μ•½μžλ‘œ, κΈ°λ³Έ CSS 문법을 기반으둜 λ³€μˆ˜, 쀑첩 κ·œμΉ™, 믹슀인 Mixin, import λ“±μ˜ κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ CSSλ₯Ό 더 λͺ¨λ“ˆν™”ν•˜κ³  μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰½κ²Œ λ§Œλ“€μ–΄ μ€λ‹ˆλ‹€.

λ³€μˆ˜ (Variables)

$primary-color: #fff;
body {
  background: $primary-color;
}

SCSSμ—μ„œ λ³€μˆ˜λŠ” $ 기호둜 μ‹œμž‘ν•˜λ©°, λ³€μˆ˜ 이름 λ’€μ—λŠ” μœ νš¨ν•œ CSS μ‹λ³„μžκ°€ 올 수 μžˆμŠ΅λ‹ˆλ‹€.

쀑첩 (Nesting)

ul{
    li{
      display: inline-block;
      margin-right: 10px;
      a{
        text-decoration: none;
        color: $primary-color;
      }
	}
}

CSS μ„ νƒμžλ₯Ό μ€‘μ²©ν•˜μ—¬ μ½”λ“œλ₯Ό 더 가독성 있게 μž‘μ„±ν•  수 μžˆλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.

믹슀인 (Mixin)

$tablet:1023px;
@mixin tablet(){
    @media (max-width:$tablet) {
        @content;
    }
}
@include tablet{
	flex-direction: column;
	padding: 0;
	height: auto;
}

SCSSμ—μ„œ μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. λ―ΉμŠ€μΈμ€ μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μ •μ˜ν•˜κ³  ν•„μš”ν•  λ•Œλ§ˆλ‹€ ν•΄λ‹Ή μ½”λ“œλ₯Ό λΆˆλŸ¬μ™€ μ‚¬μš©ν•  수 있게 ν•©λ‹ˆλ‹€.

*Mixin을 μ‚¬μš©ν•˜μ—¬ λ³Έ ν”„λ‘œμ νŠΈμ˜ Media Queryλ₯Ό μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

@import

@import './layout/header';
@import './layout/nav';
@import './layout/footer';
@import './page/main';

@importλŠ” SCSSμ—μ„œ μ™ΈλΆ€ νŒŒμΌμ„ κ°€μ Έμ™€μ„œ ν˜„μž¬ νŒŒμΌμ— ν¬ν•¨μ‹œν‚€λŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œλ₯Ό λͺ¨λ“ˆν™”ν•˜κ³  μ—¬λŸ¬ 파일 간에 μŠ€νƒ€μΌμ„ μ‰½κ²Œ κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

SCSS 파일 ꡬ쑰/λͺ…

@import './util/var';
@import './util/mixin';
@import './vendors/swiper-bundle';
@import './base/fonts';
@import './base/reset';
@import './base/common';
@import './layout/header';
@import './layout/nav';
@import './layout/footer';
@import './page/main';

util

μ‚¬μ΄νŠΈ μ „λ°˜μ— κ±Έμ³μ„œ μž¬μ‚¬μš©λ˜λŠ” μŠ€νƒ€μΌμ„ μ •μ˜ν•©λ‹ˆλ‹€. (λ³€μˆ˜, Mixin λ“±)

vendors

ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” μ™ΈλΆ€ μŠ€νƒ€μΌμ„ λ„£μŠ΅λ‹ˆλ‹€. (Swiper, λΆ€νŠΈμŠ€νŠΈλž© λ“±)

base

μ‚¬μ΄νŠΈ μ „λ°˜μ— κ±Έμ³μ„œ μž¬μ‚¬μš©λ˜λŠ” μŠ€νƒ€μΌμ„ μ •μ˜ν•©λ‹ˆλ‹€. (fonts, reset, common λ“±)

layout

μ‚¬μ΄νŠΈ ꡬ쑰에 ν•΄λ‹Ήν•˜λŠ” λ ˆμ΄μ•„μ›ƒμ„ λ„£μŠ΅λ‹ˆλ‹€. (header, footer, nav)

page

λͺ¨λ“  νŽ˜μ΄μ§€κ°€ 같은 μŠ€νƒ€μΌμ„ μ‚¬μš©ν•  μˆ˜λŠ” μ—†κΈ° λ•Œλ¬Έμ— 각 νŽ˜μ΄μ§€μ—μ„œ μ‚¬μš©λ  ꡬ체적인 μŠ€νƒ€μΌμ„ 여기에 λ„£μŠ΅λ‹ˆλ‹€. main, _νŽ˜μ΄μ§€ 이름.scss

λ―ΉμŠ€μΈμ„ ν™œμš©ν•˜μ—¬ vw κ³„μ‚°ν•˜κΈ°

@mixin unit($prop, $num1:0){
    @if($prop=='font'){
        font-size: ($num1*100)/1920+vw;
    }
}
@include unit(font,66);

1920px = 100vw κΈ°μ€€μœΌλ‘œ ν°νŠΈμ‚¬μ΄μ¦ˆ 계산

  1. unitμ΄λΌλŠ” μ΄λ¦„μ˜ λ―ΉμŠ€μΈμ„ μ •μ˜. unit은 두 개의 λ§€κ°œλ³€μˆ˜ $prop(이름)κ³Ό $num1(λ³€ν™˜ν•  숫자)을 λ°›κ²Œ 되며 $num1의 기본값은 0으둜 μ„€μ •

  2. λ§Œμ•½ $prop이 font와 κ°™μ„λ•Œ μ‹€ν–‰ν•  수 μžˆλ„λ‘ 쑰건문 처리

  3. font-size에 vw 계산식 μ‚¬μš© ($num1*100)/1920+vw

  4. @includeλ₯Ό μ‚¬μš©ν•˜μ—¬ px vw둜 λ³€ν™˜

λ°˜μ‘ν˜• Grid

auto-fill

auto-fill은 κ·Έλ¦¬λ“œ μ»¨ν…Œμ΄λ„ˆμ˜ μ‚¬μš© κ°€λŠ₯ν•œ 곡간에 κ·Έλ¦¬λ“œ μ•„μ΄ν…œμ„ μ΅œλŒ€ν•œ 많이 λ°°μΉ˜ν•©λ‹ˆλ‹€. 빈 곡간이 생기면 ν•΄λ‹Ή 곡간이 빈 μƒνƒœλ‘œ μœ μ§€λ˜λ©° μ»¨ν…Œμ΄λ„ˆμ— 빈 곡간이 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

auto-fit

auto-fit은 auto-fillκ³Ό λΉ„μŠ·ν•˜μ§€λ§Œ, κ·Έλ¦¬λ“œ μ•„μ΄ν…œμ˜ 크기가 μž‘μ•„μ„œ 빈 곡간이 생길 λ•Œ ν•΄λ‹Ή 뢀뢄이 μ±„μ›Œμ§‘λ‹ˆλ‹€. μ»¨ν…Œμ΄λ„ˆμ˜ 빈 곡간이 거의 μ—†κ±°λ‚˜ μ „ν˜€ 없을 수 μžˆμŠ΅λ‹ˆλ‹€.

minmax()

minmax() ν•¨μˆ˜λŠ” CSS κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ μ‚¬μš©λ˜λ©° κ·Έλ¦¬λ“œμ˜ ν–‰ λ˜λŠ” μ—΄μ˜ 크기λ₯Ό λ™μ μœΌλ‘œ μ§€μ •ν•˜λŠ” 데 ν™œμš©λ©λ‹ˆλ‹€.
*주둜 λ°˜μ‘ν˜• μ›Ή λ””μžμΈμ—μ„œ μ‚¬μš©

40 Wondersμ—μ„œ μ‚¬μš©ν•œ μ˜ˆμ‹œ

.partner-list{
	display: grid;
	grid-template-columns: repeat(auto-fit,minmax(504px,1fr));
	border-top: 1px solid #464646;
}

κ·Έλ¦¬λ“œ μ•„μ΄ν…œμ˜ 크기λ₯Ό μ΅œμ†Œ 504pxμ—μ„œ μ΅œλŒ€ 1fr둜 μ„€μ •ν•˜μ—¬ μ΅œμ†Œ 크기λ₯Ό μœ μ§€ν•˜λ©΄μ„œ 남은 곡간에 따라 크기가 λ°˜μ‘ν˜•μœΌλ‘œ μ‘°μ ˆλ˜λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

숫자 증가 μ• λ‹ˆλ©”μ΄μ…˜

  1. [data-number] 속성을 가진 λͺ¨λ“  μš”μ†Œλ₯Ό μ„ νƒν•œ ν›„ 각각에 λŒ€ν•΄ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ (each 반볡문 μ‚¬μš©)

  2. 객체 startCount의 속성 varλ₯Ό 0으둜 μ΄ˆκΈ°ν™”

  3. ν˜„μž¬ 처리 쀑인 data-number 속성 값을 가져와 targetNum λ³€μˆ˜μ— ν• λ‹Ήν•˜κΈ°

  4. gsap.toλ₯Ό μ‚¬μš©ν•˜μ—¬ 객체 startCount 의 var 속성을 targetNum κ°’μœΌλ‘œ λ³€κ²½

  5. onUpdateλ₯Ό μ‚¬μš©ν•˜μ—¬ μ• λ‹ˆλ©”μ΄μ…˜μ΄ μ—…λ°μ΄νŠΈ 될 λ•Œλ§ˆλ‹€ ν•¨μˆ˜κ°€ 싀행될 수 있게 ν•˜κΈ°

  6. λ³€μˆ˜ strLength (λ¬Έμžμ—΄ 길이) μ΄ˆκΈ°ν™”

  7. 쑰건문을 μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ— μ†Œμˆ˜μ μ΄ ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ 확인

  8. μ†Œμˆ˜μ μ΄ μžˆμ„λ•Œ λ¬Έμžμ—΄μ„ μ†Œμˆ˜μ μ„ κΈ°μ€€μœΌλ‘œ λ‚˜λˆ„κ³  μ†Œμˆ˜ λ’·μžλ¦¬ λΆ€λΆ„ strArr[1]의 길이λ₯Ό 계산

  9. innerHTML을 μ‚¬μš©ν•˜μ—¬ λ‚΄μš©μ„ μ• λ‹ˆλ©”μ΄μ…˜ 쀑인 κ°’μœΌλ‘œ κ°±μ‹ μ‹œν‚€κΈ° (toFixed ν•¨μˆ˜μ— μ†Œμˆ˜μ  λ’·μžλ¦¬ λΆ€λΆ„μ˜ 길이 strLengthλ₯Ό λ„£μ–΄ μ†Œμˆ˜μ  λ’·μžλ¦¬ 수λ₯Ό μœ μ§€ν•˜λ„λ‘ λ§Œλ“€κΈ°)

profile
to reach new possibilities

0개의 λŒ“κΈ€