[CSS] scroll 영역의 크기를 100%로 만드는 방법

2021. 11. 19. 23:16·React/CSS&HTML
 

Bitfolio

 

bitfolio.me

 

React로 개발한 가상화폐 정보 사이트 (bitfolio.me)

 

위 사이트를 Non-scrollable 디자인으로 개발하면서 겪은 에로 사항이다.

스크롤을 사용하지 않기 위해 상단의 Header와 Contents 영역의 height %로 지정해주었고

화면의 세로길이와 관련 없이 항상 꽉 차는 화면을 만들고자하였다.

 

당연히 오른쪽에 보이는 채팅창의 화면도 height가 %로 지정되어야했다.

채팅창은 스크롤을 위해 'overflow-y : scroll' 속성이 지정 되어야하는데, 해당 속성은 길이가 %로 지정되면

overflow 발생 시 원하는 크기대로 동작하지 않는 문제가 존재했다.

 

이와 같이 height 100%가 예상한대로 동작하지 않고, 스크롤이 발생해버렸다.

height를 vh나 정확한 px 단위로 고정한 경우라면 예측한대로 동작한다.

하지만, 원하던 결과를 발견할 수 없었기에 검색을 거듭했다.

예상대로 overflow scroll 속성을 사용 시에는 해당 축의 길이가 %가 아닌 값으로 정확히 정해져있어야한다는 것이었고,

오랜 검색 끝에 이를 해결하는 방법을 찾았다.

 

overflow 속성을 가진 하위 컴포넌트의 position을 absolute로 설정하고 크기를 %로,

이를 감싸는 상위 컴포넌트의 position을 relative로 설정하고 크기를 %로 주면 원하는대로 동작한다.

코드는 다음과 같다.

 

const ChatContainer = styled.div`
  height: 100%;
  width: 100%;
  position: relative;
`;


const ChatScrollBox = styled.div`
  position: absolute;
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
  padding-right: 4px;
  color: black;
  overflow-y: auto;
  overflow-x: hidden;

  &::-webkit-scrollbar {
    width: 4px;
    border-radius: 25px;
    background: transparent;
  }
  &::-webkit-scrollbar-thumb {
    background-color: gray;
    border-radius: 4px;
  }
`;
<ChatContainer>
        {chatData.length !== 0 && (
          <ChatScrollBox id="chatContent" ChatHistory>
            {Object.values(chatData).map(
              (e, i) =>
               ... 메시지 박스 컴포넌트
            )}
          </ChatScrollBox>
        )}
      </ChatContainer>

 

저작자표시 비영리 변경금지 (새창열림)

'React > CSS&HTML' 카테고리의 다른 글

[HTML/CSS] 기초 문법  (0) 2022.04.16
[React] SASS 기초 문법  (0) 2021.08.29
'React/CSS&HTML' 카테고리의 다른 글
  • [HTML/CSS] 기초 문법
  • [React] SASS 기초 문법
박유상의 개발블로그
박유상의 개발블로그
개발블로그
  • 박유상의 개발블로그
    박유상의 개발블로그
    박유상의 개발블로그
  • 전체
    오늘
    어제
    • 전체 (134)
      • Who am I (10)
        • Portfolio (4)
        • Reminiscence (5)
        • Oversea (1)
        • SiliconValley (0)
      • React (36)
        • React Basic (15)
        • React Tech (5)
        • JavaScript (7)
        • TypeScript (3)
        • CSS&HTML (3)
        • Firebase (3)
      • NodeJS (1)
        • NodeJS Basic (1)
      • Flutter (55)
        • Flutter Widget Design (5)
        • Flutter Widget Basic (8)
        • Flutter Tech (18)
        • Flutter Issue (7)
        • Flutter Web (6)
        • About Flutter (2)
        • Firebase (1)
        • Dev Env (1)
        • Dart (7)
      • Programming (31)
        • Web (1)
        • General (0)
        • Algorithm (25)
        • Python (1)
        • VS Code (2)
      • Django (0)
  • 블로그 메뉴

    • Who I AM
    • React
    • NodeJS
    • Flutter
    • Programming
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DP
    TypeScript
    DART
    리액트
    react
    포트폴리오
    링고리
    탐욕법
    Flutter
    JavaScript
    Python
    useRef
    파이썬
    useState
    자바스크립트
    프로그래머스
    JSON
    flutter web
    CSS
    map
    useTranslation
    Redux
    Lingory
    플러터 웹
    웹
    플러터
    HTML
    github
    Firebase
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
박유상의 개발블로그
[CSS] scroll 영역의 크기를 100%로 만드는 방법
상단으로

티스토리툴바