什么是 AppBar 与 ToolBar?

Posted

技术标签:

【中文标题】什么是 AppBar 与 ToolBar?【英文标题】:What is AppBar vs ToolBar? 【发布时间】:2019-03-10 05:20:33 【问题描述】:

所有 material-ui 示例都在 Appbar 中显示 Toolbar。为什么不只是 Appbar?两者有什么区别?

https://material.io/design/components/没有有工具栏组件,只有“应用栏:顶部”。

https://material.io/develop/web/components/toolbar/ 说“现有的 MDCToolbar 组件和样式将在未来的版本中删除”

那么material-ui Toolbar最终会消失吗?

【问题讨论】:

【参考方案1】:

我正在查看每个组件生成的默认 CSS 属性。 Toolbar 的主要目的是通过内联显示(元素彼此相邻放置)来显示其子项,而 Appbar 不这样做。 AppBar 组件使用 display: flexflex-direction: column,这意味着直接的后代是相互堆叠的。另一方面,Toolbar也使用了display: flex,但是没有设置flex-direction,这意味着它使用了它的默认值:行。话虽如此,Button 组件使用 display: inline-block。这就是 Toolbar 组件中元素彼此相邻放置的原因。

例如,我们有一个 Appbar 和一个 Toolbar,其中有两个 Button 作为子项:

<AppBar>
    <Toolbar>
        <Button variant="outlined" color="inherit" >
            Button 1
        </Button>
        <Button variant="outlined" color="inherit">
            Button 2
        </Button>
    </Toolbar>
</AppBar>

这段代码的结果是:

但是,如果我们移除 Toolbar 并将 Button 直接放在 AppBar 组件下:

<AppBar>
    <Button variant="outlined" color="inherit" >
        Button 1
    </Button>
    <Button variant="outlined" color="inherit">
        Button 2
    </Button>
</AppBar>

结果会很不一样,如下图所示,因为现在按钮是 AppBar 组件的直接后代,因此它们将堆叠在一起。

如您所见,AppBarToolbar 有不同的用途。这就是为什么我认为工具栏永远不会消失的原因。

【讨论】:

我理解 CSS 的不同之处。但有什么不同的目的? @Chiptus 你有没有发现真正的区别? @PrivateOmega 实际上没有,我只是明白他们需要在一起 我想补充一点,AppBar 可能只应该使用once per page/section,因为它创建了一个标题元素。 Sectioning elements 包括旁边、页脚、表单、页眉、主要、导航和部分。这为屏幕阅读器和其他可访问性工具等增加了语义价值。工具栏不会创建此元素。【参考方案2】:

AppBar 用于构建您的文档。您将通常放置在标签中的内容放入内容中,例如页面标题和导航链接。如果您按 F12 检查您的页面,您会注意到 AppBar 创建了一个&lt;header&gt; 标记。 -> 因此,AppBar 用于为您的页面提供一个放置介绍和导航内容的位置

您可以将 工具栏 可视化为现实生活中的工具带。在虚拟世界中,我们在其上放置图标和按钮,而不是工具。您还可以在工具栏中添加您的品牌名称,就像制造商在他们的腰带上那样做。 -> 工具栏是一个包装器,您可以在其中将元素放置在水平线上。

AppBar 可以在没有 Toolbar 的情况下使用,并且 Toolbar 不必放置在 AppBar 内。如果你想让你的标题看起来像一个工具栏,那么&lt;AppBar&gt;&lt;Toolbar&gt;...&lt;/Toolbar&gt;&lt;/AppBar&gt; 是有意义的。如果您希望在页面中心有一个栏只是为了展示图标,那么没有 AppBar 的 Toolbar 将是有意义的。

【讨论】:

以上是关于什么是 AppBar 与 ToolBar?的主要内容,如果未能解决你的问题,请参考以下文章

如何使文本出现在 mui AppBar/Toolbar 组件的右侧?

ToolBar Style

android应用开发-从设计到实现 3-5 静态原型的Appbar

在RecyclerView列表滚动的时候显示或者隐藏Toolbar

Flutter AppBar(顶端栏)

Android 5.x Theme 与 ToolBar 实战