Schnellstart
FlexLayout ist grundsätzlich für die Aufteilung des Bildschirms in eine Richtung zuständig.
Basiszeilenaufteilung
<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>Spaltenaufteilung + wachsen
Vordefinierte Flächenverhältnisse in vertikalen Aufteilungen
<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 (Verschachtelung)
Aufteilungen in mehr als zwei Richtungen werden durch Überlappen von FlexLayout erstellt.
<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
Resize-Bereichsbeschränkung + Inhaltsgrößenbeschränkung
Durch die Angabe von minimalen/maximalen Größen in FlexLayoutContainer mit CSS können Sie den Resize-Bereich steuern.
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])Oder so kann es verwendet werden.
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])Das Ergebnis ist wie folgt.
<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>
Panelbewegungsmodus (panelMovementMode)
Interaktionsweise mit benachbarten Panels beim Resize
panelMovementModeist eine Eigenschaft, die steuert, wie benachbarte Panels beim Resize bewegt werden. Der Standardwert ist divorceund die folgenden Modi können verwendet werden.
bulldozer
drückt benachbarte Panels weg, aber sie haften nicht zusammen.
divorce (기본값)
drückt benachbarte Panels weg und sie haften zusammen, aber wenn sie zur ursprünglichen Resize-Position zurückkehren, werden sie wieder getrennt.
stalker
benachbarte Panels haften vollständig zusammen, trennen sich jedoch, wenn das Ende erreicht ist.
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>Letzte Überprüfung
isResizePanel
Das Resize-Panel wird als Geschwister des Containers gerendert.
Beispiel: Zwischen Mid und Right, das Resize-Panel gehört zu Mid, aber das Resize-Panel verwaltet die Geschwister auf beiden Seiten.
grow
Gibt das anfängliche Verhältnis eines bestimmten Containers an.
Container ohne grow werden gleichmäßig verteilt, abgesehen von dem angegebenen grow.
isFitContent
Begrenzt die Größe des Containers, damit er nicht größer als die Größe der inneren Kind-Elemente wird.
panelMovementMode
Legt fest, wie das Resize-Panel mit angrenzenden Panels interagiert.
"bulldozer": Schiebt angrenzende Panels weg, bleibt aber nicht haften.
"divorce": Schiebt angrenzende Panels weg und bleibt haften, trennt sich jedoch, wenn es zurückkommt (Standardwert).
"stalker": Bleibt vollständig an angrenzenden Panels haften, trennt sich jedoch, wenn das Ende erreicht ist.