반응형
Sticky는 생각처럼 동작하지 않는 경우가 많습니다. 다음 체크리스트를 이용해 일반적인 트러블슈팅 방법을 알아봅시다.
How to Fix Issues With CSS Position Sticky Not Working?
Learn possible reasons why CSS position sticky might not be working for you
www.designcise.com
CSS position:sticky 속성이 동작하지 않는 데에는 여러 가지 이유가 있을 수 있습니다.
다음 체크리스트를 이용해 몇 가지 일반적인 / 잠재적인 문제를 해결할 수 있습니다.
1. 브라우저 호환성 확인하기
2. 임계값 설정여부 확인
임계값을 설정했는지 확인하세요.
즉, 다음 속성 중 하나 이상에 대해 "auto" 이외의 값을 설정해야 합니다.
- top
- right
- bottom
- left
sticky 요소가 지정된 임계값을 넘지 않으면 상대적으로 위치한 요소로 동작합니다.
.sticky {
position: sticky;
top: 0;
}
3. 사파리 벤더 접두사
13 미만의 Safari 버전을 지원하려면 필요합니다.
.sticky {
position: -webkit-sticky;
position: sticky;
top: 0;
}
4. 상위 요소에 oveflow 속성이 있는지 확인
부모나 조상(parent/ancestor)에 다음 오버플로 속성이 존재하면, sticky는 동작하지 않습니다.
(해당 overflow 컨테이너의 높이가 명시적으로 선언되어 있으면 동작함)
- overflow: hidden
- overflow: scroll
- overflow: auto
오버플로 속성이 있는 상위 항목을 확인하기 위한 스니펫
let parent = document.querySelector('.sticky').parentElement;
while (parent) {
const hasOverflow = getComputedStyle(parent).overflow;
if (hasOverflow !== 'visible') {
console.log(hasOverflow, parent);
}
parent = parent.parentElement;
}
오버플로와 sticky 같이 활용하는 방법
ovrerflowing 컨테이너에 높이를 지정합니다.
5. 부모 요소에 height 속성 설정 여부 확인
부모 요소에 높이를 설정해야 스크롤 시 고정할 곳이 생깁니다.
sticky는 컨테이너 높이 내 고정/스크롤을 의미합니다.
6. 부모가 Flexbox인지 확인
sticky 요소의 부모가 flexbox인 경우 확인해야 할 두 가지 시나리오가 있습니다.
- sticky 요소의 align-self: auto 선언
- sticky 요소의 align-self: stretch 선언
sticky 요소의 align-self: auto 선언이 있는 경우
이 경우 align-self의 값은 부모의 align-items 값으로 계산됩니다.
따라서 부모에 align-items: normal(기본값) 또는 align-items: stretch 속성이 있는 경우,
sticky 요소의 높이가 사용 가능한 전체 공간을 채우기 위해 늘어납니다.
이는 부모 내에서 스크롤할 공간을 남기지 않습니다.
sticky 요소의 align-self: strech 선언이 있는 경우
이 경우 고정 요소는 부모 요소의 높이까지 늘어나며 이 때문에 스크롤할 공간이 없습니다.
flexbox와 sticky 같이 사용하기
align-self 속성의 값을 align-self: flex-start로 간단히 설정할 수 있습니다.
이렇게 하면 sticky 요소가 시작 부분에 놓이고 늘어나지 않습니다.
반응형
'FrontEnd' 카테고리의 다른 글
프론트엔드 성능 최적화 가이드 1장 스터디 (0) | 2022.11.15 |
---|---|
API 디자인 : API 디자인의 기본과 API 디자인 테이블 (1) | 2022.11.13 |
리액트 쿼리 : 쿼리 취소하기 (0) | 2022.11.03 |
[Remix] 풀 스택 컴포넌트(Full Stack Components) (0) | 2022.11.03 |
Critical Rendering Path 최적화하기 (0) | 2022.10.31 |