• webmini life skin Ver 1.3.1 update view
  • 사이트 제작 문의 오랜 경험을 바탕으로 웹퍼블리싱을 해드립니다 제작 문의하기
  • 블로그 리뷰 문의 검색엔진최적화로 제품 리뷰를 해드립니다 리뷰 문의하기
Front-end/CSS(SASS,SCSS)

[CSS]부모요소가 display:flex; 일때 사이드 메뉴에 position:sticky; 를 적용해보자

by 빽짱구 2024. 6. 20.

 

부모요소가 display:flex; 일때 사이드 메뉴가 sticky 로 동작하게 하는 방법입니다.

구조는 다음과 같습니다.

HTML

<div class="container">
	<div class="contents">
    	컨텐츠 내용
    </div>
    
    <div class="aside">
    	사이드 메뉴(이부분이 position: sticky; 가 동작할 영역)
    </div>
</div>

스크롤 하면 aside 영역이 sticky 가 될 부분입니다.

 

CSS

.container{
   display:flex;
}

.contents{
   width:calc(100% - 30%); /* aside 영역 만큼 빼줌 */
}

.aside{
   align-self: flex-start; /* 이부분 추가 */
   position: sticky;
   top: 45px;
   right: 0;
   width: 30%;
}

 

flex 컨테이너 내에서 자식 요소들은 기본적으로 align-items 속성에 의해 수직 정렬이 조정됩니다. align-self 속성은 개별 플렉스 아이템의 수직 정렬을 재정의할 수 있도록 합니다. align-self: flex-start;를 사용하면 해당 요소가 컨테이너의 시작 부분에 고정되어, position:sticky;가 올바르게 동작할 수 있게 됩니다. 이는 sticky 요소가 수직 축의 시작 부분에 배치되어야 고정 위치를 유지할 수 있기 때문입니다.

 

align-self: flex-start; 는 flex 요소마다 서로 다른 align 속성값을 설정할 수 있습니다.

 

결론은. sticky 되는 영역에 align-self:flex-start; 를 추가해주면 됩니다.

 

참고사항

sticky 가 동작하려면 contents 영역 내용이 sticky 될 영역 보다 높이가 길어야합니다.

 

 

[CSS]display:flex 와 display:grid 속성과 설명

웹사이트 제작 시 기존에는 레이아웃을 잡을 때 CSS속성 중에 position, float으로 주로 사용했다면, 요즘 웹사이트는 flex와 grid를 주로 이용합니다. flex와 grid를 사용하는 이유는 float로 번거롭게 해

webmini.tistory.com

 

728x90