Closed youluna closed 5 years ago
菜单的模式有三种,其中一种为类似于Ice Pro 针对简单后台的配置
@lidahuiSoftWare 这种应该是通过如下代码实现的,纵向菜单占据左侧Global Navigation (V) 的位置
<Shell.Navgation collaspe={false} />
<Shell>
<Shell.Branding /> Box(row)
<Shell.Navgation/>
<Shell.Action /> Box(row)
<Shell.LocaleNavgation /> Box(column)
<Shell.Ancillary /> Box(column)
<Shell.Toolbar /> Box(column)
<Shell.AppBar /> Box(column)
<Shell.Content /> Grid
<Shell.Footer /> Box(column)
</Shell>
提供11个组件,每个组件有固定位置,其中 <Shell.Content />
采用Grid布局, 其他均为 Flex布局
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
device | 预设屏幕宽度,会影响Navgation LocaleNavgation Ancillary 等的展开收起状态可选值: 'phone', 'tablet', 'desktop' |
Enum | desktop |
scrollHideHeader | Header滚动时隐藏 | Boolean | false |
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
collaspe | 是否折叠 | Boolean | false |
direction | 方向 可选值: 'hoz', 'ver' |
Enum | hoz |
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
collaspe | 是否完全折叠 | Boolean | false |
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
collaspe | 是否完全折叠 | Boolean | false |
Header (Fixed)
Navigation (Fixed)
LocaleNavigation (Fixed)
Ancillary
Toolbar
AppBar
Content
Footer
关于组件 Context 问题, Shell.navigation 是需要探测navigation 做更改direction 的操作,但是在这一点上觉得不太妥, 目前需要在navigation 上增加 type Mark 的机制做探测,而且子组件不可以是给予navigation 包装的组件,
建议处理方式,增加 Shell.Context 组件,自上向下传递, direction 与 collaspe 参数
组件的使用是采用单层级的平铺,还是多层级的嵌套(如下)。
多层级嵌套用户需要在一定程度上关心代码结构
<Shell>
<Shell.Header>
<Shell.Branding /> Box(row)
<Shell.Navgation/>
<Shell.Action /> Box(row)
</Shell.Header>
<Shell.Aside pos="left">
<Shell.Navgation/>
<Shell.LocaleNavgation /> Box(column)
</Shell.Aside>
<Shell.Aside pos="right">
<Shell.Ancillary /> Box(column)
<Shell.ToolDock /> Box(column)
</Shell.Aside>
<Shell.Section>
<Shell.LocaleNavgation /> Box(column)
<Shell.Section>
<Shell.AppBar /> Box(column)
<Shell.Content /> Grid
<Shell.Footer /> Box(column)
</Shell.Section>
<Shell.Ancillary /> Box(column)
</Shell.Section>
</Shell>
平铺在处理合并区块开放的时候会有问题,比如 这个时候需要嵌套才能解决。如果我们demo场景列举全面,copy代码成本也不高!
我认为Shell的所有组件之所以平铺的出发点是在于不希望用户去关注实际UI的嵌套关系,而只需要提供内容。另外上边说的合并区块的问题,可能确实需要依靠嵌套才能解决,但我觉得这是一个前端工程层面的问题,要求某个前端框架下的页面代码以嵌套的方式书写,不等于要求Shell组件自身按照嵌套的方式去设计。
与 @myronliu347 @bindoon 沟通后确认方案为鼓励用户采用单层嵌套。 若有开放合并区块的需求,用户可在Shell中嵌套Shell,即接受如下用法:
<Shell>
<Shell.Branding /> Box(row)
<Shell.Navgation/>
<Shell.Action /> Box(row)
<Shell.LocaleNavgation /> Box(column)
<Shell.AppBar /> Box(column)
<Shell.Content /> Grid
<Shell.Footer /> Box(column)
<Shell.Ancillary /> Box(column)
<Shell.ToolDock /> Box(column)
</Shell>
<Shell>
<Shell.Branding /> Box(row)
<Shell.Navgation/>
<Shell.Action /> Box(row)
<Shell>
<Shell.LocaleNavgation /> Box(column)
<Shell.AppBar /> Box(column)
<Shell.Content /> Grid
<Shell.Footer /> Box(column)
</Shell>
<Shell.Ancillary /> Box(column)
<Shell.ToolDock /> Box(column)
</Shell>
代码实现上采用以下策略:
Branding
Navgation(H)
Action
,放到头部(header)区域,并fixedLocaleNavgation
Navgation(V)
放到左侧侧边栏,并fixedAncillary
ToolDock
放到右侧侧边栏,并fixedAppBar
放到中间区域的顶部,跟随文档流Footer
放到中间区域的底部,跟随文档流Content
放到中间区域的中部,跟随文档流Shell
放到Content
Footer
中间,跟随文档流,其他元素直接忽略。若组件缺失,则以页面中心元素为基准,上下左右撑满屏幕,代码中组件的排布顺序不影响渲染效果
第二种嵌套方式需要再调整, 如果是 Shell 嵌套Shell 会给用户错误的引导,可能会出现嵌套很多层的情况,第二层组件名需要更名为 Shell.Page
<Shell>
<Shell.Branding /> Box(row)
<Shell.Navgation/>
<Shell.Action /> Box(row)
<Shell.Page>
<Shell.LocaleNavgation /> Box(column)
<Shell.AppBar /> Box(column)
<Shell.Content /> Grid
<Shell.Footer /> Box(column)
</Shell.Page>
<Shell.Ancillary /> Box(column)
<Shell.ToolDock /> Box(column)
</Shell>
提供11个组件,每个组件有固定位置,其中
<Shell.Content />
采用Grid布局, 其他均为 Flex布局API
Shell
Navgation
LocaleNavgation
Ancillary
等的展开收起状态可选值:
'phone', 'tablet', 'desktop'
Shell.Navgation
可选值:
'hoz', 'ver'
Shell.LocaleNavgation
Shell.Ancillary
Config配置项(待视觉稿提供后调整)