일상/연습

홈플러스 메인 홈페이지 연습

디디벨 2022. 7. 14. 13:15
728x90

 

서울대병원 연습때와 같이 다 만들지는 못하고

상품 한 섹션까지만 만들어봤다.

 

순서는 다음과 같다.

1. 선정이유
2. 만드는 과정
3. 어려웠던 점
4. 추후 개선할 점

 


1. 선정이유

 

이유는 간단했다.

기업페이지 연습만 하는 것 같아서 쇼핑몰을 해봐야겠다는 생각이 들었다. 

그 중에 지금까지 배운 html, css와 약간의 jquery를 활용할 수 있는 페이지를 찾아보다가

홈플러스 홈페이지가 눈에 띄어서 선정했다.

 

 

 


2. 만드는 과정

 

크게 header와 5개의 section으로 처리했다.

 

 

 

2-1. header 

 

먼저 header의 경우는 크게 두 파트로 나누어졌다.

 

        <div class="containers">
            <div class="top d-flex justify-content-between align-items-center">
                <h1>
                    <a href="#none"><img src="img/default_logo.png" alt="로고"></a>
                </h1>
                <div class="search">
                </div>
                <div class="icons d-flex justify-content-between">
                </div>
            </div>
            <div class="navd">
                    <ul class="d-flex mb-0 justify-content-between align-items-end">
                        
                        <li><a href="#none">카테고리</a></li>
                        <li><a href="#none">전단행사</a></li>
                        <li><a href="#none">신상품</a></li>
                        <li><a href="#none">단독특가</a></li>
                        <li><a href="#none">베스트</a></li>
                        <li><a href="#none">기획전</a></li>
                        <li><a href="#none">브랜드관</a></li>
                        <li><a href="#none">자주구매</a></li>
                        <li><a href="#none">택배배송</a></li>
                    </ul>
            </div>
        </div>

 

top과 navd로 나누어 상단에는 로고와 검색창과 아이콘들, 하단에는 네비게이션바를 배치했다. 

네비게이션 바에는 display:flex를 주었고 그와 동시에 justify-content: between, align-items:end를 주었다.

 

2-2. banner

 

배너는 플러그인 swiper를 사용했다.

 

 <section id="banner" style="border-bottom: 1px solid #eee;">
        <div class="swiper">
            <!-- Additional required wrapper -->
            <div class="swiper-wrapper">
              <!-- Slides -->
              <div class="swiper-slide"><img src="img/banner1.png" alt="배너1"></div>
              <div class="swiper-slide"><img src="img/banner2.png" alt="배너2"></div>
              <div class="swiper-slide"><img src="img/banner3.jpeg" alt="배너3"></div>
              <div class="swiper-slide"><img src="img/banner4.jpeg" alt="배너4"></div>
            </div>
    
          
            <!-- If we need navigation buttons -->
            <div class="swiper-button-prev"></div>
            <div class="swiper-button-next"></div>
          </div>
    </section>

 

웹접근성 준수를 위해 alt를 꼭 삽입했다.

 

 

2-3. corner

 

 <ul class="d-flex justify-content-between align-items-center">
     <li><a href="#none"><img src="img/ic_cart.png" alt="즉시배송"><span>즉시배송</span></a></li>
     <li><a href="#none"><img src="img/ic_level.png" alt="등급혜택"><span>등급혜택</span></a></li>
     <li><a href="#none"><img src="img/ic_coupon.png" alt="이벤트/쿠폰"><span>이벤트/쿠폰</span></a></li>
     <li><a href="#none"><img src="img/ic_mobile.png" alt="모바일교환권"><span>모바일교환권</span></a></li>
     <li><a href="#none"><img src="img/ic_bakery.png" alt="베이커리"><span>몽블랑제<br>베이커리</span></a></li>
     <li><a href="#none"><img src="img/ic_chicken.png" alt="홈플델리"><span>홈플델리</span></a></li>
     <li><a href="#none"><img src="img/ic_kit.png" alt="밀키트"><span>밀키트</span></a></li>
     <li><a href="#none"><img src="img/ic_sig.png" alt="시그니처"><span>홈플러스<br>시그니처</span></a></li>
     <li><a href="#none"><img src="img/ic_meat.png" alt="산지직송"><span>산지직송</span></a></li>
</ul>

 

이 또한 쉽게 dislay:flex;를 사용했다. 

그 후 css로 span의 font-size, text-align로 정렬과 사이즈를 맞춰주었다.

일부는 :nth-child()를 사용해서 좀 더 조정해줬다.

 

 

2-4. minibanner

 

 

 

 

2-2 배너와 유사하게 넣었다.

swiper의 기본 script에 자동으로 돌아가게하는 auto 기능을 추가하였다.

autoply:{delay:숫자,} 이다.

 

<script>


  const swiper = new Swiper('.swiper', {
  // Optional parameters
  autoplay: { delay: 3000,},
  spaceBetween: 0,
  loop: true,

  // If we need pagination
  pagination: {
    el: '.swiper-pagination',
  },

  // Navigation arrows
  navigation: {
    nextEl: '.swiper-button-next',
    prevEl: '.swiper-button-prev',
  },

  // And if we need scrollbar
  scrollbar: {
    el: '.swiper-scrollbar',
  },
});
</script>

 

 

2-5. saza

이미지인데 그냥 한 섹션 다 차지하게 했다.

지금 생각해보면 그냥 다음 섹션과 함께 처리해도 괜찮을 것 같다...

 

편하게 하려고 섹션을 나눴다...

 

 

2-6. ct

 

두개의 카테고리만 만들었다.

일일히 작업해야하기 때문이다(=힘들다)

 

가장 고생했던 곳이다.

단순 반복작업때문에가 아니라 탭 문제 때문이었다. 

 

처음에는 css로 구현했는데 나중에 보니깐 jquery로 간단하게 할 수 있는 거였다....

 

 


 

 

3. 어려웠던 점

 

2-6이 가장 어려웠다.

 

일단 쇼핑몰의 특징은 이미지-상품명-가격이 거의 필수적이여서 

공통적인 클래스들을 주어 :nth:child와 함께 순차적으로 css를 줬다.

이 과정에서 <span>과 <br>를 많이 쓴 점이 걸린다. 

특히 <span><span><span>...이런식으로 나열을 해서 웹표준을 어기는 것 아닐까 라는 생각이 들었다.

 

 

탭 부분이 가장 문제 였다.

처음에는 css로 짜는데 제이쿼리로 짤 수 있다고해서

나중에는 선생님의 도움을 받았다..

(그래도 css로 잘 짰다고 해주셨다)

 

 

<script>
    $(document).ready(function(){
        $(".cts > li > span").click(function(){
            $(".cts > li > span").removeClass('act');
            $(this).addClass("act")
        })
    })
</script>
<style>
    .act + ul{ display: block;}
</style>

 

원리를 이해하다면

1. act라는 클래스를 가지고 있는 span태그(타이틀)을 클릭한다.

2. .act는 .act의 형제이자 가장 중요한 상품탭(ul)을 display:block;으로 보이게 만든다.

3. 다시 제이쿼리로 돌아가서 클릭시 일단 모든 상품탭(ul)은 뺀다.

4. 그와 동시에 선택한 span태그(this)의 act클래스를 넣어주면서 상품탭(ul)을 보여준다.

 

내가 이해하기로는 이와 같다.

아직 스타일에 대한 이해가 더 필요할 것 같다...

(+는 아는데 저렇게도 쓰이는 구나 싶었다)

 

 


 

4. 추후 개선할 점

 

1 . 제이쿼리를 적극 활용해서 쓰자.

 

이번에도 만드는 동시에 제이쿼리를 처음 배웠어서 반영한다는 것에

좀 혼란이 있었다. 마치 저번에 공통클래스 처럼...

다음부터는 태그짤떄부터 제이쿼리를 어느정도 생각해두면서 짜면 좋을 것 같다.

 

2. css정리하면서 쓰자, 항상 절약하면서 쓰자.

 

너무 이것저것주면서 하기보다는 

공통된 부분은 묶어서 표현하는게 좋을 것같다.

 

3. 상품 정보 나열시를 좀 더 효율적인 코드로 개선해보자.

 

이 부분은 다른 사이트들을 뜯어봐야 알 것 같다.

물론 내가 모르는 코드들이 많을 것 같긴하다..

 

 

끝!

 

 

 

 

728x90

'일상 > 연습' 카테고리의 다른 글

서울대학교병원 메인홈페이지 연습  (0) 2022.07.07
넥슨 메인홈페이지 연습  (0) 2022.06.06
yg 메인 홈페이지 연습  (2) 2022.05.29