ติดแน่น
ทำให้คอนเทนเนอร์ติดอยู่หรือจัดให้เฉพาะบางพื้นที่ติดตามในโครงสร้างที่ติดยาก.
ทำให้คอนเทนเนอร์ติดอยู่
เช่น header, toolbar FlexLayoutContainer หากต้องการให้ตัวเองติดอยู่ stickyModeสามารถใช้ได้ หากใช้จะมีสไตล์อินไลน์ที่เกี่ยวข้องกับ sticky ถูกนำไปใช้กับคอนเทนเนอร์และแผงปรับขนาด.
<FlexLayoutContainer
containerName="toolbar"
isResizePanel
stickyMode={{
position: "top",
offsetPx: 64,
stickyResizePanel: true,
}}
>
<Toolbar />
</FlexLayoutContainer>header ด้านบนของเว็บไซต์นี้ถูกสร้างขึ้นด้วยวิธีนี้ หากคอนเทนเนอร์ต้องการติดอยู่เองให้ใช้วิธีนี้.
คอนเทนเนอร์สำหรับ sticky ภายใน
FlexLayoutStickyBoxไม่ใช่คอมโพเนนต์ที่ทำให้คอนเทนเนอร์ติดอยู่ แต่จะใช้กับเนื้อหาภายในภายในขอบเขตของพ่อแม่เพื่อทำให้ดูเหมือน sticky ดังนั้นในบางกรณีอาจทำงานแตกต่างจากที่คาดหวัง โปรดตรวจสอบว่าตรงตามกรณีการใช้งานที่เหมาะสม. transformทำให้ดูเหมือน sticky ดังนั้นในบางกรณีอาจทำงานแตกต่างจากที่คาดหวัง โปรดตรวจสอบว่าตรงตามกรณีการใช้งานที่เหมาะสมหรือไม่
แถบด้านซ้ายของเว็บไซต์นี้ใช้ FlexLayoutStickyBox แถบด้านข้างจะสั้นกว่าหมายเหตุและอยู่ในตำแหน่งเดียวกัน FlexLayout ในฐานะที่เป็นพี่น้องกันในโครงสร้างนี้ CSS sticky ทั่วไปอาจไม่สามารถติดอยู่ในตำแหน่งที่คาดหวังได้.
<FlexLayout>
<FlexLayoutContainer containerName="sidebar">
<Sidebar />
</FlexLayoutContainer>
<FlexLayoutContainer containerName="content">
<Content />
</FlexLayoutContainer>
</FlexLayout>ในกรณีเช่นนี้ แทนที่จะเปลี่ยนโครงสร้าง HTML ทั้งหมดเพื่อให้ sticky ตรงตามที่ต้องการ คุณสามารถห่อหุ้มเฉพาะพื้นที่ที่ต้องติดตามภายในแถบด้านข้างได้. FlexLayoutStickyBox.
สิ่งที่ต้องใช้
FlexLayoutContainer stickyMode
header, toolbar처럼 컨테이너 자체가 고정되어야 할 때 사용합니다. resize panel도 함께 고정해야 한다면 stickyResizePanel을 true로 설정합니다.
FlexLayoutStickyBox
sidebar처럼 구조상 컨테이너 자체를 sticky로 만들기 어려울 때, 내부의 특정 박스만 따라오게 만들고 싶을 때 사용합니다.
ควบคุมสไตล์โดยตรง
หากตัวเลือก sticky ที่มีไม่เพียงพอ useDecompositionLayoutคุณสามารถนำเข้าคอนเทนเนอร์และใช้สไตล์โดยตรงได้.
const { layout: containers, container } = useDecompositionLayout({
layoutName: "root",
containerName: "toolbar",
});อย่างไรก็ตาม หากคุณแก้ไขเฉพาะคอนเทนเนอร์ อาจทำให้ตำแหน่งของแผงปรับขนาดไม่ตรงกัน หากต้องการให้แผงปรับขนาดเคลื่อนที่ตามเกณฑ์เดียวกัน คุณต้องปรับให้ตรงกับองค์ประกอบที่เกี่ยวข้องด้วย.
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 같은 스타일을 동기화해야 할 때 사용합니다.