position: sticky 사용시 주의
position: sticky사용시 주의할 것
만들고자 한 header
✔️두개의 영역으로 나누어 만들기
✔️스크롤하면 second-header가 상단에 고정되는 ui를 만들고 싶었다.
🧐그래서 <header>안에 div로 영역을 두개로 나누고 second-header에 position: sticky를 부여해주었는데 원하는대로 적용이 되지 않고 스크롤시 그대로 밀려나오도라,,!
<body>
<div class="wrap">
<header>
<div class="first-header"></div>
<div class="second-header"></div>
</header>
...
...
/* Default Style*/
body {
font-family: "Pretendard", sans-serif;
height: 100%;
background-color: $color-white;
color: $color-black;
}
a {
color: $color-black;
}
.wrap {
min-width: 1280px;
height: auto;
overflow: auto;
/* ########## Header ########## */
header {
.first-header{
padding-top: 25px;
height: 80px;
}
.second-header {
background-color: $color-white;
position: -webkit-sticky;
position: sticky;
top: 0;
width: 100%;
height: 80px;
z-index: 99;
}
....
}
}
구글링을 해보니 position: sticky를 사용하기 위해서는 조건들이 좀 있었다.
[해당 요소]
1. 위치 값을 정해주어야 한다.(top, right, bottom, left 중 하나의 값은 무조건 필)
2. position: sticky 속성은 자신의 바로 위의 부모 요소 내에서만 적용된다.
[부모 요소]
1. 부모 요소들 중에서 overflow 속성이 적용된 것이 있으면 동작하지 않는다.
overflow: hidden, auto, scroll
2. 바로 위 부모 요소에 height가 적용되어 있는지 확인한다.(여기선 %값의 속성은 적용이 되지 않는다.)
height: 100%; /* % 속성은 적용 불가 */
height: auto;
height: 100px;
height: 100vh;
문제로 우선 second-header을 header내부에서 나눈것이라 header이 스크롤 되면 second-header이 header에 sticky되는 것이 문제였다.
그래서 아쉽지만 다음과 같은 구조로 html을 변경했고,
.wrap
| header
| | .first-header
| .second-header
빼낸 .second-header의 부모요소인 .wrap에 있던 overflow: hidden을 없애주었다.
<body>
<div class="wrap">
<header>
<div class="first-header"></div>
</header>
<div class="second-header"></div>
...
...
/* Default Style*/
body {
font-family: "Pretendard", sans-serif;
height: 100%;
background-color: $color-white;
color: $color-black;
}
a {
color: $color-black;
}
.wrap {
min-width: 1280px;
height: auto;
/* ########## Header ########## */
header {
.first-header{
padding-top: 25px;
height: 80px;
}
.second-header {
background-color: $color-white;
position: -webkit-sticky;
position: sticky;
top: 0;
width: 100%;
height: 80px;
z-index: 99;
}
....
}
}
🫡즉, 중요했던 것은 부모요소의 스크롤시 stick가 먹히는 점 이라는 것 같다. 그래서 부모의 높이 값도 있어야 하고 overflow도 없어야 하는 것 같다. sticky를 사용할 요소의 부모를 잘 보아야겠다.