์ƒˆ์†Œ์‹

์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด

Code Review

์˜ฌ๋ฆฌ๋ธŒ์˜ ์˜จ๋ผ์ธ๋ชฐ (์ ์‘ํ˜• PC, Mobile)

  • -

 

 

๐Ÿ“ ์˜ฌ๋ฆฌ๋ธŒ์˜ ์˜จ๋ผ์ธ๋ชฐ

๐Ÿ‘‰ ์‚ฌ์ดํŠธ๋ช… : ์˜ฌ๋ฆฌ๋ธŒ์˜ ์˜จ๋ผ์ธ๋ชฐ
๐Ÿ‘‰ ์ž‘์—…๊ธฐ๊ฐ„ : PC๋ฒ„์ „ 7์ผ, ๋ชจ๋ฐ”์ผ 1.5์ผ
๐Ÿ‘‰ ์‚ฌ์šฉ์–ธ์–ด : HTML5, CSS3, Jquery, JSON
๐Ÿ‘‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : Swiper
๐Ÿ‘‰ ๋ถ„๋ฅ˜ : PC ์ ์‘ํ˜•, Mobile ์ ์‘ํ˜• ์›น์‚ฌ์ดํŠธ
๐Ÿ‘‰ URL :


PC > https://codenablog.github.io/Oliveyoung-pc/ 

Mobile >  https://codenablog.github.io/Oliveyoung-mo/


โœจ POINT 

โœ”๏ธ Fetch ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ํ™œ์šฉํ•ด JSON ํŒŒ์ผ์˜ ์ •๋ณด ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
โœ”๏ธ Filter๋กœ ์›ํ•˜๋Š” ๊ฐ’์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฅ˜
โœ”๏ธ 3๋‹จ ์นดํ…Œ๊ณ ๋ฆฌ ๊ตฌ์„ฑ
โœ”๏ธ ๋‹ค๋ฅธ์ƒํ’ˆ ์ถ”์ฒœ, ๋‹ค๋ฅธ ํ‚ค์›Œ๋“œ ๋”๋ณด๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ์ƒˆ๋กœ์šด ์ •๋ณด ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
โœ”๏ธ Swiper ์ปค์Šคํ…€ - ๋‚ด์žฅ ์†์„ฑ 'thumbs' ํ™œ์šฉ , ๊ทธ๋ฆฌ๋“œ ํ˜•ํƒœ์˜ ์Šฌ๋ผ์ด๋” ๊ตฌํ˜„
โœ”๏ธ ๋ชจ๋ฐ”์ผ์—์„œ ์ด๋ฏธ์ง€ height ๊ณ ์ •ํ˜•์œผ๋กœ ๊ฐœ์„ 
โœ”๏ธ Swiper ์ปค์Šคํ…€ - ์‹ค์‹œ๊ฐ„ View ๋žญํ‚น

 


๐Ÿ“ Fetch ๋น„๋™๊ธฐํ†ต์‹  ํ™œ์šฉ

event.json

json ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋ถˆ๋Ÿฌ์˜ฌ ์ •๋ณด๋“ค์„ ๋‹ด์•„์ฃผ์—ˆ๋‹ค.

{
    "items":[
        {
            "thumbUrl":"./assets/images/banner01.jpg",
            "title":"ํŒ”๋กœ์šฐํ•˜๋ฉด 20% ์ฟ ํฐ GET",
            "linkUrl":"#banner01"
        },
        {
            "thumbUrl":"./assets/images/banner02.jpg",
            "title":"์˜ฌ๋ฆฌ๋ธŒ ๋ฉค๋ฒ„์Šค ํ•˜๋ฐ˜๊ธฐ ํ˜œํƒ",
            "linkUrl":"#banner03"
        }
    ]
}

 

main.js

jsonํŒŒ์ผ์— ๋‹ด๊ธด ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ!

fetch('./assets/data/event.json')
  .then(res=>res.json())
  .then(json=>{
  	data = json.items // ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ data๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด๊ธฐ
  	let html=``; // ๋ฐ์ดํ„ฐ ์ž…๋ ฅ์„ ์œ„ํ•œ ๋ณ€์ˆ˜ ํ• ๋‹น
  
	data.forEach(element=>{
      html+=`${element.title}` // json ํŒŒ์ผ์˜ items์˜ title ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค
    })
  
  })

 

 


๐Ÿ“ Filter๋กœ ์›ํ•˜๋Š” ๊ฐ’์„ ๋ถ„๋ฅ˜

 

product.json ํŒŒ์ผ์—์„œ ๊ฐ๊ฐ EventId, brand ๊ฐ’์ด ์ผ์น˜ํ•˜๋Š” ์ƒํ’ˆ๋งŒ ๋ฝ‘์•„์™”๋‹ค!

event.json

{
  "items":[
    {
      "id":"prd01",
      "cate":"1001",
      "brand":"์—์ŠคํŠธ๋ผ",
      "productName":"์—์ŠคํŠธ๋ผ ์•„ํ† ๋ฒ ๋ฆฌ์–ด365 ๋กœ์…˜ 150ml ๊ธฐํš ...",
      "thumbUrl":"./assets/images/product01.jpg",
      "best":true,
      "cost":31000,
      "sale":23560,
      "tag":["์„ธ์ผ","์ฟ ํฐ","์ฆ์ •","์˜ค๋Š˜๋“œ๋ฆผ"],
      "eventId":false,
      "view":32,
      "linkUrl":"#product1"
    },
 .
 .
 .

 

main.json

Filter๋ฅผ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์›ํ•˜๋Š” ๊ฐ’์„ ๋„ฃ์–ด ํ˜ธ์ถœํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฝ‘์•„์™”๋‹ค.

       // ๋ธŒ๋žœ๋“œ๋ณ„ ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
fetch('./assets/data/product.json')
  .then(res=>res.json())
  .then(json=>{
    data = json.items;
    function sortData(brandId,sortId){
               // ๋ธŒ๋žœ๋“œ๊ฐ€ ์ผ์น˜ํ•˜๋Š” ์ƒํ’ˆ ํ•„ํ„ฐ๋ง
      brandData = data.filter(function(parm){
        return parm.brand === sortId;
      })
          
      let html=``;

      brandData.forEach(element=>{
        .
        .
      })
      $(`.sc-brand .brand${brandId}`).html(html);
    }
    sortData(1,"๋นŒ๋ฆฌํ”„");
    sortData(2,"์•„๋ฒค๋Š");
    sortData(3,"๋นŒ๋ฆฌํ”„");
    sortData(4,"์•„๋ฒค๋Š");
})

 

 


๐Ÿ“ 3๋‹จ Category ๊ตฌ์„ฑ

๐Ÿ‘‰ ๋Œ€๋ถ„๋ฅ˜ > ์ค‘๋ถ„๋ฅ˜ > ์†Œ๋ถ„๋ฅ˜

์ „์ฒด ์นดํ…Œ๊ณ ๋ฆฌ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‚˜์˜ค๋Š” ์˜์—ญ์€
"๋ทฐํ‹ฐ > ์Šคํ‚จ์ผ€์–ด > ํ† ๋„ˆ/๋กœ์…˜/์˜ฌ์ธ์›" ํ˜•ํƒœ์˜ 3๋‹จ ๋ถ„๋ฅ˜๋กœ ๋˜์–ด์žˆ๋‹ค.

 

category.js

์ค‘๋ถ„๋ฅ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ category.json ํŒŒ์ผ์— ์ž‘์„ฑํ•˜๋ฉด์„œ
์†Œ๋ถ„๋ฅ˜๋Š” submenu๋ผ๋Š” key์— ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ ,
๋Œ€๋ถ„๋ฅ˜๋Š” sort๋ผ๋Š” key๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•„ํ„ฐ๋กœ ๋ถ„๋ฅ˜ํ•ด์ฃผ์—ˆ๋‹ค.

{ 
  "items":[
  {
    "id":1,
    "name":"์Šคํ‚จ์ผ€์–ด",
    "sort":"๋ทฐํ‹ฐ",
    "submenu":[
      {
        "id":1001,
        "name":"ํ† ๋„ˆ/๋กœ์…˜/์˜ฌ์ธ์›"
      },
      {
        "id":1002,
        "name":"์—์„ผ์Šค/ํฌ๋ฆผ"
      },
      {
        "id":1003,
        "name":"๋ฏธ์ŠคํŠธ/์˜ค์ผ"
      }
    ]
  },
  .
  .
  .

 

main.js

// ์ „์ฒด ์นดํ…Œ๊ณ ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
fetch('./assets/data/category.json')
  .then(res=>res.json())
  .then(json=>{
    data=json.items; // ์ „์ฒด ๋ฐ์ดํ„ฐ
    let html=``;

    // ์นดํ…Œ๊ณ ๋ฆฌ ์ถœ๋ ฅ ํผ
    function cateAll(sortId){

    cateList = data.filter(function(parm){
      return parm.sort == sortId; // ๋Œ€๋ถ„๋ฅ˜ ํ•„ํ„ฐ
    })
      
	// ๋Œ€๋ถ„๋ฅ˜
    html+=`
    <div class="group-cate">
      <h3>${sortId}</h3> 
      <ul class="cate-list">
    `
    //์ค‘๋ถ„๋ฅ˜
    cateList.forEach(element => {
      html+=`<li class="cate-item">
               <a href="#${element.id}">${element.name}</a>
               <ul class="sub-list">`
      //์†Œ๋ถ„๋ฅ˜
      sub = element.submenu;
      sub.forEach(element=>{
        html+=`
                 <li class="sub-item"><a href="#${element.id}">${element.name}</a></li>
        `
      })
      html+=`
               </ul>
             </li>
      `
            });
      html+=`
           </ul>
         </div>
      `
      $(".gnb .cate-wrapper").html(html);
    }
    // ๋Œ€๋ถ„๋ฅ˜ ๊ฐ’ ๋„ฃ์–ด์„œ ์นดํ…Œ๊ณ ๋ฆฌ ์ถœ๋ ฅํผ ํ˜ธ์ถœ
    cateAll("๋ทฐํ‹ฐ");
    cateAll("ํ—ฌ์Šค&ํ‘ธ๋“œ");
    cateAll("๋ผ์ดํ”„");
  })

 

 


๐Ÿ“ ๋‹ค๋ฅธ์ƒํ’ˆ ์ถ”์ฒœ, ๋‹ค๋ฅธ ํ‚ค์›Œ๋“œ ๋”๋ณด๊ธฐ

 

 


๐Ÿ‘‰ ์ถ”์ฒœ ์ƒํ’ˆ, ํ‚ค์›Œ๋“œ ์˜์—ญ์˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค๋ฅธ ์ƒํ’ˆ์„ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค.
๐Ÿ‘‰ ์ด ๋ถ€๋ถ„ ์—ญ์‹œ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ, ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค๋ฅธ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ’์„ ๋„ฃ์€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.

current3 = 1; // ํ˜„์žฌ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ์œ„ํ•œ ๋ณ€์ˆ˜
function keywords(i,j){
  fetch('./assets/data/keywords.json')
    .then(res=>res.json())
    .then(json=>{
      data=json.items;
      html=``;

      while(i < j){
        element = data[i];
                
        html+=`
          <li class="keyword-item">
            <a href="${element.linkUrl}">
              <figure class="img-box">
                <img src="${element.thumbUrl}" alt">
              </figure>
              <div class="text-box">
                <h3>${element.title}</h3>
                <p>${element.subTitle}</p>
              </div>
            </a>
          </li> 
        `
    
      i++;
    }
    $('.sc-keyword .keyword-list').html(html);
  });
}        
keywords(0,2); //๊ธฐ๋ณธ์œผ๋กœ ๋ณด์—ฌ์ค„ ๊ฒƒ

$('.sc-keyword .other-btn').click(function(){
  if(current3 == 1){
    keywords(2,4);
    current3 = 2;
  }else if(current3 == 2){
    keywords(4,6);
    current3 = 3;
  }else{
    keywords(0,2);
    current3 = 1;
  }
  $('.sc-keyword .other-btn .current').html(current3);
}) 

forEach ๋ฌธ๋ฒ•์„ ํ™œ์šฉํ•ด์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฝ‘์•„์˜ฌ ๊ฒฝ์šฐ return true/false์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด continue ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๊ฐฏ์ˆ˜๋งŒ ๋ฝ‘์•„์˜ค๊ธฐ ์œ„ํ•ด while๋ฌธ๋ฒ•์„ ํ™œ์šฉํ–ˆ๋Š”๋ฐ, ์ดํ›„ ๋” ์ฐพ์•„๋ณด๋‹ˆ try catch๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์—ˆ๋‹ค.

 

 


๐Ÿ“ Swiper ์ปค์Šคํ…€

1. ํƒญ ๋ฉ”๋‰ด๋ฅผ ์Šฌ๋ผ์ด๋”์™€ ์—ฐ๋™

 

Swiper.js Demo ํŽ˜์ด์ง€์˜ Thumbs gallery๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค.

 


ํƒญ ์Šฌ๋ผ์ด๋”์™€ ๋‚ด์šฉ ์Šฌ๋ผ์ด๋”๋ฅผ ๊ฐ๊ฐ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ์ค€ ํ›„, ์—ฐ๋™ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

const brandSlider = new Swiper(".sc-brand .swiper",{
  loop:true,
  spaceBetween:30,
  navigation:{
    nextEl:".sc-brand .next",
    prevEl:".sc-brand .prev"
  },
  pagination:{
    el:".sc-brand .pagination",
    type: "fraction"
  },
  //์ด ๋ถ€๋ถ„!!
  thumbs: {
    swiper: brandTab, 
  }
})

 

 

2. Grid ํ˜•ํƒœ์˜ ์Šฌ๋ผ์ด๋”

 

main.js

swiper์˜ grid ์†์„ฑ์„ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์—ˆ๋‹ค.

$(`.sc-dessert .prd-list`).html(html)
    const dessertSlider = new Swiper("#dessertSlider",{
        slidesPerView:3,
        slidesPerGroup:3,
        spaceBetween:8,
        grid:{
            rows:2
        },
        pagination:{
            el:".sc-dessert .pagination"
        },
    })

๊ทธ๋ฆฌ๋“œ ์Šฌ๋ผ์ด๋”๋ฅผ ๋งŒ๋“ค๋•Œ ์ฃผ์˜ํ•  ์ ์€, .swiper-slide์˜ ๋ถ€๋ชจ ์š”์†Œ์ธ .swiper-wrapper์— ๋†’์ด๊ฐ’์ด ๊ผญ ์ง€์ •๋˜์žˆ์–ด์•ผ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.
์œ„์— ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ ํ™”๋ฉด ๋„ˆ๋น„์—๋”ฐ๋ผ ์œ ๋™์ ์œผ๋กœ ๊ฐ’์ด ๋ฐ”๋€Œ๊ธฐ๋•Œ๋ฌธ์—, calc()๋กœ ์ •ํ™•ํ•œ ๊ฐ’์„ ๊ณ„์‚ฐํ•ด์„œ ๋†’์ด๊ฐ’์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค !

 

CSS

/* swiper-wrapper */
.sc-dessert .prd-list{ 
    gap: 0;
    min-height: 456px;
    height: calc(((100vw - 30px) / 3 + 118px) * 2); 
    /* ((ํ™”๋ฉด๋„ˆ๋น„ - ์–‘์˜† margin) / 3์—ด +textbox์˜ ๋†’์ด) * 2ํ–‰*/
}

 /* swiper-slide */
.sc-dessert .prd-item{
    width: 100%;
    margin-top:0 !important;
    min-height: 228px;
    height: calc((100vw - 30px) / 3 + 118px);
    /* (ํ™”๋ฉด๋„ˆ๋น„ - ์–‘์˜† margin) / 3์—ด +textbox์˜ ๋†’์ด) */
}

 

 

3. ์‹ค์‹œ๊ฐ„ View ๋žญํ‚น


โ‘  1-5์œ„ ์ƒํ’ˆ์ด ์ฒซ๋ฒˆ์งธ ์Šฌ๋ผ์ด๋“œ, 6-10์œ„ ์ƒํ’ˆ์ด ๋‘๋ฒˆ์งธ ์Šฌ๋ผ์ด๋“œ์— ์žˆ๋‹ค.

โ‘ก 3์ดˆ์— ํ•œ๋ฒˆ์”ฉ ์•„์ดํ…œ์˜ ํฌ์ปค์Šค๊ฐ€ ์ด๋™ํ•˜๊ณ , ํฌ์ปค์Šค๊ฐ€ ํ•ด๋‹น ์Šฌ๋ผ์ด๋“œ์˜ ๋๊นŒ์ง€ ์ด๋™ํ•˜๋ฉด ๋‹ค์Œ ์Šฌ๋ผ์ด๋“œ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
ํŽ˜์ด์ง• ํ˜น์€ ์•„์ดํ…œ์„ ํด๋ฆญํ•˜๋ฉด ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜์— ๋‹ด์•„์ค€ ๋’ค์— ํ˜ธ์ถœํ–ˆ๋‹ค.

 

// 3์ดˆ์— ํ•œ๋ฒˆ์”ฉ ์ž๋™์œผ๋กœ ๋„˜์–ด๊ฐ
    function rankAuto(){
        rankFocus++;
        if(rankFocus == 11){
            rankFocus = 1;
        }
        // rankCurr ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด
        if(rankFocus < 6){  
            rankSlider.slideTo(0);
            $('.ranking-prd a').removeClass('active');
            $(`.sc-ranking .rank${rankFocus}`).addClass('active');
        }else if(rankFocus < 11){  
            rankSlider.slideTo(1);
            $('.ranking-prd a').removeClass('active');
            $(`.sc-ranking .rank${rankFocus}`).addClass('active');
        }
    }

    interval = setInterval(rankAuto, 3000);

 

โ‘ข ์•„์ดํ…œ ์ œ๋ชฉ์„ ํด๋ฆญํ•˜๋ฉด ํฌ์ปค์Šค๊ฐ€ ์ด๋™ํ•œ๋‹ค. (์ด๋•Œ setInterval์˜ ํƒ€์ด๋จธ ์ดˆ๊ธฐํ™”)

 

// ์•„์ดํ…œ ํด๋ฆญ์‹œ 
    $('.sc-ranking .rank-item').click(function(a){
        a.preventDefault();
        rankFocus = Number($(this).attr('href').charAt(1)*10) + Number($(this).attr('href').charAt(2))
        i = rankFocus ;

        
        $('.ranking-prd a').removeClass('active');
        $(`.sc-ranking .rank${rankFocus}`).addClass('active');
        clearInterval(interval);
        interval = setInterval(rankAuto, 3000);
    
    })

 

โ‘ฃ ํŽ˜์ด์ง• ํด๋ฆญ์‹œ์— ์Šฌ๋ผ์ด๋“œ๊ฐ€ ๋„˜์–ด๊ฐ„๋‹ค. (setInterval์˜ ํƒ€์ด๋จธ ์ดˆ๊ธฐํ™”)

 

    let rankFocus = 1; //ํ˜„์žฌ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜
    $('.sc-ranking .rank1').addClass('active');//์ฒซ๋ฒˆ์งธ ์•„์ดํ…œ์— ๊ธฐ๋ณธ ํฌ์ปค์Šค
    
    // ํŽ˜์ด์ง• ํด๋ฆญ์‹œ 
    $('.sc-ranking .swiper-pagination-bullet').click(function(a){
        a.preventDefault();
        i = $(this).index();
    
        rankSlider.slideTo(i);
        if(i == 0){
            rankFocus = 1;
        }else{
            rankFocus = 6;
        }
        $('.ranking-prd a').removeClass('active');
        $(`.sc-ranking .rank${rankFocus}`).addClass('active');
      
        clearInterval(interval); //ํด๋ฆญ์‹œ ์ธํ„ฐ๋ฒŒ์˜ ํƒ€์ด๋จธ ์ดˆ๊ธฐํ™”
        interval = setInterval(rankAuto, 3000); // ํƒ€์ด๋จธ ๋‹ค์‹œ ์‹œ์ž‘
    })

 

 


๐Ÿ“ ๋ชจ๋ฐ”์ผ์—์„œ ์ด๋ฏธ์ง€ height ๊ณ ์ •ํ˜•์œผ๋กœ ๊ฐœ์„ 

๐Ÿ‘‡ ๊ฐœ์„  ์ „, ๊ธฐ์กด ์˜ฌ๋ฆฌ๋ธŒ์˜ ์‚ฌ์ดํŠธ

ํ™”๋ฉด ๋„ˆ๋น„๊ฐ€ ์ค„์–ด๋“ค๋ฉด ๋ฐฐ๋„ˆ์˜ height๋„ ๋”ฐ๋ผ์„œ ์ค„์–ด๋“ ๋‹ค.

 

๐Ÿ‘‡ ๊ฐœ์„  ํ›„

ํ™”๋ฉด ๋„ˆ๋น„๊ฐ€ ์ค„์–ด๋“ค์–ด๋„ height๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค.
์ด๋ฏธ์ง€์— object-fit:cover๋ฅผ ์ฃผ์–ด ๋„˜์น˜๋Š” ๋ถ€๋ถ„์€ ๊น”๋”ํ•˜๊ฒŒ ์ž˜๋ฆฌ๋„๋ก ํ–ˆ๋‹ค.

 

 


๐Ÿ“ Healthy life CSS ๊ฐœ์„ 

 


๊ธฐ์กด ์˜ฌ๋ฆฌ๋ธŒ์˜ ์‚ฌ์ดํŠธ์—์„œ Healthy ์˜์—ญ์˜ ํ…์ŠคํŠธ ๋ฐ•์Šค ๋ฐฐ๊ฒฝ์ด๋ฏธ์ง€๊นŒ์ง€ ํ†ต์œผ๋กœ ์“ฐ๊ณ ์žˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์ด ๋ถ€๋ถ„์ด ๋งˆ์šฐ์Šค๋ฅผ hover ํ•˜๋ฉด scale์ด ์‚ด์ง ์ปค์ง€๋Š” ๋ชจ์…˜์ด ๋“ค์–ด๊ฐ€๋Š”๋ฐ, ๊ทธ๋•Œ ๋ฐฐ๊ฒฝ์ƒ‰๊ณผ ์ด๋ฏธ์ง€์˜ ๊ฒฝ๊ณ„๋ถ€๋ถ„์ด ์ข€ ๋ญ‰๊ฐœ์ ธ์„œ ๊ฐœ์„ ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 


ํด๋ก ์ฝ”๋”ฉ ์ž‘์—…ํ•  ๋•Œ ํ•„์š”ํ•œ ์ด๋ฏธ์ง€ ๋ถ€๋ถ„๋งŒ ์ž˜๋ผ์„œ ์—…๋กœ๋“œํ•˜๊ณ , ์ƒ‰์ƒ ๋ฐฐ๊ฒฝ ๋ถ€๋ถ„์€ CSS์—์„œ Background๋กœ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.

 


(+ ISSUE ) ์Šฌ๋ผ์ด๋”๋Š” then()ํ•จ์ˆ˜ ์•ˆ์ชฝ์— ..๐Ÿ’ฆ

ํ•จ์ˆ˜ ๋ฐ”๊นฅ์ชฝ์— ์Šฌ๋ผ์ด๋” ํ•จ์ˆ˜๋ฅผ ์“ฐ๊ฒŒ๋˜๋ฉด ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ์š”์†Œ๋ฅผ ์Šฌ๋ผ์ด๋” ํ•จ์ˆ˜๊ฐ€ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•ด ๊ฐ ์Šฌ๋ผ์ด๋“œ๋งˆ๋‹ค ์ธ๋ฑ์Šค ๊ฐ’์ด NaN์œผ๋กœ ๋œจ๊ณ  ํŽ˜์ด์ง•์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.
์ด๊ฑฐ๋•Œ๋ฌธ์— ํ•œ์ฐธ ํ—ค๋งธ๋‹ค.๐Ÿคข ์˜ค๋žœ ์‹œ๊ฐ„์„ ์„œ์นญํ•ด๋ณธ ๋์— ํ•ด๊ฒฐ ์™„๋ฃŒ ๐Ÿ’ฆ

 

 

 

'Code Review' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๋ธ”๋ก์ฒด์ธ  (0) 2024.01.10
๋‹ค์šฐ์˜คํ”ผ์Šค  (0) 2023.09.19
NAVER Careers  (0) 2023.02.25
์„œ์šธ์‹œ์ฒญ  (0) 2023.02.17
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.