Javascript 30 - Day 5


Flex box를 다루는 방법을 공부한다.

Flex

  • flex 속성을 줄 경우 수직으로 정렬된다.

  • flex : 1 속성 : 모든 child element들이 주어진 컨테이너 공간을 모두 같은 너비로 나눠 쓰게 된다.

  • flex : 5 속성 : 해당 element가 나머지 element들 보다 5배 많은 공간을 가지게 된다.

classList

  • element.classList 로 select 할 수 있다.
  • DOMTokenList 자료형으로 반환된다.
  • includes는 Array에 사용할 수 있고, DOMTokenList는 contains를 사용해야 한다.
  • classList.toggle(class) : 클래스 리스트에 인자 클래스가 있는 경우 remove, 없는 경우 클래스를 추가시킨다.

완성된 프로그램

pic

5개의 flext element 들을 누르면 해당 영역이 넓어지고 위 아래에서 글자 element 들이 나타난다. 다른 flex element를 클릭하면 원래 넓게 표시되고 있던 요소의 classList가 조정되고 다른 element가 크게 표시된다. e.propertyNameincludes를 사용한 반면에 panel.classListcontains를 사용한 것을 기억하자.

소스 코드

  <script>
    const panels = document.querySelectorAll('.panel');

    function toggleOpen(){
      panels.forEach(panel => {
        if (panel.classList.contains('open')){ panel.classList.remove('open'); }
      });
      this.classList.toggle('open');
    }
    function toggleActive(e){
      if(e.propertyName.includes('flex')) {
        this.classList.toggle('open-active');
      }
    }
    panels.forEach(panel => panel.addEventListener('click', toggleOpen));
    panels.forEach(panel => panel.addEventListener('transitionend', toggleActive));
  </script>