작성
·
307
1
■ 질문 남기실 때 꼭! 참고해주세요.
- 먼저 유사한 질문이 있었는지 검색해주세요.
- 궁금한 부분이 있으시면 해당 강의의 타임라인 부분을 표시해주시면 좋습니다.
- HTML, CSS, JQUERY 코드 소스를 텍스트 형태로 첨부해주시고 스크린샷도 첨부해주세요.
- 다운로드가 필요한 파일은 해당 강의의 마지막 섹션에 모두 있습니다.
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
body {
height: 100vh;
/* display: flex;
justify-content: center;
align-items: center; */
color: #fff;
margin:0;
padding:0;
}
a {
color: #222;
text-decoration: none;
}
.container {}
input[id=trigger] {
display: none;
}
label[for=trigger] {
/* border: 1px solid red; */
width: 40px;
height: 30px;
display: block;
position: absolute;
cursor: pointer;
right: 10px;
top:50%;
transform: translateY(-50%);
transition: 0.3s;
}
label[for=trigger] span {
position: absolute;
height: 2px;
background-color: #000;
width: 100%;
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%;
}
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);
}
.sidebar {
width: 300px;
height: 100vh;
background-color: #000;
position: absolute;
right: -300px;
transition: 0.3s;
}
input[id=trigger]:checked ~ .sidebar {
right: 0;
}
input[id=trigger]:checked + label[for=trigger] {
right: 310px;
}
혼자 다시 연습하다 6:50초 경에 나온 사이드바 부분의 position을 fiexd 가 아닌 absolute 로 한 뒤 right: -300px 로 가렸더니 숨겨지는게 아니라 가로스크롤이 생기면서 옆을 볼 수 있게 되는데, 애초에 부모의 값이 따로 없고 100% 라 그런거라면 왜 fiexd는 가려지는데 absolute 는 옆에 공간이 따로 생겨서 사이드바가 생기는 걸까요?
그리고 높이는 둘다 똑같이 100vh 인데 왜 세로 스크롤도 생기는걸까요???
그리고 또 하나 궁금한게 이전에 햄버거 버튼을 만들때 label에 position : relative; 를 주고 span에 position : absolute; 를 줘서 배치를 했는데, 사이드바 생성시 햄버거 버튼의 위치 조정을 위해 label을 absolute로 변경 하게 되면 부모자식 관계였던 lable과 span이 모두 absolute 속성을 가지게 되는데 이런 건 전혀 문제될게 없는걸까요???
답변 1
0
답변1)
대부분의 경우 absolute를 사용하지만 가로 세로에 스크롤이 생기는 경우는 반드시 fixed로 해줘야 가로 스크롤 세로 스크롤이 생기지 않습니다. absolute는 여전히 자신의 크기 만큼 브라우저 곧 body의 크기를 넓히게 됩니다. 그래서 이런 경우 fixed 를 사용해야 합니다.
답변2)
자식요소에 absolute가 있으면 부모요소에 relative를 주어야 부모 자식 관계가 됩니다.
그런데 자식요소에 absolute를 주고 부모요소에 relative를 주려고 할 때 이미 absolute가 있다면 부모 자식 관계가 됩니다.
곧, label에 absolute를 주어도 span과의 부모 자식 관계는 그대로 유지됩니다.
언제나 빠른 답변 감사드립니다~