오늘은 버튼을 누르면 등장하는 서브메뉴를 만들고,

자바스크립트로 class를 탈부착하는 문법을 배워보자!

 

오늘의 목표 결과물

 

 


 

Bootstrap 설치하기

 


Bootstrap css 파일을 설치해놓으면

부트스트랩 홈페이지에 올라와 있는 버튼, 탭, 메뉴 같은걸 찾아서 복붙하면서 개발할 수 있다.

(직접 css 하나하나 안해도 됨ㅎ)

1. Bootstrap 홈페이지 접속
   - get started를 눌러 설치 페이지로 이동한다

 

2. 다음과 같은 CDN 링크에 있는 url 을 복사하고, 아래 양식에 맞춰 작성한다.

  - 주의: 버전이 5.X 이상인지 확인하기

  - (강사님이 제공해주신 링크도 있긴 한데.. 언제나 가장 최신 버전을 유지하면 좋을 것 같아서 홈페이지에서 보는 방법으로 안내해드림)

<!-- css -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet">

<!-- js -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"></script>

 

3. 작성한 코드 중..

  - css 파일은 <head> 태그 안에,

  - js 파일은 <body> 태그 끝나기 전에 붙여넣기

 

그러면 설치 끝!

 

 

Navbar 를 만들어보자 🪄

 

이제 상단 메뉴(Navbar)부터 만들어보자
새로 익힐 만한 내용은 없어서 더 설명하지는 않고, 코드만 공유한다

<!-- navbar -->

<nav class="navbar navbar-light bg-light">
  <div class="container-fluid">
    <span class="navbar-brand">Navbar</span>
    <button class="navbar-toggler" type="button">
      <span class="navbar-toggler-icon"></span>
    </button>
  </div>
</nav>

 

그러면 이렇게 생긴 상단바가 완성된다

 

 

 

기본 모양은 라이브러리로 완성했으니 이제는 동작을 추가하면 된다

햄버거 메뉴를 누르면 등장하는 서브메뉴를 만들어보자

이전에 공부했던 대로, 모든 UI 는 아래와 같은 공식을 따른다

 

1. 미리 html css로 디자인 해놓고 숨김
2. 버튼누르면 보여줌 (혹은 반대로)

 

 

 

 

1️⃣  UI 디자인

우선 1번인 디자인부터 해보자

서브메뉴 디자인은 아래와 같이 진행했다 (Bootstrap 홈페이지 → list group 참고)

<!-- submenu -->

<ul class="list-group">
  <li class="list-group-item">An item</li>
  <li class="list-group-item">A second item</li>
  <li class="list-group-item">A third item</li>
  <li class="list-group-item">A fourth item</li>
  <li class="list-group-item">And a fifth one</li>
</ul>

 

실행시키면.. 짠!

네비게이션 바 밑에 메뉴 리스트가 생성되었다

 

 

2️⃣  동작 추가하기

다음은 2번 코스입니다 🍽

버튼을 누르면 리스트를 보여달라고 해보자 (그런데 이젠 class 탈부착을 곁들인..)

→ 왜? 나중에 display : block 말고 다른 스타일도 동시에 주고 싶을 경우 유용함

 

우선 css 파일에서 아래와 같이 작성해준다

1) 평소에는 .list-group 숨기기

2) .show (가 생기면) 보여주기

/* css */
.list-group {
  display : none
}
.show {
  display : block
}

 

다음으로는 버튼 누르면 list-group 에다가 show 클래스 부착하라고 코드 작성!

 

- addEventListener 작성까지는 동일하게 진행

- 다만 list-group 클래스를 클릭할 때 show 클래스를 탈부착할 것이기 때문에 아래와 같이 작성

- .classList.add('show') 라고 하면 클릭 시 show 라는 클래스를 추가해달라는 의미

- 여기서는 클래스 추가/제거 둘 다 하고 싶으니 add 대신 toggle 을 사용한다

<script>
   document.getElementsByClassName('navbar-toggler')[0].addEventListener('click', 
   	function(){
            document.getElementsByClassName('list-group')[0].classList.toggle('show');
   });        
</script>

 

 

 

더 배워보기: querySelector

 

getElementById(), getElementsByClassName() 과 같은 셀렉터 외에

더 유용하게 쓸 수 있는 것들이 있다

 

바로.. querySelector(), 혹은 querySelectorAll() 이라고 하는데..

쿼리셀렉터는 아래와 같이 작성한다

document.querySelector('.list-group')

 

이 셀렉터의 장점은 종류별(id / class)로 구분할 필요가 없고,

또 css 문법을 그대로 쓸 수 있어서 편리하다는 것이다

 

단....!

querySelector() 는

맨 위의 요소 한 개만 찾아준다

 

예를 들어 서브메뉴의 .list-group-item 을 찾아달라고 하면

가장 위에 있는 한 녀석(An item)만 찾아준다는 것이다

이때 원하는 녀석을 찾기 위해 필요한 것이 바로 querySelectorAll() 이다

 

querySelectorAll() 은 .list-group-item 에 해당하는 모든 요소를 다 찾아온다

그래서 이 친구도 getElementsByClassName 처럼 인덱싱이 필요하다. 대괄호 [ ] 사용할 것!

 

 


 

문제

문제 

지금까지 썼던 셀렉터 (getElementById, getElementsByClassName) 를

querySelector로 다 바꿔보자

 

풀이

- querySelector() 사용

<script>
   document.querySelector('.navbar-toggler').addEventListener('click', 
       function(){
              document.querySelector('.list-group').classList.toggle('show');
   });        
</script>

- querySelectorAll() 사용 (대괄호 [ ] 추가)

<script>
   document.querySelectorAll('.navbar-toggler')[0].addEventListener('click', 
       function(){
              document.querySelectorAll('.list-group')[0].classList.toggle('show');
   });        
</script>

 

 

 


 

TIL 끝!