เริ่มต้นอย่างรวดเร็ว
FlexLayout จัดการหน้าจอแบ่งในทิศทางเดียวเป็นหลัก.
การแบ่งแถวพื้นฐาน
<FlexLayout layoutName="basic-row_1" direction="row">
<FlexLayoutContainer containerName="basic-row_1-left" isResizePanel>
<div>Left</div>
</FlexLayoutContainer>
<FlexLayoutContainer containerName="basic-row_1-mid" isResizePanel>
<div>Mid</div>
</FlexLayoutContainer>
<FlexLayoutContainer containerName="basic-row_1-right">
<div>Right</div>
</FlexLayoutContainer>
</FlexLayout>การแบ่งคอลัมน์ + การเติบโต
กำหนดอัตราส่วนเฉพาะในพื้นที่แนวตั้งล่วงหน้า
<FlexLayout layoutName="basic-column_3" direction="column">
<FlexLayoutContainer containerName="basic-column_3-top" isResizePanel grow={0.45}>
<div>Left</div>
</FlexLayoutContainer>
<FlexLayoutContainer containerName="basic-column_3-mid">
<div>Mid</div>
</FlexLayoutContainer>
<FlexLayoutContainer containerName="basic-column_3-right">
<div>Right</div>
</FlexLayoutContainer>
</FlexLayout>
มัลติครอส (ซ้อนกัน)
การแบ่งมากกว่าหนึ่งทิศทางสร้าง FlexLayout ซ้อนกัน.
<FlexLayout layoutName="basic-row_4" direction="row">
<FlexLayoutContainer containerName="basic-row_4-left" isResizePanel>
<div>
<FlexLayout layoutName="basic-row_4-basic-column-left" direction="column">
<FlexLayoutContainer containerName="basic-row_4-left-top" isResizePanel>
<div>left-top</div>
</FlexLayoutContainer>
<FlexLayoutContainer containerName="basic-row_4-left-bottom">
<div>left-bottom</div>
</FlexLayoutContainer>
</FlexLayout>
</div>
</FlexLayoutContainer>
<FlexLayoutContainer containerName="basic-row_4-right">
<div >
<FlexLayout layoutName="basic-row_4-basic-column-right" direction="column">
<FlexLayoutContainer containerName="basic-row_4-right-top" isResizePanel>
<div>right-top</div>
</FlexLayoutContainer>
<FlexLayoutContainer containerName="basic-row_4-right-bottom">
<div>right-bottom</div>
</FlexLayoutContainer>
</FlexLayout>
</div>
</FlexLayoutContainer>
</FlexLayout>
min/max + isFitContent
การจำกัดขอบเขตการปรับขนาด + การจำกัดตามขนาดของเนื้อหา
สามารถกำหนดขนาดขั้นต่ำ/สูงสุดใน FlexLayoutContainer โดยใช้ css เพื่อควบคุมขอบเขตการปรับขนาดได้
const [handleSizeTarget, setHandleSizeTarget] = useState<HTMLElement|null>(null);
useEffect(()=>{
const layoutSubscribe = getLayoutInfos('basic-row_7').subscribe((layout)=>{
const leftContainer = layout.container?.['basic-row_7-left']?.current;
if(leftContainer){
setHandleSizeTarget(leftContainer);
}
});
return ()=>{
layoutSubscribe.unsubscribe();
}
},[])
useEffect(()=>{
if(!handleSizeTarget) return;
handleSizeTarget.style.minWidth = '25px';
handleSizeTarget.style.maxWidth = '180px';
},[handleSizeTarget])หรือสามารถใช้แบบนี้ได้
const { layout: containers, container, resizePanel } = useDecompositionLayout({
layoutName: 'basic-row_7',
containerName: 'basic-row_7-left',
});
useEffect(()=>{
if(!container) return;
container.style.minWidth = '25px';
container.style.maxWidth = '180px';
},[container])ผลลัพธ์การทำงานมีดังนี้
<FlexLayout layoutName="basic-row_7" direction="row">
<FlexLayoutContainer containerName="basic-row_7-left" isResizePanel>
<div>Left</div>
</FlexLayoutContainer>
<FlexLayoutContainer containerName="basic-row_7-mid" isResizePanel>
<div>Mid</div>
</FlexLayoutContainer>
<FlexLayoutContainer
containerName="basic-row_7-right"
isFitContent
>
<div
style={{
whiteSpace: "nowrap",
textWrapMode: "nowrap",
paddingRight:'1rem'
}}
>
I'm Using Fit Content{" "}
</div>
</FlexLayoutContainer>
</FlexLayout>
โหมดการเคลื่อนย้ายแผง (panelMovementMode)
วิธีการโต้ตอบกับแผงที่อยู่ติดกันเมื่อปรับขนาด
panelMovementModeเป็นคุณสมบัติที่ควบคุมว่าเมื่อปรับขนาดแผงจะเคลื่อนที่แผงที่อยู่ติดกันอย่างไร ค่าพื้นฐานคือ divorceและสามารถใช้โหมดด้านล่างได้
bulldozer
ผลักแผงที่อยู่ติดกันออกไป แต่ไม่ติดกัน
divorce (기본값)
ผลักแผงที่อยู่ติดกันออกไปและติดกัน แต่เมื่อกลับไปยังตำแหน่งที่เริ่มปรับขนาดจะถูกแยกออกอีกครั้ง
stalker
ติดกันอย่างสมบูรณ์ระหว่างแผงที่อยู่ติดกัน แต่เมื่อถึงจุดสิ้นสุดจะถูกแยกออกอีกครั้ง
const [mode, setMode] = useState<"bulldozer" | "divorce" | "stalker">("bulldozer");
<ButtonGroup variant="outlined" size="small">
{["bulldozer", "divorce", "stalker"].map((m) => (
<Button
key={m}
onClick={() => setMode(m)}
variant={mode === m ? "contained" : "outlined"}
>
{m}
</Button>
))}
</ButtonGroup>
<Box
sx={{
height: "100%",
"& [data-container_name]": {
minHeight: "2rem",
},
}}
>
<FlexLayout
layoutName={`panel-movement-demo-${mode}`}
direction="column"
panelMovementMode={mode}
>
<FlexLayoutContainer containerName="panel-top" isResizePanel>
<div>Top</div>
</FlexLayoutContainer>
<FlexLayoutContainer containerName="panel-mid1" isResizePanel>
<div>Mid 1</div>
</FlexLayoutContainer>
<FlexLayoutContainer containerName="panel-mid2" isResizePanel>
<div>Mid 2</div>
</FlexLayoutContainer>
<FlexLayoutContainer containerName="panel-bottom">
<div>Bottom</div>
</FlexLayoutContainer>
</FlexLayout>
</Box>การตรวจสอบครั้งสุดท้าย
isResizePanel
resize panel จะถูกเรนเดอร์เป็นพี่น้องของคอนเทนเนอร์
เช่น: ระหว่าง Mid และ Right, สิทธิ์การเป็นเจ้าของ resize panel อยู่ที่ Mid แต่ resize panel จะจัดการพี่น้องทั้งสองข้าง
grow
"ระบุ" อัตราส่วนเริ่มต้นของคอนเทนเนอร์เฉพาะ
คอนเทนเนอร์ที่ไม่ได้ระบุ grow จะได้รับการแจกจ่ายอย่างเท่าเทียมกัน ยกเว้น grow ที่ระบุไว้
isFitContent
จำกัดไม่ให้คอนเทนเนอร์ขยายใหญ่กว่าขนาดขององค์ประกอบลูกภายใน
panelMovementMode
ตั้งค่าวิธีการโต้ตอบระหว่างแผงเมื่อปรับขนาด
"bulldozer": ผลักแผงที่อยู่ติดกันออกไปแต่ไม่ติดกัน
"divorce": ผลักแผงที่อยู่ติดกันออกไปและติดกัน แต่เมื่อกลับมาจะแยกออก (ค่าเริ่มต้น)
"stalker": แผงที่อยู่ติดกันจะติดกันอย่างสมบูรณ์ แต่เมื่อถึงจุดสิ้นสุดจะถูกแยกออก