【发布时间】:2020-05-11 14:38:53
【问题描述】:
我正在尝试设计一个定制的手风琴,用这些花哨的红线连接父母和孩子(见图)。
我在这里使用 Grommet 组件,但总的来说,它的布局只是一堆 div(Box 标签)和一个可折叠的子面板组件(Collapsible 标签)。可以打开子面板并显示更多内容。
经过几次尝试,我连接父母和孩子的方法是用左边框包裹外框,然后使用顶部的白框移除底部的多余边框(堆栈标签第二个示例代码)。连接卡片和左边框的水平线只是放置在子选项卡旁边(在 SubMenuElement 组件内)的样式化 div。
我认为这是一个相当复杂的解决方案(也是因为我需要让白盒做出响应),但我想不出一个更简单的解决方案。 你对我如何改进或重新做红色连接有什么建议吗? 在此先感谢您的帮助! 请注意,我知道所有面板在点击时都使用相同的变量
<MenuButton
open={openMenu}
label="PARENT TAB-XYZ"
onClick={() => {
const newOpenMenu = !openMenu;
setOpenMenu(newOpenMenu);
setOpenSubmenu1(!newOpenMenu ? false : openSubmenu1);
}}
/>
<Collapsible open={openMenu}>
<Box background="antiquewhite" margin={{ left: 'small' }} border={{ side: 'left', size: '2px', color: 'red' }}>
{Tabs.map(el => {
return (
<SubMenuElement
key={el.title}
open={openSubmenu1}
label={el.title}
onClick={() => setOpenSubmenu1(!openSubmenu1)}
/>
);
})}
</Box>
</Collapsible>
<MenuButton
open={openMenu}
label="PARENT TAB-POU"
onClick={() => {
const newOpenMenu = !openMenu;
setOpenMenu(newOpenMenu);
setOpenSubmenu1(!newOpenMenu ? false : openSubmenu1);
}}
/>
<Collapsible open={openMenu}>
<Stack anchor="bottom-left">
<Box
background="antiquewhite"
margin={{ left: 'small' }}
border={{ side: 'left', size: '2px', color: 'red' }}
>
{Tabs.map(el => {
return (
<SubMenuElement
key={el.title}
open={openSubmenu1}
label={el.title}
onClick={() => setOpenSubmenu1(!openSubmenu1)}
/>
);
})}
</Box>
<Box background="white" height="39px" width="35px"></Box>
</Stack>
</Collapsible>
</Box>
);
【问题讨论】: