ความสูงแบบไดนามิก
ในเลย์เอาต์ที่อิงจากการเลื่อนหน้าต่าง จะซิงโครไนซ์ความสูงของ target กับความสูงของ viewport และเนื้อหา
บทบาท
FlexLayoutDynamicHeightถูกออกแบบมาสำหรับเนื้อหาที่มีความสูงไม่ถูกกำหนด เป้าหมายขององค์ประกอบคือ ความสูงและ ความสูงขั้นต่ำซิงโครไนซ์กับความสูงของเนื้อหาจริงและความสูงขั้นต่ำตามมาตรฐาน viewport ของ browser หน้าต่าง ช่วยให้ความสูงของการเลื่อนคำนวณได้อย่างมั่นคง
ซิงโครไนซ์ความสูงของ body
ในกรณีนี้ targetRefหากไม่ส่งมอบ จะใช้ bodyเป็น target
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>
);
}ซิงโครไนซ์ target เฉพาะ
targetRefหากส่งมอบ จะซิงโครไนซ์ความสูงของ element นั้น ไม่ใช่ parent สามารถใช้กับ element ที่ต้องการทำให้ความสูงของ scroll เสถียรในเนื้อหาความสูงแบบไดนามิกที่ไม่กำหนดความสูง (auto) เช่น shell, portal root, หรือเอกสารแยกต่างหากได้
"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>
);
}วิธีการวัด
ในระหว่างการวัด จะปล่อยความสูงของ target ชั่วคราว autoและ scrollHeight, คำนวณความสูงถัดไปโดยสะท้อนความสูงของ viewport, padding, border, และ bottom margin ของ child ตัวสุดท้ายความสูงและ ความสูงขั้นต่ำจะทำการวัดใหม่เมื่อมีการเปลี่ยนแปลง DOM, เปลี่ยนขนาด, เปลี่ยนขนาด/เลื่อน visualViewport, หรือโหลดฟอนต์เสร็จสิ้น
props
extraHeight
계산된 height에 추가로 더할 값입니다. 기본값은 0입니다.
extraHeightUnit
extraHeight의 단위입니다. px 또는 %를 사용할 수 있으며 기본값은 px입니다.
targetRef
height/minHeight를 동기화할 target element ref입니다. 생략하면 anchor의 parent element를 사용합니다.