動態高度

在基於窗口滾動的佈局中,將目標的高度與視口和內容高度同步。


角色

FlexLayoutDynamicHeight是為了未指定高度的動態內容而設計的。目標元素的 高度和 最小高度將實際內容高度與視口基準的最小高度同步,幫助穩定計算瀏覽器的 視窗 滾動高度。

主體高度同步

在這個案例中, targetRef如果不傳遞,則錨點的父元素將是 主體目標。

tsx
import {
  FlexLayout,
  FlexLayoutContainer,
  FlexLayoutDynamicHeight,
} from "@byeolnaerim/flex-layout";

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="ko">
      <body>
        <FlexLayoutDynamicHeight />

        <FlexLayout
          direction="column"
          layoutName="root"
          scrollMode="window"
        >
          <FlexLayoutContainer containerName="head">
            <Header />
          </FlexLayoutContainer>

          <FlexLayoutContainer containerName="body">
            {children}
          </FlexLayoutContainer>
        </FlexLayout>
      </body>
    </html>
  );
}

特定目標同步

targetRef如果傳遞,則將同步該元素的高度,而非父元素的高度。可以用於使用 window scroll 的 shell、portal root、以及高度未指定(自動)的動態高度內容中,以穩定滾動高度的元素。

tsx
"use client";

import { FlexLayoutDynamicHeight } from "@byeolnaerim/flex-layout";
import { useRef } from "react";

export default function DocumentShell({ children }: { children: React.ReactNode }) {
  const shellRef = useRef<HTMLDivElement | null>(null);

  return (
    <div ref={shellRef}>
      <FlexLayoutDynamicHeight targetRef={shellRef} />
      {children}
    </div>
  );
}

測量方式

測量時暫時釋放目標的高度, 自動並計算下一個 scrollHeight, 反映視口高度、內邊距、邊框及最後子元素的底部邊距。當 DOM 變更、調整大小、視覺視口調整/滾動、字體加載完成時,將重新測量。高度和 最小高度計算中。當 DOM 更改、調整大小、視覺視口調整大小/滾動、字型加載完成時會重新測量。

屬性

extraHeight

계산된 height에 추가로 더할 값입니다. 기본값은 0입니다.

extraHeightUnit

extraHeight의 단위입니다. px 또는 %를 사용할 수 있으며 기본값은 px입니다.

targetRef

height/minHeight를 동기화할 target element ref입니다. 생략하면 anchor의 parent element를 사용합니다.

© 2026 Byeolnaerim. 版權所有。介紹隱私政策