بدء سريع
يتولى 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
تحديد نطاق إعادة الحجم + قيود بناءً على حجم المحتوى
يمكنك ضبط الحد الأدنى/الحد الأقصى للحجم باستخدام CSS في FlexLayoutContainer للتحكم في نطاق إعادة الحجم.
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
سيتم عرض لوحة إعادة الحجم كأخت للحاوية.
مثال: بين Mid و Right، ملكية لوحة إعادة الحجم تعود لـ Mid، لكن لوحة إعادة الحجم تتعامل مع الأخوات على الجانبين.
grow
"حدد" النسبة الأولية لحاوية معينة.
ستوزع الحاويات غير المحددة للنمو بالتساوي ما عدا النمو المحدد.
isFitContent
يتم تقييد الحاوية بحيث لا تعيد حجمها أكبر من حجم العناصر الداخلية.
panelMovementMode
حدد كيفية تفاعل اللوحات المجاورة عند إعادة حجم اللوحة.
"bulldozer": تدفع اللوحة المجاورة ولكن لا تلتصق بها.
"divorce": تدفع اللوحة المجاورة وتلتصق بها، ولكن عند العودة تنفصل (الإعداد الافتراضي)
"stalker": تلتصق اللوحات المجاورة تمامًا ولكن تنفصل عند الوصول إلى النهاية.