Bắt đầu nhanh

FlexLayout chủ yếu đảm nhận việc chia tách màn hình theo một hướng.


Chia tách hàng cơ bản

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>


Chia tách cột + phát triển

Gán tỷ lệ cho một khu vực cụ thể trong chia tách dọc.

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>

Đa chiều chéo (lồng ghép)

Chia tách theo nhiều hướng hơn bằng cách chồng 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

Giới hạn phạm vi thay đổi kích thước + giới hạn theo kích thước nội dung

Bằng cách chỉ định kích thước tối thiểu/tối đa cho FlexLayoutContainer bằng CSS, bạn có thể điều chỉnh phạm vi thay đổi kích thước.

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])
Hoặc bạn có thể sử dụng như thế này.
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])
Kết quả thực thi như sau.
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>

Chế độ di chuyển panel (panelMovementMode)

Cách tương tác với các panel liền kề khi thay đổi kích thước

panelMovementModelà thuộc tính điều khiển cách di chuyển các panel liền kề khi thay đổi kích thước panel. Giá trị mặc định là ly hônvà bạn có thể sử dụng các chế độ dưới đây.

bulldozer

Đẩy các panel liền kề ra nhưng không dính vào nhau.

divorce (기본값)

Đẩy các panel liền kề ra và dính vào nhau, nhưng khi quay lại vị trí bắt đầu thay đổi kích thước, chúng sẽ lại tách ra.

stalker

Các panel liền kề hoàn toàn dính vào nhau nhưng sẽ tách ra khi đến cuối.

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>

Kiểm tra cuối cùng

isResizePanel

Panel resize sẽ được hiển thị như một anh em của container.

Ví dụ: Giữa Mid và Right, quyền sở hữu của panel resize thuộc về Mid, nhưng panel resize sẽ xử lý các anh em ở hai bên.

grow

"Xác định" tỷ lệ ban đầu của một container cụ thể.

Các container không chỉ định grow sẽ được phân phối đều phần còn lại ngoại trừ grow đã chỉ định.

isFitContent

Giới hạn không cho container được resize lớn hơn kích thước của các phần tử con bên trong.

panelMovementMode

Thiết lập cách tương tác với các panel liền kề khi resize panel.

"bulldozer": Đẩy panel liền kề ra nhưng không dính vào.

"divorce": Đẩy panel liền kề ra và dính vào nhưng sẽ tách ra khi quay lại (mặc định).

"stalker": Các panel liền kề hoàn toàn dính vào nhưng sẽ tách ra khi đến cuối.

© 2026 Byeolnaerim. Bảo lưu mọi quyền.Giới thiệuChính sách xử lý thông tin cá nhân