Sticky

컨테이너를 sticky로 고정하거나, sticky가 붙기 어려운 구조에서 특정 영역만 따라오게 구성합니다.


컨테이너를 고정

header, toolbar처럼 FlexLayoutContainer 자체가 고정되어야 한다면 stickyMode를 사용할 수 있습니다. 사용시 해당 컨테이너와 resize panel에 sticky 관련 인라인 스타일이 적용 적용됩니다.

tsx
<FlexLayoutContainer
  containerName="toolbar"
  isResizePanel
  stickyMode={{
    position: "top",
    offsetPx: 64,
    stickyResizePanel: true,
  }}
>
  <Toolbar />
</FlexLayoutContainer>

현재 본 사이트의 상단 header는 이 방식으로 구성되어 있습니다. 컨테이너 자체가 sticky 되어야 한다면 이 방식을 적용하십시오.

What to use

FlexLayoutContainer stickyMode

header, toolbar처럼 컨테이너 자체가 고정되어야 할 때 사용합니다. resize panel도 함께 고정해야 한다면 stickyResizePanel을 true로 설정합니다.

FlexLayoutStickyBox

sidebar처럼 구조상 컨테이너 자체를 sticky로 만들기 어려울 때, 내부의 특정 박스만 따라오게 만들고 싶을 때 사용합니다.

직접 스타일 제어

제공되는 sticky 옵션으로 부족하다면 useDecompositionLayout로 컨테이너를 가져와 직접 스타일을 적용할 수 있습니다.

tsx
const { layout: containers, container } = useDecompositionLayout({
  layoutName: "root",
  containerName: "toolbar",
});

단, container만 직접 수정하면 resize panel과 위치가 어긋날 수 있습니다. resize panel까지 같은 기준으로 움직여야 한다면 관련 element도 함께 맞춰야 합니다.

tsx
import { useLayoutEffect } from "react";
import { useDecompositionLayout } from "@byeolnaerim/flex-layout";

function CustomStickyToolbar() {
  const { container } = useDecompositionLayout({
    layoutName: "root",
    containerName: "toolbar",
  });

  useLayoutEffect(() => {
    if (!container) return;

    const previousPosition = container.style.position;
    const previousTop = container.style.top;
    const previousZIndex = container.style.zIndex;

    container.style.position = "sticky";
    container.style.top = "64px";
    container.style.zIndex = "20";

    return () => {
      container.style.position = previousPosition;
      container.style.top = previousTop;
      container.style.zIndex = previousZIndex;
    };
  }, [container]);

  return <Toolbar />;
}

FlexLayoutStickyBox 옵션

edge

auto, top, bottom, left, right 중 하나입니다. auto는 스크롤 방향에 따라 top 또는 left로 판단합니다.

offset

화면 모서리와의 여백(px)입니다. sticky header가 있다면 header 높이만큼 더 잡아 겹치지 않게 합니다.

scrollRoot

관찰할 scroll root입니다. 생략하면 viewport/window 기준으로 동작합니다.

onTranslateChange

translate 값이 바뀔 때 호출됩니다. 이동 상태에 맞춰 shadow, border 같은 스타일을 동기화해야 할 때 사용합니다.

© 2026 Byeolnaerim. All rights reserved.소개개인정보처리방침