실전퍼블리싱(checked-애니메이션 사이드메뉴 만들기)

Dev_Go·2022년 7월 16일
0
post-thumbnail

checked-애니메이션 사이드메뉴 만들기


인접선택자를 활용하여 사이드메뉴 만드는 방법

input[id=trigger]:checked + label[for=trigger] span:nth-child(1) 여기서 +는 input[id=trigger]:checked 됐을 때 자식요소label[for=trigger] span:nth-child(1)의 CSS를 수정하는 것이고 input[id=trigger]:checked ~ .sidebar ~를 사용하게되면 input[id=trigger]:checked 됐을 때 형제요소.sidebar의 CSS를 수정하는 것이다.

예제보기

HTML

  <div class="container">
    <input type="checkbox" id="trigger">
    <label for="trigger">
      <span></span>
      <span></span>
      <span></span>
    </label>
    <div class="sidebar"></div>
  </div>

CSS

/* Google Web Font */
@import url('https://fonts.googleapis.com/css?family=Raleway&display=swap');

/* Fontawesome 4.7 */
@import url('https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css');

body {
  font-family: 'Raleway', sans-serif;
  line-height: 1.5em;
  margin: 0;
  font-weight: 300;
  color: #222;
}
a {
  text-decoration: none;
}

/* Trigger Button */
input[id=trigger] {
  display: none;
}
label[for=trigger] {
  position: absolute;
  width: 25px;
  height: 20px;
  display: block;
  cursor: pointer;
  left: 10px;
  top: 50%;
  transform: translateY(-50%);
  transition: 0.3s;
}
label[for=trigger] span {
  width: 100%;
  height: 2px;
  position: absolute;
  background-color: #000;
  left: 0;
  transition: 0.3s;
}
label[for=trigger] span:nth-child(1) {
  top: 0;
}
label[for=trigger] span:nth-child(2) {
  top: 50%;
}
label[for=trigger] span:nth-child(3) {
  top: 100%;
}

/* Sidebar */
.sidebar {
  position: fixed;
  background-color: #222;
  width: 300px;
  height: 100vh;
  left: -300px;
  transition: 0.3s;
}

input[id=trigger]:checked + label[for=trigger] span:nth-child(1) {
  top: 50%;
  transform: rotate(45deg);
}
input[id=trigger]:checked + label[for=trigger] span:nth-child(2) {
  opacity: 0;
}
input[id=trigger]:checked + label[for=trigger] span:nth-child(3) {
  top: 50%;
  transform: rotate(-45deg);
}
input[id=trigger]:checked ~ .sidebar {
  left: 0px;
}
input[id=trigger]:checked + label[for=trigger] {
  left: 310px;
}
profile
프론트엔드 4년차

0개의 댓글