안녕하세요

5월30일 11일차 - 반응형 화면 구현하기 본문

프론트엔드 국비교육

5월30일 11일차 - 반응형 화면 구현하기

sakuraop 2022. 5. 30. 17:40

반응형화면으로 메뉴를 구성하는 방법을 배웠습니다.

큰 화면에서는 헤더에 메뉴들이 나열되어 있습니다.

화면의 크기가 지정된 크기 이하로 작아진 화면에서는 메뉴들이 사라지고, 버튼이 생깁니다.

버튼을 누르면 슬라이드로 메뉴창이 나옵니다.

[수업 중 구현한 페이지]


주석 입력 방법입니다. 협업을 할 때에는 ~를 누가 ~를 언제 수정했다. 하고 기록을 남기는 것이 중요합니다.
    <div class="Wrap">
        <!-- { 2022.05.30 young -->
        <header class="header"></header>
        <!-- 2022.05.30 young } -->

/* 2022.05.30 young */
.header {}

// 2022.05.30 young
document.querySelector('.header').style.color = 'red'


html 기본 틀입니다.
<body>
    <div class="Wrap">
        <!-- { 2022.05.30 young -->
        <header class="header">

        </header>
        <!-- 2022.05.30 young } -->
        <main>

        </main>
        <footer>
            
        </footer>
    </div>
</body>


없애기 none의 대척점에 있는 나타내기 는block 입니다.
display: none; <-> display: block;


!important는 css가 js보다 우선하게 하는 방법입니다.
하지만 기억만 해 둘 뿐 실제로 이용할 일은 거의 없습니다. 작업이 미숙하다는 느낌을 받게 됩니다.
.header {
    color: blue !important;
}


반응형으로 만드는 방법입니다. 768px 이하의 사이즈일 경우에 적용됩니다. 기준 768px는 아이패드 가로사이즈였습니다.

max-width:768px 는 화면의 크기가 768px보다 작을 경우 적용되도록 한다는 의미입니다. 
@media (max-width:768px) {
    .header {
        color: red;
      }
}


모바일버전과 pc버전 간 화면을 전환하는 버튼을 만들 때 이용하는 방법입니다.
      <div class="mopen">open</div>

.mopen {
    display: none;
}
@media (max-width:768px) {
      .mopen {
        display: block;
    }
}


반응형 화면을 구현해봅니다.

작동원리는 만들어 둔 css 속성을 @media 안에 붙여 넣고 필요한 속성만을 골라서 바꾸면 됩니다.
@media (max-width:1000px) {
    .header {
        line-height: 100px;
      } 

      .header .container {
        display: flex; 
        justify-content: space-between;
        width: auto; /* 1200px 고정이 아니라 화면 크기에 따라 변화하는 auto 로 설정합니다. */
        margin: 0 auto;
      }


      .header .container ul {
        display: flex;
        gap: 40px;
      }
  .header .container ul {
    display: flex;
    flex-direction: column;
    gap: 0;
    line-height: 40px;
  }
위와 같이 속성들을 바꿉니다.


메뉴 버튼을 누를 때 left: -100%; 값이 left: 0;이 되도록 하면 숨기고 나타나도록 할 수 있습니다.
  nav {
    position: fixed;
    top: 0;
    left: -100%;
    width: calc(100% - 90px);
    height: 100vh;
    z-index: 999;
  }
  nav.on {
    left: 0;
  }


js에서 click 이벤트를 구현합니다.
document.querySelector('.mopen').addEventListener('click', function() {
    document.querySelector('nav').classList.toggle('on')
})

부드럽게 만들기 위해 transition을 줍니다.
  nav {
    position: fixed;
    top: 0;
    left: -100%;
    width: calc(100% - 90px);
    height: 100vh;
    background: #ff0;
    z-index: 999;
    transition: left 0.5s;
  }


메뉴박스를 x로 바꿉니다.

document.querySelector(".mopen").addEventListener("click", function () {
  document.querySelector("nav").classList.toggle("on");
  this.classList.toggle("on");
});


  .mopen.on span:nth-child(1) {
    display: none;
  }
  .mopen.on span:nth-child(2) {
    transform: rotate(45deg);
  }
  .mopen.on span:nth-child(3) {
    transform: rotate(-45deg);
  }
  .mopen.on span:nth-child(4) {
    display: none;
  }