0213 ~ 0215 : Carousel

ํžˆ์น˜ํ‚ค์น˜ยท2022๋…„ 2์›” 12์ผ
0

Book_Curly

๋ชฉ๋ก ๋ณด๊ธฐ
4/8

ํšŒ์ „๋ชฉ๋งˆ๋ฅผ ๋œปํ•˜๊ณ  ์›น์—์„œ๋Š” ์Šฌ๋ผ์ด๋“œ ํ˜•ํƒœ๋กœ ์ˆœํ™˜ํ•˜๋ฉฐ ์ด๋ฏธ์ง€, ์˜์ƒ ๋“ฑ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ๋…ธ์ถœํ•˜๋Š” UI

์‹ค์ œ ๋งˆ์ผ“์ปฌ๋ฆฌ์— ์‚ฌ์šฉ๋œ Carousel

(1,2,3,4) -> (5,6,7,8)๊ณผ ๊ฐ™์ด 4๊ฐœ์”ฉ ๋„˜์–ด๊ฐ
๋งจ ์ฒ˜์Œ (1,2,3,4)์ด ๋ณด์—ฌ์งˆ ๋•Œ๋Š” ์ด์ „์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ํ™”์‚ดํ‘œ๊ฐ€ ์—†์Œ

๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ 4๊ฐœ๊ฐ€ ๋ณด์ผ ๋•Œ๋Š” ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ํ™”์‚ดํ‘œ๊ฐ€ ์—†์Œ

Point
โœ” React Slick ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
โœ” ์ปดํฌ๋„ŒํŠธ ํ˜•์œผ๋กœ ์ž‘์„ฑํ•ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ž‘์„ฑ

์ƒ˜ํ”Œ ์ฝ”๋“œ ๋ณต๋ถ™ํ•˜๊ณ  ์ฐธ๊ณ ๋งํฌ์„ ๋ณด๋ฉฐ ๊ธฐ๋ณธ ์Šคํƒ€์ผ๋ง์„ ์ ์šฉํ•œ ๊ฒฐ๊ณผ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ปค์Šคํ…€๋งˆ์ด์ง• ํ•„์š”ํ•จ
๊ธฐ๋ณธ ์Šคํƒ€์ผ๋ง : dot๊ณผ drag ํ†ตํ•ด ์นด๋“œ ์›€์ง์ž„ ์ œ์–ด & ํ•œ์žฅ ๋‚˜์˜ค๊ณ  ํ•œ์žฅ ๋„˜์–ด๊ฐ

const settings = {
  dots: false, //์Šฌ๋ผ์ด๋“œ ๋ฐ‘์— ์  ๋ณด์ด๊ฒŒ
  infinite: false, // ๋ฌดํ•œ์œผ๋กœ ๋ฐ˜๋ณต
  speed: 500, // ๋„˜๊ธฐ๋Š” ์†๋„
  slidesToShow: 4, // ์Šคํฌ๋ฆฐ์— ๋ณด์—ฌ์ง€๋Š” ์Šฌ๋ผ์ด๋“œ ๊ฐœ์ˆ˜
  slidesToScroll: 4, // n์žฅ์”ฉ ๋’ค๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ํ•จ
};

์„ธํŒ…์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜์—ฌ dots์€ ์—†์• ๊ณ  4์žฅ ๋ณด์ด๊ณ  4์žฅ ๋„˜์–ด๊ฐ€๊ฒŒ ์„ค์ •ํ•จ

๋ฌธ์ œ๋Š”...๐Ÿ˜‚ํ™”์‚ดํ‘œ๊ฐ€ ๋ณด์ด์ง€ ์•Š์•˜๋”ฐ๐Ÿ˜‚
์ฝ˜์†”์ฐฝ์„ ์—ด๊ณ  html์„ ์—ด์‹ฌํžˆ ๋’ค์ง„ ๊ฒฐ๊ณผ CSS๊ฐ€ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์Œ

Common SCSS์— CenterContainer ์ถ”๊ฐ€

Carousel ์š”์†Œ๋ฅผ header์™€ footer ์ฒ˜๋Ÿผ ํ™”๋ฉด ๊ฐ€์šด๋ฐ ๋งž์ถ”๋ ค๊ณ  ๋ณด๋‹ˆ ๋งค๋ฒˆ ๋„ˆ๋น„๋ž‘ ๋“ฑ๋“ฑ์„ ์ž‘์„ฑํ•˜๋ฉฐ ๋ฐ˜๋ณต๋˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์–ด mixin ํ•จ์ˆ˜๋กœ ์•„์˜ˆ ๋”ฐ๋กœ ์ž‘์„ฑํ•ด์„œ header, footer, Carousel์— ์ ์šฉํ–ˆ๋‹ค.

@mixin CenterContainer {
  display: flex;
  width: 1050px;
  flex-direction: column;
  margin: 0 auto;
}

Carousel Arrow ๊ฐ„๊ฒฉ ์žฌ์„ค์ •
์ค‘์•™์— ์˜ค๋„๋ก ํ•˜๋‹ˆ ์•„์ฃผ ์ฅ๋˜ฅ๋งŒํ•œ ํ™”์‚ดํ‘œ๊ฐ€ ๋ณด์˜€๋‹ค!!! ๋ฌธ์ œ๋Š” ์™ผ์ชฝ ํ™”์‚ดํ‘œ๊ฐ€ 1 ๋’ค์— ๊ฐ€๋ ค์ ธ ํด๋ฆญ์ด ๋˜์ง€ ์•Š์•˜๋‹ค. ๋‹ค์‹œ ์ฝ˜์†”์ฐฝ์„ ์—ด๊ณ  ์š”์†Œ ์„ ํƒํ•ด๋ณด๋‹ˆ margin์ด ์žกํ˜€์žˆ์—ˆ๋‹ค. slick-theme.css๋กœ ๊ฐ€์„œ margin์„ ์‚ญ์ œ ํ•ด์ฃผ๊ธฐ๋กœ ํ•จ.

.slick-prev,
.slick-next {
  margin: 0 100px; //์‚ญ์ œ ๋ ˆ์ญˆ๊ณ 
  font-size: 0;
  line-height: 0;

์ผ๋‹จ ๊ฐ€๋ ค์ง€์ง€ ์•Š๊ฒŒ ํ™”์‚ดํ‘œ ๋ฐฐ์น˜, ํด๋ฆญ ์‹œ ๋„˜์–ด๊ฐ€๊ธฐ๋„ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋จ
๋ดค๋”๋‹ˆ content์— ๋ƒ…๋‹ค ->์™€ <-๊ฐ€ ์žˆ์—ˆ๊ณ  ๋งํฌ๋กœ ๋ฐ”๊ฟจ์Œ

Carousel Arrow ์˜ˆ์œ ํ™”์‚ดํ‘œ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ

์ € ์ฝ”๋”ฑ์ง€ ๊ฐ™์€ ํ™”์‚ดํ‘œ ๋ง๊ณ  ์˜ˆ์œ~~ ๋งˆ์ผ“์ปฌ๋ฆฌ ์†Œ์œ ์˜ ํ™”์‚ดํ‘œ๋ฅผ ๋„ฃ๊ธฐ๋กœ ํ•ด์„œ CSS๋กœ ๋‹ฌ๋ ค๊ฐ

.slick-prev {
  left: -25px;
}
[dir="rtl"] .slick-prev {
  right: -25px;
  left: auto;
}
.slick-prev:before {
  content: url("https://s3.ap-northeast-2.amazonaws.com/res.kurly.com/kurly/ico/2021/arrow_list_left_over_60_60.svg");
}
[dir="rtl"] .slick-prev:before {
  content: url(https://s3.ap-northeast-2.amazonaws.com/res.kurly.com/kurly/ico/2021/arrow_list_right_60_60.svg);
}

.slick-next {
  right: -25px;
}
[dir="rtl"] .slick-next {
  right: auto;
  left: -25px;
}
.slick-next:before {
  content: url(https://s3.ap-northeast-2.amazonaws.com/res.kurly.com/kurly/ico/2021/arrow_list_right_60_60.svg);
}
[dir="rtl"] .slick-next:before {
  content: url("https://s3.ap-northeast-2.amazonaws.com/res.kurly.com/kurly/ico/2021/arrow_list_left_over_60_60.svg");
}

๋ญ ์ผ๋‹จ ์•ž๋’ค๋กœ ์ •์ƒ์ ์œผ๋กœ ๋„˜์–ด๊ฐ
๋” ๋„˜๊ธธ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ํ™”์‚ดํ‘œ๊ฐ€ ํšŒ์ƒ‰์ด๊ณ  ๋” ๋„˜๊ธธ ๊ฒƒ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณด๋ผ์ƒ‰์ด ๋จ

ํ™”์‚ดํ‘œ ๋ฐฐ์น˜๊ฐ€ ์‚ด์ง ๋ง˜์— ์•ˆ ๋“œ๋Š”๋ฐ.. ์ผ๋‹จ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋„ฃ๊ณ  ์ƒ๊ฐํ•ด๋ณด๊ธฐ๋กœ ํ•จ

API๋กœ data ๋ฐ›์•„์™€ ๋ Œ๋”๋งํ•˜๊ธฐ

ํ•ญ์ƒ ์ˆœ์ˆ˜ js๋กœ ์ง์ ‘ UI/UX๋ฅผ ์งœ๋‹ค๊ฐ€ ์ด๋ฒˆ์— ์ฒ˜์Œ์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ทธ๋Ÿฐ๊ฐ€ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์ƒ๊ธฐ๋Š” html ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๊ทธ์— ๋งž์ถฐ CSS๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์ด ์ƒ๊ฐ๋ณด๋‹ค ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค.

  • display์˜ relative, absolute ์ดํ•ด๊ฐ€ ์•„์ง ๋ชจ์ž๋ผ์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์•„์ด์ฝ˜๊ณผ ์ขŒ์šฐ ์Šฌ๋ผ์ด๋“œ ํ™”์‚ดํ‘œ ๋ฐฐ์น˜๊ฐ€ ์˜ค๋ž˜๊ฑธ๋ฆผ
  • ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” <div> ํƒœ๊ทธ์— ๊ฑธ๋ฆฌ๋Š” ์ƒ์† CSS๋ฅผ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•ด ์Šฌ๋ผ์ด๋“œ ๋‚ด ์ด๋ฏธ์ง€&ํ…์ŠคํŠธ ํฌ๊ธฐ ์กฐ์ ˆ์— ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆผ

props๋กœ ํ•„์š”ํ•œ ์ •๋ณด ๋ณด์—ฌ์ฃผ๊ณ  CSS ์ž‘์—…

๋งˆ์ผ“์ปฌ๋ฆฌ์—๋Š” ์•„์ดํ…œ๋ช…, ํ‘œ์ค€๊ฐ€๊ฒฉ, ํ• ์ธ๋ฅ , ํ• ์ธ ๊ฐ€๊ฒฉ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์Šคํƒ€์ผ๋กœ ๋ณด์—ฌ์คŒ

๋น„์Šทํ•˜๊ฒŒ CSS ์ž‘์—…์„ ํ–ˆ๊ณ  ํ•ด๋‹น ์ฑ… ์œ„์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ๊ทธ๊ฒƒ๋งŒ ์‚ด์ง ์ปค์ง€๊ฒŒ transition์„ ์ฃผ์—ˆ๋‹ค.

 .Item_img {
    height: 280px;
    width: 100%;
    transition: all 0.3s ease-in-out 0s;
    &:hover {
      transform: scale(1.05);
      cursor: pointer;
    }
  }

0๊ฐœ์˜ ๋Œ“๊ธ€