[英]How to make Flexbox work with children when using horizontal MUI Collapse Component and TransitionGroup transitions?
我正在使用 MUI,並且很難使用 Collapse + TransitionGroup 組件並使用彈性框來擴展容器。
<Box sx={{display: 'flex', height: '100vh', width: '100vw'}}>
<Box sx={{flex: 1}}>Content-A</Box>
<Box sx={{flex: 1}}>Content-B</Box>
</Box>
這是我想要的一個簡單示例。 兩個盒子彼此相鄰,將整個頁面分成左右兩邊。 但是,當您引入 Collapse 組件時,它會中斷:
<TransitionGroup sx={{display: 'flex', height: '100vh', width: '100vw}}>
<Collapse orientation='horizontal'>
<Box sx={{flex: 1}}>Content-A</Box>
</Collapse>
<Collapse orientation='horizontal'>
<Box sx={{flex: 1}}>Content-B</Box>
</Collapse>
</TransitionGroup>
Collapse 組件現在直接干擾 Flexbox 父子關系。 如果我查看 DOM,我注意到 Collapse 組件在子組件周圍插入了 3 個包裝器(根、外部、內部包裝)。 如何將 flexbox 屬性傳遞給原始子項?
我嘗試覆蓋主題中每個包裝組件的樣式並給它們display: flex, flex: 1
以強制它一直沿着鏈向下傳遞到子級,但這會破壞過渡,並且看起來非常不穩定。
編輯:澄清:我需要過渡組,因為我希望發生特定的過渡。 基本上我的頁面分為左(A)和右(B)。 在一個事件中,我希望 (A) 轉換出屏幕(向左,因此是水平的)。 (B) 應該過渡到 (A) 所在的位置,並且一個新元素 (C) 從右側進入並過渡到 (B) 所在的位置。 想象一下它就像一個滑動隊列。 然后沖洗並重復(B out -> C 轉到 B 所在的位置 -> D 過渡到 C 所在的位置)。 問題是使用 Collapse Horizontal 它不會彎曲剩余空間。
它有點不清楚你實際上想要實現什么。
通常使用<TransistionGroup />
<Collapse/>
的in
屬性。 例如,在列表中添加一堆項目時。
如果您只想渲染 2 列,則不需要<TransistionGroup />
。
您可以手動傳遞in
。
您可以將樣式傳遞給折疊包裝器並設置您需要的任何 css。 IE:
<Collapse
in={isOn}
orientation="horizontal"
style={{ flex: "1", display: "inline-block" }}
>
看看這個代碼沙箱
它有兩個例子:
我認為第 1 版是您真正想要的:
const Example1 = () => {
const [isOn, setIsOn] = React.useState(false);
const toggle = () => {
setIsOn((prev) => !prev);
};
return (
<>
<Button variant="contained" onClick={toggle}>
{isOn ? "collapse" : "expand"}
</Button>
<Box display="flex">
<Collapse
in={isOn}
orientation="horizontal"
style={{ flex: "1", display: "inline-block" }}
>
<Box>Content-A</Box>
</Collapse>
<Collapse
in={isOn}
orientation="horizontal"
style={{ flex: "1", display: "inline-block" }}
>
<Box>Content-B</Box>
</Collapse>
</Box>
</>
);
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.