본문 바로가기
Front-end/CSS

상하 스크롤 하단 뿌옇게 처리하기

by mooyou 2024. 1. 2.
728x90
300x250

 

하단이 뿌옇게 처리된 상하 스크롤

<!DOCTYPE html>
<html lang="ko">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 0;
      height: 100vh; /* body 높이를 전체 뷰포트 높이로 설정 */
      overflow: hidden; /* 복수의 스크롤바가 나타나지 않도록 body의 오버플로우 감춤 */
    }

    #scrollable-list {
      height: calc(100% - 50px); /* bottom-blur의 높이를 뺀 부분으로 scrollable-list의 높이 설정 */
      overflow-y: auto;
      border-bottom: 10px solid rgba(0, 0, 0, 0.1);
      position: relative;
    }

    .list-item {
      padding: 10px;
      border-bottom: 1px solid rgba(0, 0, 0, 0.1);
      cursor: pointer;
    }

    .list-item a {
      text-decoration: none;
      color: inherit;
    }

    #scrollable-list::after {
      content: "";
      position: absolute;
      bottom: 0;
      left: 0;
      width: 100%;
      height: 50px;
      background: linear-gradient(to top, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));
      z-index: 1;
    }
  </style>
</head>

<body>

<div id="scrollable-list">
  <div class="list-item"><a href="#">리스트 아이템 1</a></div>
  <div class="list-item"><a href="#">리스트 아이템 2</a></div>
  <div class="list-item"><a href="#">리스트 아이템 3</a></div>
  <div class="list-item"><a href="#">리스트 아이템 4</a></div>
  <div class="list-item"><a href="#">리스트 아이템 5</a></div>
  <div class="list-item"><a href="#">리스트 아이템 6</a></div>
  <div class="list-item"><a href="#">리스트 아이템 7</a></div>
</div>

</body>

</html>

 

#scrollable-list::after 가상 요소를 사용해서 하단 뿌옇게 처리된 배경을 만들었다.

그런데 여기서 문제는 맨마지막 리스트가 가상 요소 영역에 가려서 클릭이 안된다는 것이다.

 

<!DOCTYPE html>
<html lang="ko">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    body {
      font-family: Arial, sans-serif;
      margin: 0;
      padding: 0;
      height: 100vh; /* body 높이를 전체 뷰포트 높이로 설정 */
      overflow: hidden; /* 복수의 스크롤바가 나타나지 않도록 body의 오버플로우 감춤 */
    }

    #scrollable-list {
      height: calc(100% - 50px); /* bottom-blur의 높이를 뺀 부분으로 scrollable-list의 높이 설정 */
      overflow-y: auto;
      border-bottom: 10px solid rgba(0, 0, 0, 0.1);
      position: relative;
    }

    .list-item {
      padding: 10px;
      border-bottom: 1px solid rgba(0, 0, 0, 0.1);
      cursor: pointer;
    }

    .list-item a {
      text-decoration: none;
      color: inherit;
    }

    #scrollable-list::after {
      content: "";
      position: absolute;
      bottom: 0;
      left: 0;
      width: 100%;
      height: 50px;
      background: linear-gradient(to top, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));
      z-index: 1;
      pointer-events: none; /* 마우스 이벤트를 가로막지 않도록 함 */
    }
  </style>
</head>

<body>

<div id="scrollable-list">
  <div class="list-item"><a href="#">리스트 아이템 1</a></div>
  <div class="list-item"><a href="#">리스트 아이템 2</a></div>
  <div class="list-item"><a href="#">리스트 아이템 3</a></div>
  <div class="list-item"><a href="#">리스트 아이템 4</a></div>
  <div class="list-item"><a href="#">리스트 아이템 5</a></div>
  <div class="list-item"><a href="#">리스트 아이템 6</a></div>
  <div class="list-item"><a href="#">리스트 아이템 7</a></div>
</div>

</body>

</html>

 

pointer-events: none; 해당 요소에 마우스 이벤트를 비활성화하는 스타일을 가상요소에 적용하면 해당 가상 요소 위에서 마우스 이벤트가 발생하지 않아 마우스 클릭 등의 이벤트가 아래의 실제 리스트 아이템에 전달될 수 있게 된다.

pointer-events: none; 이벤트를 적용하지 않으면 해당 가상 요소가 마우스 이벤트를 캡처해서 실제 리스트 아이템을 가리게 된다. 그러나 pointer-events: none;를 적용하면 가상 요소는 마우스 이벤트를 캡처하지 않게 되고 실제 리스트 아이템에 마우스 클릭 등의 이벤트가 전달될수 있게 된다.

728x90
반응형

댓글