ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스타벅스 클론코딩-2 (HEADER)
    프로젝트/스타벅스 클론코딩 2021. 5. 7. 01:55

     

    HEADER 영역

     

     

    로고 삽입 및 배치

     

      <!-- HEADER -->
      <header>
        <div class="inner">
          <a href="/" class="logo">
            <!-- 스타벅스 로고 삽입 -->
            <img src="./images/starbucks_logo.png" alt="STARBUCKS" />
          </a>
        </div>
      </header>
    header .inner {
      /* 가로 너비 */
      width: 1100px;
      /* 세로 너비 */
      height: 120px;
      /* 외부 여백, 가운데 정렬 효과 */
      margin: 0 auto;
      position: relative;
    }
    header .logo {
      /* 결과적으로 header 영역 가운데에 수직으로 배치 */
    
      height: 75px;
      /* 부모 요소를 기준으로 로고를 배치 */
      position: absolute;
      top: 0;
      bottom: 0;
      margin: auto;
    }
    
    /*
    - 가운데 수직 정렬 방법
    - 부모 요소에 기준점(position: relative) 존재
    - position: absolute 선언
    - height(높이값),top과 bottom(기준값), margin(auto)
    - 가운데 수평 정렬도 같은 방법(height 대신 width 사용)
    */

     

    서브 메뉴 제작 및 배치

     

     

    <!-- 서브 메뉴 제작 -->
    <div class="sub-menu">
      <ul class="menu">
        <li>
        <a href="/signin">Sign In</a>
        </li>
        <li>
        <a href="#">My Starbucks</a>
        </li>
        <li>
        <a href="javascript:void(0)">Customer Service & Ideas</a>
        </li>
        <li>
        <a href="javascript:void(0)">Find a Store</a>
        </li>
      </ul>
      <div class="search">
        <input type="text" />
        <div class="material-icons">search</div>
      </div>
    </div>
    
    <!--
    # (URL 해시(Hash) 기호) - CSS ID 선택자를 이용해 페이지 내 특정 위치로 이동할 수 있다
    javascript:void(0) - 링크 이동 없음
    -->

     

    header .sub-menu {
      position: absolute;
      top: 10px;
      right: 0;
      display: flex;
    }
    header .sub-menu ul.menu {
      font-family: Arial, sans-serif;
      /* 수평 정렬 배치 */
      display: flex;
    }
    header .sub-menu ul.menu li {
      position: relative;
    }
    header .sub-menu ul.menu li::before {
      /* 서브 메뉴 사이에 구분선 배치 */
    
      content: "";
      width: 1px;
      height: 12px;
      background: #e5e5e5;
      position: absolute;
      top: 0;
      bottom: 0;
      margin: auto;
    }
    header .sub-menu ul.menu li:first-child:before {
      display: none;
    }
    header .sub-menu ul.menu li a {
      font-size: 12px;
      padding: 11px 16px;
      display: block;
      color: #656565;
    }
    header .sub-menu ul.menu li a:hover {
      /* a 태그에 마우스를 올리면 작동 */
    
      color: #000;
    }
    header .sub-menu .search {
      height: 34px;
      position: relative;
    }
    header .sub-menu .search input {
      /* input 요소 디자인 */
    
      width: 36px;
      height: 34px;
      padding: 4px 10px;
      border: 1px solid #ccc;
      box-sizing: border-box;
      border-radius: 5px;
      outline: none;
      background-color: #fff;
      color: #777;
      font-size: 12px;
      transition: width .4s;
    }
    header .sub-menu .search input:focus {
      /* input 요소가 focus 되면 작동 */
    
      width: 190px;
      border-color: #669900;
    }
    header .sub-menu .search .material-icons {
      /* search icon 수직 가운데 정렬 */
    
      height: 24px;
      position: absolute;
      top: 0;
      bottom: 0;
      right: 5px;
      margin: auto;
      transition: .4s;
    }
    header .sub-menu .search.focused .material-icons {
      opacity: 0;
    }

     

    // 클래스가 search 요소를 찾아서 변수(searchEl)에 저장
    const searchEl = document.querySelector('.search');
    // search 안에 있는 input 요소를 찾아서 변수(searchInputEl)에 저장
    const searchInputEl = searchEl.querySelector('input');
    
    // searchEl(클래스가 search 요소)가 클릭되면 동작
    searchEl.addEventListener('click', function () {
      // searchInputEl(search 안에 있는 input) focus
      searchInputEl.focus();
    });
    
    // searchInputEl이 focus 되면 동작
    searchInputEl.addEventListener('focus', function () {
      searchEl.classList.add('focused');
    
      // html 속성 추가, 힌트(placeholder) 
      searchInputEl.setAttribute('placeholder', '통합검색');
    });
    
    // focus가 해제되면 동작
    searchInputEl.addEventListener('blur', function () {
      searchEl.classList.remove('focused');
      searchInputEl.setAttribute('placeholder', '');
    });

     

    메인 메뉴 제작 및 배치

     

     

    <!-- 메인 메뉴 제작 -->
    <ul class="main-menu">
      <li class="item">
        <div class="item__name">COFFEE</div>
        <div class="item__contents">
          <div class="contents__menu">
            <ul class="inner">
              <li>
                <h4>커피</h4>
                <ul>
                  <li>스타벅스 원두</li>
                  <li>스타벅스 비아</li>
                  <li>스타벅스 오리가미</li>
                </ul>
              </li>
              <li>
                <h4>에스프레소 음료</h4>
                <ul>
                  <li>도피오</li>
                  <li>에스프레소 마키아또</li>
                  <li>아메리카노</li>
                  <li>마키아또</li>
                  <li>카푸치노</li>
                  <li>라떼</li>
                  <li>모카</li>
                  <li>리스트레또 비안코</li>
                </ul>
              </li>
              <li>
                <h4>커피 이야기</h4>
                <ul>
                  <li>스타벅스 로스트 스팩트럼</li>
                  <li>최상의 아라비카 원두</li>
                  <li>한 잔의 커피가 완성되기까지</li>
                  <li>클로버® 커피 추출 시스템</li>
                </ul>
              </li>
              <li>
                <h4>최상의 커피를 즐기는 법</h4>
                <ul>
                  <li>커피 프레스</li>
                  <li>푸어 오버</li>
                  <li>아이스 푸어 오버</li>
                  <li>커피 메이커</li>
                  <li>리저브를 매장에서 다양하게 즐기는 법</li>
                </ul>
              </li>
            </ul>
          </div>
          <div class="contents__texture">
            <div class="inner">
              <h4>나와 어울리는 커피 찾기</h4>
              <p>스타벅스가 여러분에게 어울리는 커피를 찾아드립니다.</p>
              <h4>최상의 커피를 즐기는 법</h4>
              <p>여러가지 방법을 통해 다양한 풍미의 커피를 즐겨보세요.</p>
            </div>
          </div>
        </div>
      </li>
    </ul>
    
    <!--
    -HTML 클래스 속성의 작명법-
    BEM (Block Element Modifier)
    
    요소__일부분 - Underscore(Lodash) 기호로 요소의 일부분을 표시
    요소--상태 - Hyphen(Dash) 기호로 요소의 상태를 표시
    -->

     

    /* CSS 메인 메뉴 디자인 */
    header .main-menu {
      position: absolute;
      bottom: 0;
      right: 0;
      z-index: 1;
      display: flex;
    }
    header .main-menu .item .item__name {
      padding: 10px 20px 34px 20px;
      font-family: Arial, sans-serif;
      font-size: 13px;
    }
    header .main-menu .item:hover .item__name {
      background-color: #2c2a29;
      color: #669900;
      border-radius: 6px 6px 0 0;
    }
    header .main-menu .item .item__contents {
      width: 100%;
      position: fixed;
      left: 0;
      display: none;
    }
    header .main-menu .item:hover .item__contents {
      display: block;
    }
    header .main-menu .item .item__contents .contents__menu {
      background-color: #2c2a29;
    }
    header .main-menu .item .item__contents .contents__menu > ul {
      display: flex;
      padding: 20px 0;
    }
    header .main-menu .item .item__contents .contents__menu > ul > li {
      width: 220px;
    }
    header .main-menu .item .item__contents .contents__menu > ul > li h4 {
      padding: 3px 0 12px 0;
      font-size: 14px;
      color: #fff;
    }
    header .main-menu .item .item__contents .contents__menu > ul > li ul li {
      padding: 5px 0;
      font-size: 12px;
      color: #999;
      /* 마우스 포인터가 손가락 모양으로 변경 */
      cursor: pointer;
    }
    header .main-menu .item .item__contents .contents__menu > ul > li ul li:hover {
      color: #669900;
    }
    header .main-menu .item .item__contents .contents__texture {
      padding: 26px 0;
      font-size: 12px;
      background-image: url("../images/main_menu_pattern.jpg");
    }
    header .main-menu .item .item__contents .contents__texture h4 {
      color: #999;
      font-weight: 700;
    }
    header .main-menu .item .item__contents .contents__texture p {
      color: #669900;
      margin: 4px 0 14px;
    }

    댓글

Designed by Tistory.