본문 바로가기
Site 만들기

종합형 + 반응형 01

by 코딩대원 2022. 9. 15.

사이트 만들기 종합형

지금까지 공부한 다양한 유형들을 한데 모아서 사이트를 만들어보고자 합니다.
+ 반응형도 추가해줍니다.


01. Figma

Figma로 전체적인 틀을 잡아줍니다.


02. HTML

헤더, 슬라이드, 이미지, 이미지/텍스트 카드, 배너, 텍스트, 푸터 순으로 배치합니다.
소스가 길어서 접어놓았습니다.
코드 보기
{
    <body>
    <div id="skip">
        <a href="#">헤더 영역 바로가기</a>
        <a href="#">슬라이드 영역 바로가기</a>
        <a href="#">이미지 영역 바로가기</a>
        <a href="#">이미지/텍스트 영역 바로가기</a>
        <a href="#">카드 영역 바로가기</a>
        <a href="#">배너 영역 바로가기</a>
        <a href="#">텍스트 영역 바로가기</a>
        <a href="#">푸터 영역 바로가기</a>
    </div>
    <!-- //skip -->
    <header id="headerType" class="header__wrap nexon">
        <h2 class="blind">헤더 영역</h2>     
        <div class="header__inner">
            <div class="header__logo">
                <a href="#">간식박스</a>
            </div>
            <div class="header__menu">
                <ul>
                    <li class="active"><a href="#slideTyper">에너지 보충</a></li>
                    <li><a href="#imageType">영양식</a></li>
                    <li><a href="#imgTextType">24시간</a></li>
                    <li><a href="#cardType">식사</a></li>
                    <li><a href="#bannerType">키친 박스</a></li>
                    <li><a href="#textType">간식박스 설치</a></li>
                </ul>
            </div>
            <div class="header__member">
                <a href="#" class="header__member1">온라인 주문하기</a>
                <a href="#" class="header__member2">문의하기</a>
            </div>
            <div class="header__ham">
                <span></span>
                <span></span>
                <span></span>
            </div>
        </div>
    </header>
        <!-- //headerType -->
        <main id="mainType">
            <section id="slideTyper" class="slider__wrap">
                <h2 class="blind">슬라이드 영역</h2>
                <div class="slider__inner">
                    <!-- <div class="slider">
                        <div class="slider__img">
                            <div class="desc">
                                <span>SNACKBOX</span>
                                <h3>에너지가 필요할 때</h3>
                                <p>
                                    에너지가 부족한 당신!! 식사를 하기에는<br>
                                    애매하고 출출해서 무언가 먹고 싶지 않나요?                            
                                </p>
                                <div class="btn">
                                    <a href="#">자세히 보기</a>
                                    <a href="#" class="black">정보 보기</a>
                                </div>
                            </div>
                        </div>
                        <div class="slider__arrow">
                            <a href="#" class="left"><span class="ir">이전 이미지</span></a>
                            <a href="#" class="right"><span class="ir">다음 이미지</span></a>
                        </div>
                        <div class="slider__dot">
                            <a href="#" class="dot active"><span class="ir">1</span></a>
                            <a href="#" class="dot"><span class="ir">2</span></a>
                            <a href="#" class="dot"><span class="ir">3</span></a>
                            <a href="#" class="play"><span class="ir">플레이</span></a>
                            <a href="#" class="stop"><span class="ir">정지</span></a>
                        </div>
                    </div>
                </div> -->
                    <div class="swiper mySwiper">
                        <div class="swiper-wrapper">
                          <div class="swiper-slide">
                            <div class="desc">
                                <span>SNACKBOX</span>
                                <h3>에너지가 필요할 때</h3>
                                <p>
                                    에너지가 부족한 당신!! 식사를 하기에는<br>
                                    애매하고 출출해서 무언가 먹고 싶지 않나요?                            
                                </p>
                                <div class="btn">
                                    <a href="#">자세히 보기</a>
                                    <a href="#" class="black">정보 보기</a>
                                </div>
                            </div>
                        </div>
                          <div class="swiper-slide">
                            <div class="desc">
                                <span>SNACKBOX</span>
                                <h3>에너지가 필요할 때</h3>
                                <p>
                                    에너지가 부족한 당신!! 식사를 하기에는<br>
                                    애매하고 출출해서 무언가 먹고 싶지 않나요?                            
                                </p>
                                <div class="btn">
                                    <a href="#">자세히 보기</a>
                                    <a href="#" class="black">정보 보기</a>
                                </div>
                            </div>
                        </div>
                          <div class="swiper-slide">
                            <div class="desc">
                                <span>SNACKBOX</span>
                                <h3>에너지가 필요할 때</h3>
                                <p>
                                    에너지가 부족한 당신!! 식사를 하기에는<br>
                                    애매하고 출출해서 무언가 먹고 싶지 않나요?                            
                                </p>
                                <div class="btn">
                                    <a href="#">자세히 보기</a>
                                    <a href="#" class="black">정보 보기</a>
                                </div>
                            </div>
                        </div>
                        </div>
                        <div class="swiper-pagination"></div>
                    <div class="swiper-button">
                        <div class="swiper-button-play"><span class="ir">play</span></div>
                        <div class="swiper-button-stop"><span class="ir">stop</span></div>
                    </div>
                    <div class="swiper-button-next"></div>
                    <div class="swiper-button-prev"></div>
                      </div>
                    </div>
            </section>
            <!-- // sliderType -->
            <section id="imageType" class="image__wrap nexon section target">
                <h2 class="blind">이미지 영역</h2>
                <h2>간식박스의 특별함</h2>
                <p>신선도, 영양, 균형, 가공단계까지 고려한 간식 = 식품입니다.</p>
                <div class="image__inner container">
                    <article class="image img1">
                        <h3 class="image__title">요거트</h3>
                        <p class="image__desc">
                            플레인, 딸기, 복숭아, 포도, 파인애플, 고구마, 단호박 등 다양한 맛이 있습니
                            다. 또, 소화기 질병, 콜레스테롤 수치 안정에 도움을 주며, 장수 건강식입니다.
        
                        </p>
                        <a class="image__btn" href="/" title="자세히 보기">자세히 보기</a>
                    </article>
                    <article class="image img2">
                        <h3 class="image__title2">과일음료, 과일</h3>
                        <p class="image__desc2">
                            오렌지 주스, 포도 주스, 토마토 주스, 등 다양하게 준비되어 있습니다. 과일도
                            바나나 외에도 사과, 딸기, 귤 등 다양하게 준비되어 있습니다. 
                        </p>
                        <a class="image__btn yellow" href="/" title="자세히 보기">자세히 보기</a>
                    </article>
                </div>
            </section>
      <!-- //imageType -->
      <section id="imgTextType" class="imgText__wrap nexon section gray target">
        <h2 class="blind">
            이미지/텍스트 영역
        </h2>
        <div class="imgText__inner container">
            <div class="imgText__txt">
                <h3>
                    24시간 언제 어디서나 신선하게
                </h3>
                <p>
                    ‘콜드체인 배달 시스템’에 따라<br>
                    신선도를 유지해 안전하게 배송되며,<br>
                    온도 모니터링 기능이 가능한<br>
                    스마트 디바이스로 현장관리자 없이<br>
                    24시간 운영 가능한 비대면 플랫폼<br>
                    입니다.
                </p>
            </div>
            <div class="imgText__img img1">
                <a href="/">결제 박스</a>
            </div>
            <div class="imgText__img img2">
                <a class="blue" href="/">스낵 박스</a>
            </div>
        </div>
    </section>
     <!-- //imgTextType -->
     <section id="cardType"class="card__wrap nexon section target">
        <h2 class="blind">카드 영역</h2>
        <h2>도시락 부터 샐러드 까지</h2>
        <p>신선한 품질과 좋은 식사를 합리적인 가격으로 만나볼 기회!!</p>
        <div class="card__inner container">
            <article class="card">
                <figure class="card__header">
                    <img src="assets/img/card_bg01.jpg" alt="도시락">
                </figure>
                <div class="card__body">
                    <h3 class="tit">도시락</h3>
                    <p class="desc">
                        고기중심 도시락, 스테이크 도시락,
                        치킨 도시락, 비빔밥형 도시락, 새우튀김 도시락,
                        돈까스 도시락, 야채도시락 등 다양한 도시
                        락이 준비되어 있습니다. 
                    </p>
                    <a class="btn" href="/">
                        더 자세히 보기
                        <span aria-hidden="true">                           
                            <svg width="65" height="8" viewBox="0 0 65 8" fill="none" xmlns="http://www.w3.org/2000/svg">
                                <path d="M64.3536 4.35355C64.5488 4.15829 64.5488 3.84171 64.3536 3.64645L61.1716 0.464466C60.9763 0.269204 60.6597 0.269204 60.4645 0.464466C60.2692 0.659728 60.2692 0.976311 60.4645 1.17157L63.2929 4L60.4645 6.82843C60.2692 7.02369 60.2692 7.34027 60.4645 7.53553C60.6597 7.7308 60.9763 7.7308 61.1716 7.53553L64.3536 4.35355ZM0 4.5H64V3.5H0V4.5Z" fill="black"/>
                                </svg>
                        </span>
                    </a>
                </div>
            </article>
            <article class="card">
                <figure>
                    <img src="assets/img/card_bg02.jpg" alt="샐러드">
                </figure>
                <div class="card__body">
                    <h3 class="tit">샐러드</h3>
                    <p class="desc">
                        샐러드 별로 드레싱도 다르고 황금 공식이란것이 존재합니다.
                        감자 샐러드, 그린 샐러드, 멕시칸 샐러드, 시저 샐러드 등
                        다양한 샐러드가 준비되어 있습니다.
                    </p>
                    <a class="btn" href="/">
                        더 자세히 보기
                        <!-- 읽지않고 넘어감 -->
                        <span aria-hidden="true">                           
                            <svg width="65" height="8" viewBox="0 0 65 8" fill="none" xmlns="http://www.w3.org/2000/svg">
                                <path d="M64.3536 4.35355C64.5488 4.15829 64.5488 3.84171 64.3536 3.64645L61.1716 0.464466C60.9763 0.269204 60.6597 0.269204 60.4645 0.464466C60.2692 0.659728 60.2692 0.976311 60.4645 1.17157L63.2929 4L60.4645 6.82843C60.2692 7.02369 60.2692 7.34027 60.4645 7.53553C60.6597 7.7308 60.9763 7.7308 61.1716 7.53553L64.3536 4.35355ZM0 4.5H64V3.5H0V4.5Z" fill="black"/>
                                </svg>
                        </span>
                    </a>
                </div>
            </article>
            <article class="card">
                <figure>
                    <img src="assets/img/card_bg03.jpg" alt="샌드위치">
                </figure>
                <div class="card__body">
                    <h3 class="tit">샌드위치</h3>
                    <p class="desc">
                        잼 샌드위치, 참치 샌드위치, 치즈 샌드위치,
                        햄치즈 샌드위치, 땅콩버터 샌드위치,
                        달걀 샌드위치, 야채 샌드위치, 치킨 샌드위치 등
                        다양한 종류가 준비되어 있습니다.
                    </p>
                    <a class="btn" href="/">
                        더 자세히 보기
                        <span aria-hidden="true">                           
                            <svg width="65" height="8" viewBox="0 0 65 8" fill="none" xmlns="http://www.w3.org/2000/svg">
                                <path d="M64.3536 4.35355C64.5488 4.15829 64.5488 3.84171 64.3536 3.64645L61.1716 0.464466C60.9763 0.269204 60.6597 0.269204 60.4645 0.464466C60.2692 0.659728 60.2692 0.976311 60.4645 1.17157L63.2929 4L60.4645 6.82843C60.2692 7.02369 60.2692 7.34027 60.4645 7.53553C60.6597 7.7308 60.9763 7.7308 61.1716 7.53553L64.3536 4.35355ZM0 4.5H64V3.5H0V4.5Z" fill="black"/>
                                </svg>
                        </span>
                    </a>
                </div>
            </article>
        </div>
    </section>
     <!-- //cardType -->
     <section id="bannerType" class="banner__wrap nexon target">
        <h2 class="blind">배너 영역</h2>
        <div class="banner__inner">
            <h3 class="title">키친 박스</h3>
            <p class="desc">
                간편식세트부터 샐러드까지<br>
                인원이 적어도 조리시설이 없어도<br>
                식사 제공이 가능합니다.
            </p>
        </div>
    </section>
        <!-- //bannerType -->
        <section id="textType" class="text__wrap nexon section target">
            <h2 class="blind">텍스트 영역</h2>     
    
            <span>과정을 알아봅시다.</span>
            <h2 class="mb70">간식 박스 설치</h2>
            <div class="text__inner container">
                <div class="text t1">
                    <h3 class="text__title">1. 상담접수</h3>
                    <p class=text__dsec>
                        홈페이지를 통해 상담 문의를 남겨주시면 고객
                        사의 규모, 업종, 성비, 비용에 맞춰 적합한 기기
                        와 서비스 타입을 제안하는 1차 상담을 진행.       
                    </p>
                    <a class="text_btn" href="/">더보기</a>
                </div>
                <div class="text t2">
                    <h3 class="text__title">2. 고객사 방문</h3>
                    <p class=text__dsec>
                        전문 컨설턴트가 직접 방문하여 주변 식당/매점
                        유무 등을 확인하고 유동인원, 환경에 맞춰
                        간식박스 설치 최적 장소를 추천해드립니다.
                    </p>
                    <a class="text_btn" href="/">더보기</a>
                </div>
                <div class="text t3">
                    <h3 class="text__title">3. 조건협의, 계약</h3>
                    <p class=text__dsec>
                        고객사 맞춤 상품 제안과 선택, 복지 지원금
                        에 따른 상품 가격, 월 예상 금액 등 비용,운
                        영 조건 협의후 계약이 진행됩니다.
                    </p>
                    <a class="text_btn" href="/">더보기</a>
                </div>
                <div class="text t4">
                    <h3 class="text__title">4. 설치 및 운영</h3>
                    <p class=text__dsec>
                        간식박스는 설치와 동시에 바로 운영이 가능
                        합니다.전문 배송기사님이 주기적으로 방문, 관
                        리해드리며 데이터 기반 진열 종류,수량을 조정
                    </p>
                    <a class="text_btn" href="/">더보기</a>
                </div>
                <div class="text t5">
                    <h3 class="text__title">5. 월 마감</h3>
                    <p class=text__dsec>
                        기존 간식 업무에서 복잡하고 골치 아팠던 회
                        계처리. 수많은 영수증, 바뀌는 업체관리 이 모
                        든게 한 장의 거래 명세서로 해결됩니다.
                    </p>
                    <a class="text_btn" href="/">더보기</a>
                </div>
                <div class="text t6">
                    <h3 class="text__title">6. 피드백</h3>
                    <p class=text__dsec>
                        간식 박스는 마감 이후 불편했던 점, 개선
                        했으면 좋겠는 점 등을 적극적으로 수용하
                        여 개선하기위해 노력합니다.
                    </p>
                    <a class="text_btn" href="/">더보기</a>
                </div>
            </div>
        </section>
    
     <!-- //textType -->
     <div id="parallax__top">
        Top
    </div>
    </main>

    <aside id="parallax__info">
        <!-- <div class="scroll">scrollTop : <span>0</span>px</div> -->
    </aside>
        <!-- //mainType -->

        <footer id="footerType" class="footer__wrap nexon section gray">
            <h2 class="blind">푸터 영역</h2>
            <div class="footer__inner container">
                <div class="footer__menu">
                    <div>
                        <h3>사이트</h3>
                        <ul>
                            <li><a href="/">웹표준 사이트</a></li>
                            <li><a href="/">반응형 사이트</a></li>
                            <li><a href="/">패럴랙스 사이트</a></li>
                            <li><a href="/">포트폴리오 사이트</a></li>
                        </ul>
                    </div>
                    <div>
                        <h3>헤더 영역</h3>
                        <ul>
                            <li><a href="/">메뉴 유형 01</a></li>
                            <li><a href="/">메뉴 유형 02</a></li>
                        </ul>
                    </div>
                    <div>
                        <h3>슬라이드 영역</h3>
                        <ul>
                            <li><a href="/">슬라이드 유형 01</a></li>
                            <li><a href="/">슬라이드 유형 02</a></li>
                            <li><a href="/">슬라이드 유형 03</a></li>
                        </ul>
                    </div>
                    <div>
                        <h3>이미지 영역</h3>
                        <ul>
                            <li><a href="/">이미지 유형 01</a></li>
                            <li><a href="/">이미지/텍스트 유형 01</a></li>
                            <li><a href="/">텍스트 유형 01</a></li>
                        </ul>
                    </div>
                    <div>
                        <h3>컨텐츠 영역</h3>
                        <ul>
                            <li><a href="/">카드 유형 01</a></li>
                            <li><a href="/">배너 유형 01</a></li>
                        </ul>
                    </div>
                    <div>
                        <h3>푸터 영역</h3>
                        <ul>
                            <li><a href="/">푸터 메뉴 유형 01</a></li>
                            <li><a href="/">푸터 컨텍트 유형 02</a></li>
                            <li><a href="/">푸터 이메일 유형 03</a></li>
                        </ul>
                    </div>
                </div>
                <div class="footer__right">
                    2022 Kimdaewonn. Portfolio is Power<br>
                    All rights reserved.
                </div>
            </div>
        </footer>
    </body>
}

03. CSS

자세한 CSS와 반응형은 하단의 원본 소스 보기 버튼을 통해 깃허브에서 확인해주세요!

{
    <!-- CSS -->
    <link rel="stylesheet" href="assets/css/fonts.css">
    <link rel="stylesheet" href="assets/css/reset.css">
    <link rel="stylesheet" href="assets/css/common.css">
  
    <!-- CSS(섹션별) -->
    <link rel="stylesheet" href="assets/css/header.css">
    <link rel="stylesheet" href="assets/css/slider.css">
    <link rel="stylesheet" href="assets/css/image.css">
    <link rel="stylesheet" href="assets/css/imgtext.css">
    <link rel="stylesheet" href="assets/css/card.css">
    <link rel="stylesheet" href="assets/css/banner.css">
    <link rel="stylesheet" href="assets/css/text.css">
    <link rel="stylesheet" href="assets/css/footer.css">
    
    <!-- CSS -->
    <link rel="stylesheet" href="assets/css/swiper.css">
}

04. JS

메뉴 클릭으로 부드러운 이동 기능, 햄버거메뉴 기능(반응형), 슬라이드 기능, 탑버튼 기능이 구현되었습니다.

{
    <script src="assets/js/swiper.min.js"></script>
    // 선택자
    const btnStart = document.querySelector(".swiper-button-play");
    const btnStop = document.querySelector(".swiper-button-stop");
    const btnHam = document.querySelector(".header__ham");
    const btnMenu = document.querySelector(".header__menu");
    const btnMenuList = btnMenu.querySelectorAll("ul li a");

    // 스와이퍼
    var swiper = new Swiper(".mySwiper", {
      navigation: {
        nextEl: ".swiper-button-next",
        prevEl: ".swiper-button-prev",
      },
      autoplay: {
        delay: 2000,
        disableOnInteraction: false,
      },
      pagination: {
        el: '.swiper-pagination',
        type: 'bullets',
        clickable: true
      }
    });
    // 스타트버튼 안보이게
    btnStart.style.display = "none";
    // 스탑버튼 누르면 스타트보임
    btnStop.addEventListener("click", () => {
        swiper.autoplay.stop();
        btnStart.style.display = "block";
        btnStop.style.display = "none";
    });
    // 스타트 누르면 스탑보임
    btnStart.addEventListener("click", () => {
        swiper.autoplay.start();
        btnStart.style.display = "none";
        btnStop.style.display = "block";
    });
    // 메뉴 버튼 (반응형)
    btnHam.addEventListener("click", () => {
        btnHam.classList.toggle("active");
        btnMenu.classList.toggle("active");
        document.body.classList.toggle("fixed");
    });

    btnMenuList.forEach((list)=>{
        list.addEventListener("click", ()=>{
            document.body.classList.remove("fixed");
            btnMenu.classList.remove("active");
            btnHam.classList.remove("active");
        });
    })

    window.addEventListener("resize", ()=>{
        let width = window.innerWidth;
        if(width > 1300){
            document.body.classList.remove("fixed");
            btnMenu.classList.remove("active");
            btnHam.classList.remove("active");

        }
    });
//T

    // 부드러운 메뉴이동
document.querySelectorAll(".header__menu a").forEach(el => {
    el.addEventListener("click", e => {
        e.preventDefault();
        // 이동 막음
    document.querySelector(el.getAttribute("href")).scrollIntoView({behavior: "smooth"});
    })
});


//top버튼 시작
    window.addEventListener("scroll", () => {
  let scrollTop = window.pageYOffset || window.scrollY || document.documentElement.scrollTop; //다써줌 브라우저 호환문제

  // 01
  // if(scrollTop > 0) {
  //   document.querySelector("#parallax__nav").classList.add("show");
  // } else {
  //   document.querySelector("#parallax__nav").classList.remove("show");
  // }

  // 02
  // top 버튼 보여주기/안보여주기
  if(scrollTop + window.innerHeight >= document.body.scrollHeight){
    document.querySelector("#parallax__top").classList.add("show");
  } else {
    document.querySelector("#parallax__top").classList.remove("show");
  }
  // top 버튼
  document.querySelector("#parallax__top").addEventListener("click", () => {
    window.scrollTo({left:0, top:0, behavior:"smooth"});
  });

});

최종 결과

'Site 만들기' 카테고리의 다른 글

슬라이드 유형 01  (3) 2022.09.06
배너 유형 01  (2) 2022.09.06
푸터 유형 01  (2) 2022.09.06
이미지 / 텍스트 유형 01  (6) 2022.09.01
헤더 유형 01  (6) 2022.09.01

댓글


HTML
CSS

JAVASCRIPT

자세히 보기