#7 CSS Sticky 속성으로 사이드바 내부 일부 영역 화면에 고정 하기
Lucy Archive
Lucy / Facilitate4U
2020. 11. 26. 15:33

Sidebar CSS Sticky 포지션으로 상단 고정

현재 제작 중인 스킨은 상단의 Navigation 메뉴바와 왼쪽 사이드바 일부 영역은 CSS Sticky 속성을 사용하여 화면에 고정하도록 구상을 하였습니다. 이번 포스트는

Sticky 포지션을 이용하여 사이드바를 화면에 고정하는 방법

을 소개합니다.

레이아웃 구성

PC 화면에 적합하다고 생각하는 3단 레이아웃을 구상하였습니다. 아래 그림에서 배경색을 표시한 상단 메뉴바와, 왼쪽 사이바 부분의 일부 영역은 스크롤을 내리면 화면에 고정하도록 구상을 하였습니다. 

3단 레이아웃의 Sticky 영역

Sticky Position 사용 방법 및 주의 사항

사용방법

스크롤에 따라 화면에 고정되는 Sticky 속성은 아래 코드와 같이 Position 속성과 top, bottom, left, right와 같은 위치 속성 두 가지가 입력되어야 합니다. 

.sticky-box{
    position: sticky;
    top: 0px;
}

주의 사항

  • 부모 요소 안에서만 sticky 적용
  • 부모 요쇼중에 overflow:auto, overflow:hidden, overflow:scroll 속성이 적용 되어 있는 경우 sticky 사용 불가
  • IE 지원 하지 않음

 

Sticky 속성 적용하기

사이드바 일부 영역 Sticky 적용

위의 레이아웃 구조를 만든 후에 Sticky로 동작할 div 요소만 position: sticky; 속성과 top:0px 속성을 지정하면 편리하게 스크롤에 따라 고정되는 사이드바를 만들 수 있습니다. 

<!DOCTYPE html>
<html>
<head>
    <title>Document</title>
    <style>
        header,
        nav,
        div,
        aside,
        section,
        footer{
            border:solid 1px black;
            margin:5px;
            font-size:24px;
            text-align: center;
        }
        nav{
            background-color:yellow;
        }
        main{
            display:flex;
        }
        aside,
        section{
            flex-grow: 1;
            height:1200px;
        }
        .notSticky_box{
            height:400px;
        }
        .sticky_box{
            position:sticky;
            top:0px;
            height:500px;
            background-color: chartreuse;
        }
        footer{
            height:300px;
            background-color:black;
        }
    </style>
</head>
<body>
    <header>Header</header>    
    <nav>Nav</nav>
    <div class="topAdd">Ads</div>
    <div class="title">Title</div>
    <main>
        <aside>Sidebar Left
            <div class="notSticky_box">General Div Box</div>
            <div class="sticky_box">Position Sticky Box</div>
        </aside>
        <section>Section</section>
        <aside>Sidebar Right</aside>
    </main>
    <footer>footer</footer>
</body>
</html>

사이드바 Sticky 적용

상단 메뉴바와 사이드바 Sticky 동시 적용

상단 메뉴바와 사이드바 일부 영역을 동시에 Sticky 속성을 부여하기 위해 <Style> 태그 내의 nav 선택자와 .sticky_box 선택자의 코드를 수정합니다.

nav{
    position:sticky;
    top:0px;
    background-color:yellow;
}

.sticky_box{
    position:sticky;
    top:36px; /* nav의 높이 */
    height:500px;
    background-color: chartreuse;
}

위의 코드를 실행하면 아래와 같이 잘 되는 듯 보이나 우측 그림처럼 스크롤이 하단으로 내려가면 사이드바의 Sticky 여력이 Nav 위로 올라가는 문제가 있습니다. 

코드 실행 결과

HTML 요소가 겹치는 경우 화면으로 보이는 앞뒤 우선순위를 결정하는 것은 CSS z-index 속성입니다. 위 코드에서 z-dinex 속성을 추가하여 최종적으로 코드를 수정하면 원하는 결과의 레이아웃을 만들 수 있습니다. 최종 코드는 아래와 같습니다.

  • z-index 속성 : 요소의 z 축 위치를 결정
    • 숫자가 클수록 화면 앞으로 위치
    • z-index 속성 지정하지 않은 경우 '0'으로 인식
<!DOCTYPE html>
<html>
<head>
    <title>Document</title>
    <style>
        header,
        nav,
        div,
        aside,
        section,
        footer{
            border:solid 1px black;
            margin:5px;
            font-size:24px;
            text-align: center;
        }
        nav{
            position:sticky;
            top:0px;
            background-color:yellow;
            z-index: 10;
        }
        main{
            display:flex;
        }
        aside,
        section{
            flex-grow: 1;
            height:1200px;
        }
        .notSticky_box{
            height:400px;
        }
        .sticky_box{
            position:sticky;
            top:36px;
            height:500px;
            background-color: chartreuse;
            z-index:1;
        }
        footer{
            height:300px;
            background-color:black;
            color:white;
        }
    </style>
</head>
<body>
    <header>Header</header>    
    <nav>Nav</nav>
    <div class="topAdd">Ads</div>
    <div class="title">Title</div>
    <main>
        <aside>Sidebar Left
            <div class="notSticky_box">General Div Box</div>
            <div class="sticky_box">Position Sticky Box</div>
        </aside>
        <section>Section</section>
        <aside>Sidebar Right</aside>
    </main>
    <footer>footer</footer>
</body>
</html>

z-index 속성 추가


마무리

이번 포스트는 CSS Sticky 속성을 사용하여 사이드바를 상단 고정하는 방법에 대해 설명하였습니다. 추가적으로 상단 메뉴바와 함께 Sticky 속성을 사용하고, z-index를 사용하여 z 축 우선순위를 결정하는 법도 함께 알아보았습니다.

관련포스트

👉 HTML,CSS,Javacript 관련글 보기

👉 티스토리 스킨 제작 관련글 보기