실전연습(HTML/CSS/JS) : Nav bar

Seokho·2021년 11월 10일
0

✏️ 실전연습

반응형 Navbar를 만들어봤습니다.

참조 사이트
https://www.youtube.com/watch?v=X91jsJyZofw

💡 순서

  1. 레이아웃 구조의 계획
  2. HTML 구조 만들기
  3. CSS 스타일링 하기
  4. Javascript로 이벤트 처리
  5. CSS 변수

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Nav bar</title>
    <link rel="stylesheet" href="style.css">
    <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=Open+Sans:wght@400;600;700&display=swap" rel="stylesheet">
    <script src="https://kit.fontawesome.com/b17d4fa9e7.js" crossorigin="anonymous"></script>
    <script src="main.js" defer></script>
</head>
<body>
    <nav class="navbar">
        <div class="navbar__logo">
            <i class="fab fa-accusoft"></i>
            <a href="">DreamCoding</a>
        </div>

        <ul class="navbar__menu">
            <li><a href="">Home</a></li>
            <li><a href="">Gallery</a></li>
            <li><a href="">Wedding</a></li>
            <li><a href="">FAQ</a></li>
            <li><a href="">Booking</a></li>
        </ul>

        <ul class="navbar__icons">
            <li><i class="fab fa-twitter"></i></li>
            <li><i class="fab fa-facebook-f"></i></li>
        </ul>

        <a href="#" class="navbar__toogleBtn">
            <i class="fas fa-bars"></i>
        </a>
    </nav>
</body>
</html>

CSS

:root{
    --text-color: #f0f4f5;
    --background-color: #263343;
    --accent-color:#d49466;
}

body {
    margin: 0px;
    font-family: 'Open sans';
}

a {
    text-decoration: none;
    color: white;
}

.navbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    background:#263343;
    padding: 8px 12px;
}

.navbar__logo {
    font-size: 24px;
    color: white;
}

.navbar__logo i {
    color: #d49466;
}

.navbar__menu {
    display: flex;
    list-style: none;
    padding-left: 0px;
}

.navbar__menu li {
    padding: 8px 12px;

}

.navbar__menu :hover {
    background: #d49466;
    border-radius: 4px;
}

.navbar__icons {
    list-style: none;
    color: white;
    display: flex;
    padding-left: 0px;
}

.navbar__icons li {
    padding: 8px 12px;
}

.navbar__toogleBtn {
    display: none;
    position: absolute;
    right: 32px;
    font-size: 24px;
    color: #d49466;
}

@media screen and (max-width: 768px) {
    .navbar {
        flex-direction: column;
        align-items: flex-start;
        padding: 8px 24px;
    }
    
    .navbar__menu {
        display: none;
        flex-direction: column;
        align-items: center;
        width: 100%;
    }

    .navbar__menu li {
        width: 100%;
        text-align: center;
    }

    .navbar__icons {
        display: none;
        justify-content: center;
        width: 100%;
    }

    .navbar__toogleBtn {
        display: block;
    }

    .navbar__menu.active,
    .navbar__icons.active {
        display: flex;
    }
}

Javascript

const toggleBtn = document.querySelector('.navbar__toogleBtn');
const menu = document.querySelector('.navbar__menu');
const icons = document.querySelector('.navbar__icons');

toggleBtn.addEventListener('click', () => {
    menu.classList.toggle('active')
    icons.classList.toggle('active')
});

✏️ 완성

이론과 문법을 배우는 것도 좋지만, 역시 직접 아웃풋을 만들어봐야 더 기억에도 남고 실력 향상에 도움이 됩니다. 다음은 유튜브 사이트를 반응형으로 만들어볼 계획 입니다. 재미있긴 한데 아직 어렵다..😇



profile
같이의 가치를 소중하게 생각하는, 프론트엔드 개발자 이석호 입니다.

0개의 댓글