1. 문제 상황
페이지를 아래로 내리면 masthead가 가려져서, 다시 masthead를 보기 위해 페이지 최상단까지 올라가야 하는 불편함이 있다. 따라서 본 포스팅에서는 상단 masthead를 고정하는 방법을 소개한다.
2. 시도한 방법들
2-1) fixed position
masthead의 element 속성을 보면, position이 relative로 되어있다.
처음에는, 다음과 같이 position을 fixed로 지정하여 디바이스의 최상단으로 부터 x=100px만큼 떨어지게 표현하고자 하였다.
문제점
fix가 되긴 하지만, css 속성들이 깨져서 margin이 제대로 들어가지 않는 문제점이 있었다.
2-2) sticky position
따라서 position을 sticky로 지정하여 해당 문제를 해결하였다. position을 sticky로 설정하면, 해당 영역의 x 또는 y 값이 설정한 위치에 도달하기 전까지는 static으로, 넘어가면 fixed로 취급한다. top:0px로 놓으면 초기에는 static으로 보이다가 스크롤 하는 순간 fixed로 취급되어 masthead가 상단에 붙어있는 것처럼 보인다. 더불어서, background-color와 세부 요소들을 조금 더 수정해주면, masthead를 상단에 고정시킬 수 있다!
3. 코드
3-1) masthead css 수정
_sass/minimal-mistakes/_masthead.scss
의 masthead에 대한 속성을 변경한다. position을 sticky로 바꾸어주고, top, background-color 속성을 부여한다. 이 때, color는 본인이 사용하고 있는 테마에 맞게 바꾸어주면 된다.
.masthead {
position: sticky; // 이 부분 수정 default : relative
top: 0px; // 이 부분 추가
background-color: rgb(255,255,255); // 이 부분 추가
border-bottom: 1px solid $border-color;
-webkit-animation: $intro-transition;
animation: $intro-transition;
-webkit-animation-delay: 0.15s;
animation-delay: 0.15s;
z-index: 20;
3-2) 우측 sidebar css 수정
_sass/minimal-mistakes/_sidebar.scss
의 sidebar__right 속성을 변경해준다. 본인의 경우에는 우측에 페이지 목차를 요약해주는 사이드 바를 사용하는데, 해당 사이드 바를 사용하지 않는 경우에는 바꾸어 줄 필요없다.
.sidebar__right {
margin-bottom: 1em;
@include breakpoint($large) {
position: absolute;
top: 0;
right: 0;
width: $right-sidebar-width-narrow;
margin-right: -1 * $right-sidebar-width-narrow;
padding-left: 1em;
z-index: 10;
&.sticky {
@include clearfix();
position: -webkit-sticky;
position: sticky;
top: 10em; // 이 부분 수정 default : 2em
float: right;
.toc {
.toc__menu {
overflow-y: auto;
max-height: calc(100vh - 7em);
}
}
}
}
3-3) 좌측 sidebar css 수정
_sass/minimal-mistakes/_utillities.scss
의 sticky 속성을 변경해준다. 이 부분도 좌측 사이드바가 있는 경우에 바꾸어주면 된다.
.sticky {
@include breakpoint($large) {
@include clearfix();
position: -webkit-sticky;
position: sticky;
top: 4em; // 이 부분 수정 default : 2em
> * {
display: block;
}
}
}
4. 결과
스크롤을 내려도 masthead가 상단에 잘 붙어있다.
댓글남기기