بدء سريع

يتولى FlexLayout بشكل أساسي تقسيم الشاشة في اتجاه واحد.


تقسيم الصف الأساسي

tsx
<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>


تقسيم العمود + النمو

تخصيص نسبة معينة لمنطقة معينة في التقسيم العمودي مسبقًا

tsx

  <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

tsx

  <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 للتحكم في نطاق إعادة الحجم.

tsx
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])
أو يمكنك استخدامه بهذه الطريقة.
tsx
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])
نتيجة التنفيذ كما يلي.
tsx
<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

تلتصق اللوحات المجاورة تمامًا ولكن عند الوصول إلى النهاية، تنفصل مرة أخرى.

tsx
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": تلتصق اللوحات المجاورة تمامًا ولكن تنفصل عند الوصول إلى النهاية.

© 2026 بيولناريم. جميع الحقوق محفوظة.مقدمةسياسة معالجة المعلومات الشخصية