인접선택자를 활용하여 사이드메뉴 만드는 방법
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를 수정하는 것이다.
<div class="container">
<input type="checkbox" id="trigger">
<label for="trigger">
<span></span>
<span></span>
<span></span>
</label>
<div class="sidebar"></div>
</div>
/* 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;
}