소스 :
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>
댓글 ( 0)
댓글 남기기