Inicio Rápido
FlexLayout se encarga principalmente de la pantalla dividida en una dirección.
División de fila básica
<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>División de columna + crecer
Asignar previamente una proporción de área específica en la división vertical
<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-cruz (anidado)
La división en más de una dirección se crea superponiendo 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
Límite de rango de redimensionamiento + límite basado en el tamaño del contenido
Al especificar el tamaño mínimo/máximo en FlexLayoutContainer con CSS, puede controlar el rango de redimensionamiento.
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])O puede usarlo de esta manera.
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])El resultado de la ejecución es el siguiente.
<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>
Modo de movimiento del panel (panelMovementMode)
Forma en que interactúan los paneles adyacentes al redimensionar
panelMovementModees una propiedad que controla cómo se mueven los paneles adyacentes al redimensionar un panel. El valor predeterminado es divorcioy se pueden usar los siguientes modos.
bulldozer
Empuja los paneles adyacentes pero no se adhieren entre sí.
divorce (기본값)
Empuja los paneles adyacentes y se adhieren entre sí, pero se separan al volver a la posición donde comenzó el redimensionamiento.
stalker
Los paneles adyacentes se adhieren completamente, pero se separan al llegar al final.
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>Última verificación
isResizePanel
El panel de redimensionamiento se renderiza como un hermano del contenedor.
Ej: Entre Mid y Right, la propiedad del panel de redimensionamiento es de Mid, pero el panel de redimensionamiento maneja a sus hermanos a ambos lados.
grow
"Especifica" la proporción inicial de un contenedor específico.
Los contenedores sin grow se distribuyen uniformemente, excluyendo el grow especificado.
isFitContent
Limita el redimensionamiento del contenedor para que no sea mayor que el tamaño de los elementos hijos internos.
panelMovementMode
Configura cómo interactúa el panel al redimensionarse con los paneles adyacentes.
"bulldozer": Empuja los paneles adyacentes pero no se adhieren.
"divorce": Empuja los paneles adyacentes y se adhieren, pero se separan al volver (valor predeterminado).
"stalker": Se adhieren completamente entre paneles adyacentes, pero se separan al llegar al final.