Mulai Cepat
FlexLayout pada dasarnya menangani layar terpisah dalam satu arah.
Pemisahan Baris Dasar
<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>Pemisahan Kolom + tumbuh
Memberikan rasio area tertentu sebelumnya dalam pemisahan vertikal
<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>
Multi Cross (Tumpang Tindih)
Pemisahan lebih dari dua arah dibuat dengan menumpuk 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
Batasan rentang ukuran ulang + batasan berdasarkan ukuran konten
Dengan menggunakan CSS pada FlexLayoutContainer, Anda dapat mengatur ukuran minimum/maksimum untuk mengontrol rentang ukuran ulang.
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])Atau Anda dapat menggunakan ini.
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])Hasil eksekusi adalah sebagai berikut.
<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>
Mode pemindahan panel (panelMovementMode)
Cara interaksi panel yang berdekatan saat diubah ukurannya
panelMovementModeadalah properti yang mengontrol bagaimana panel bergerak saat diubah ukurannya. Nilai defaultnya adalah divorcedan Anda dapat menggunakan mode di bawah ini.
bulldozer
Mendorong panel yang berdekatan tetapi tidak saling menempel.
divorce (기본값)
Mendorong panel yang berdekatan dan saling menempel, tetapi akan terpisah kembali saat kembali ke posisi awal saat mengubah ukuran.
stalker
Panel yang berdekatan saling menempel sepenuhnya tetapi akan terpisah kembali saat mencapai ujung.
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>Pemeriksaan Terakhir
isResizePanel
Panel resize akan dirender sebagai saudara dari kontainer.
Contoh: Di antara Mid dan Right, kepemilikan panel resize ada di Mid, tetapi panel resize menangani saudara di kedua sisi.
grow
"Tentukan" rasio awal dari kontainer tertentu.
Kontainer yang tidak ditentukan grow akan mendapatkan distribusi yang merata dari sisanya kecuali yang ditentukan.
isFitContent
Batasi agar kontainer tidak di-resize lebih besar dari ukuran elemen anak di dalamnya.
panelMovementMode
Atur cara interaksi saat panel di-resize dengan panel yang berdekatan.
"bulldozer": Mendorong panel yang berdekatan tetapi tidak menempel.
"divorce": Mendorong panel yang berdekatan dan menempel tetapi terpisah saat kembali (default).
"stalker": Panel yang berdekatan sepenuhnya menempel tetapi terpisah saat mencapai ujung.