CSS3

 

 

 

 

 

 

 

 

 

소스 :
https://github.dev/braverokmc79/tailwind-loopstudios-website
 

 

https://braverokmc79.github.io/tailwind-loopstudios-website/

 

 

 

1. HTML 문서 기본 구조

HTML 파일이 표준 규격을 따르도록 기본적인 요소들을 설정합니다:

  • <!DOCTYPE html>로 문서의 타입을 정의.
  • meta 태그를 사용하여 문서의 문자 인코딩과 뷰포트를 설정, 이로 인해 반응형 디자인이 가능하게 합니다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <!-- 폰트 및 Tailwind CSS 링크 추가 -->
</head>

 

 

 

2. 외부 폰트 및 Tailwind CSS 추가

Tailwind CSS를 적용하여 빠르고 효율적으로 스타일링할 수 있도록 하고, Google Fonts를 통해 Alata와 Josefin Sans 같은 외부 폰트를 불러옵니다.

<link href="https://fonts.googleapis.com/css2?family=Alata&family=Josefin+Sans:wght@300&display=swap" rel="stylesheet" />
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">

 

 

 

3. 스타일 설정 (햄버거 메뉴 애니메이션)

햄버거 메뉴의 애니메이션 효과를 위한 CSS를 정의합니다. 메뉴 버튼을 클릭했을 때, 애니메이션이 자연스럽게 작동하도록 합니다. 예를 들어, 햄버거 아이콘이 90도로 회전하고 각 막대가 교차하는 효과를 제공합니다.

<style>
.hamburger { /* 햄버거 버튼 기본 스타일 */ }
.open { /* 햄버거가 열렸을 때의 스타일 */ }
</style>

 

 

 

4. 네비게이션 바 구성

nav 태그 안에 로고와 네비게이션 링크를 포함합니다. Tailwind CSS의 유틸리티 클래스를 사용하여 스타일을 빠르게 적용합니다. 예를 들어 flex와 items-center를 사용하여 콘텐츠를 가로로 정렬하고 가운데 정렬합니다.

<nav class="flex items-center justify-between font-bold text-white">
  <img src="images/logo.svg" alt="">
  <div class="hidden md:flex"> <!-- 데스크탑에서만 보이는 네비게이션 메뉴 -->
    <a href="#">소개</a>
    <a href="#">이벤트</a>
    <a href="#">제품</a>
    <a href="#">지원</a>
  </div>
  <div class="md:hidden"> <!-- 모바일에서 보이는 햄버거 메뉴 버튼 -->
    <div id="menu-btn" class="block hamburger focus:outline-none">
      <span class="hamburger-top"></span>
      <span class="hamburger-middle"></span>
      <span class="hamburger-bottom"></span>
    </div>
  </div>
</nav>

 

 

 

 

5. 모바일 메뉴

모바일에서는 햄버거 메뉴 버튼을 누르면 숨겨져 있던 네비게이션 메뉴가 나타납니다. 이 메뉴는 hidden 클래스로 기본적으로 숨겨져 있다가, 햄버거 버튼이 클릭되면 flex 클래스로 변환되어 표시됩니다.

<div id="menu" class="absolute hidden w-full min-h-screen bg-black">
  <a href="#" class="hover:text-pink-500">소개</a>
  <a href="#" class="hover:text-pink-500">직업</a>
  <a href="#" class="hover:text-pink-500">이벤트</a>
  <a href="#" class="hover:text-pink-500">제품</a>
  <a href="#" class="hover:text-pink-500">지원</a>
</div>

 

 

 

 

6. 자바스크립트로 햄버거 메뉴 제어

햄버거 버튼을 클릭했을 때, open 클래스를 토글하여 햄버거 애니메이션과 메뉴 표시를 제어합니다. addEventListener로 클릭 이벤트를 감지하고, classList.toggle을 사용해 hidden과 flex 클래스를 토글합니다.

const btn = document.getElementById('menu-btn');
const menu = document.getElementById('menu');

btn.addEventListener('click', function() {
  btn.classList.toggle('open');
  menu.classList.toggle('hidden');
  menu.classList.toggle('flex');
});

 

 

 

 

7. 최종 결과

결과적으로, 작은 화면에서는 햄버거 메뉴가 표시되고, 이를 클릭하면 메뉴가 펼쳐지며 애니메이션 효과가 적용됩니다. 큰 화면에서는 네비게이션 메뉴가 기본적으로 보이게 됩니다. Tailwind CSS로 반응형 레이아웃을 쉽게 만들었으며, 자바스크립트로 상호작용을 추가하여 동적인 메뉴를 완성했습니다.

 

 

 

 

 

 

 

 

 

전체

<!DOCTYPE html>
<html lang="ko">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <link rel="preconnect" href="https://fonts.googleapis.com" />
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
  <link href="https://fonts.googleapis.com/css2?family=Alata&family=Josefin+Sans:wght@300&display=swap"
    rel="stylesheet" />
  <link href="https://fonts.googleapis.com/css2?family=Nanum+Gothic:wght@400;700;800&display=swap" rel="stylesheet">
  <script src="js/script.js" defer></script>
  <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
  <title> Tailwind 햄버거 메뉴</title>
  <style>
    /* Hamburger Menu */
    .hamburger {
      cursor: pointer;
      width: 24px;
      height: 24px;
      transition: all 0.25s;
      position: relative;
    }

    .hamburger-top,
    .hamburger-middle,
    .hamburger-bottom {
      position: absolute;
      width: 24px;
      height: 2px;
      top: 0;
      left: 0;
      background: #fff;
      transform: rotate(0);
      transition: all 0.5s;
    }

    .hamburger-middle {
      transform: translateY(7px);
    }

    .hamburger-bottom {
      transform: translateY(14px);
    }

    .open {
      transform: rotate(90deg);
    }

    .open .hamburger-top {
      transform: rotate(45deg) translateY(6px) translateX(6px);
    }

    .open .hamburger-middle {
      display: none;
    }

    .open .hamburger-bottom {
      transform: rotate(-45deg) translateY(6px) translateX(-6px);
    }
  </style>
</head>

<body>
  <section id="hero">
    <div class="
    max-w-screen-2xl     
    mx-auto px-6     
    py-12 
    md:px-12
    h-96 bg-pink-500
    ">

      <nav class="flex items-center justify-between            
                font-bold text-white">
        <img src="images/logo.svg" alt="">


        <div class="hidden h-10 font-alta md:flex md:space-x-8">
          <div class="group">
            <a href="#">소개</a>
            <div class="mx-2 group-hover:border-b                    
                  group-hover:border-blue-50">
            </div>
          </div>

          <div class="group">
            <a href="#">이벤트</a>
            <div class="mx-2 group-hover:border-b                    
                 group-hover:border-blue-50">
            </div>
          </div>

          <div class="group">
            <a href="#">제품</a>
            <div class="mx-2 group-hover:border-b                    
                group-hover:border-blue-50">
            </div>
          </div>


          <div class="group">
            <a href="#">지원</a>
            <div class="mx-2 group-hover:border-b                    
                group-hover:border-blue-50">
            </div>
          </div>


        </div>


        <div class="md:hidden">
          <div id="menu-btn" class="z-40 block hamburger md:hidden focus:outline-none">
            <span class="hamburger-top"></span>
            <span class="hamburger-middle"></span>
            <span class="hamburger-bottom"></span>
          </div>
        </div>
      </nav>

      <div id="menu" class="absolute top-0 bottom-0 left-0 
  flex-col self-end
  hidden w-full min-h-screen py-1 pt-40 pl-12 space-y-3
  text-lg text-white uppercase bg-black
  ">
        <a href="#" class="hover:text-pink-500">소개</a>
        <a href="#" class="hover:text-pink-500">직업</a>
        <a href="#" class="hover:text-pink-500">이벤트</a>
        <a href="#" class="hover:text-pink-500">제품</a>
        <a href="#" class="hover:text-pink-500">지원</a>
      </div>

    </div>
  </section>

  <script>
    const btn = document.getElementById('menu-btn')
    const menu = document.getElementById('menu')
    btn.addEventListener('click', navToggle)

    function navToggle() {
      btn.classList.toggle('open')
      menu.classList.toggle('flex')
      menu.classList.toggle('hidden')
    }
  </script>

</body>

</html>

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

희생없이는 풍족한 것을 창조할 수 없다. - R. 롤랑

댓글 ( 0)

댓글 남기기

작성