Mac OS X 的顶部常驻一行菜单栏,可以分成三部分:苹果图标,当前活动应用程序的名称和功能,以及附加图标。
Mac 菜单栏的优点
可以获悉当前正在运行的程序名称
嗯,谁叫 Dock 上面没有任何提示呢。但是这个特性还不能 100% 确保灵,见下面的缺点。
让程序的快捷键有统一的实现
每一个菜单项的功能,如果有对应的快捷键,那就会显示在最右边。而且当你按这个快捷键的时候,包含这个功能的菜单还会闪一下。
搜索命令
这一点我觉得是最大的优点。因为 Mac 程序的设计理念之一是把所有功能都塞到菜单栏中,所以当你找不到一个功能的时候可以尝试在“帮助”菜单中搜索命令。当搜索到的时候,它还会告诉你这个命令究竟在什么位置。
保持主界面简洁
菜单栏是一个丢没地方放的命令的地方。开发者可以把不常用的所有功能都丢到菜单栏中,保持主界面简洁。但是下面我将会指出 Windows 用了更好的方案解决这个问题。
Mac 菜单栏的缺点
这是本文的重点,整体而言,我认为 Mac 在处理菜单栏方面做得不够好。
占用空间
只要你不是运行全屏的应用程序, Mac 的菜单栏就会一直显示,即使当前的应用程序不需要菜单。
自定义空间小
据我所知,系统标准的菜单栏中的项目只有三类:普通菜单项、复选菜单项和子菜单。当然“帮助”菜单里的那个搜索框是个例外,但我没见过程序可以自定义地把一个文本框放到一个别的地方。比方说, Chrome 的主界面的工具按钮出现的菜单中,“编辑”和“缩放”都有自定义的控件,但却无法在系统的菜单栏中实现。
与程序主体割离
这是相对严重的一个设计问题。一个程序的功能却分布在两个独立的地方。更糟糕的一种情况是当使用多显示器时,菜单栏永远显示在一个主显示器上,这样就会出现程序主界面在一个屏幕上、菜单栏在另一个屏幕上的现象。
无法在主界面访问程序所有功能
程序的部分功能隐藏在菜单栏中。如果菜单栏集成在程序主界面中,那即使程序并不是前端活动的,也可以点一下鼠标访问到该程序的菜单。但是现在这种设计中,必须点一下非活动程序的窗口,再在菜单栏里面找。
附加菜单项无法隐藏
“附加菜单项”相当于 Windows 的通知区域,但是 Mac 并没有提供一个隐藏不常用的菜单项的机制。当当前程序的菜单项较多的时候,附加菜单项就会被强制隐藏,而且除了切换到一个菜单项少点的程序之外没有别的好办法。
当无 Dock 项的时候无法使用
这样说有点抽象,这是一个例子: Sparrow 这个邮件客户端的有一个选项是“是否在 Dock 中显示”,如果选是的话,那它只要在后台运行就会在 Dock 中常驻一个图标,即使没有打开窗口。因为我让它在附加菜单中显示图标,所以 Dock 中的图标可以不用了。但是如果这样的话,就算打开了主窗口也不会在 Dock 中显示图标,更糟糕的是切换到 Sparrow 的窗口后,菜单栏还是上一个程序的内容。如下图所示, Sparrow 明明是当前活动窗口,但菜单栏显示的还是切换到 Sparrow 之前的那个程序的项目。
那么 Windows 是怎么设计的?
“苹果”菜单是如何处理的
首先是位于菜单栏最左边的“苹果”菜单。观察一下其中的项目就会发现,这些功能都集成在 Windows 的“开始”菜单中,而且 Windows 的安排更合理。
这里的重点是:“苹果”菜单处在一个非常重要的位置,无论什么时候,只要不是运行全屏的程序,它都会显示。所以,它里面放的东西应当是最重要最常用的。
附加菜单项是如何处理的
这就是“通知”区域。不想要的图标可以隐藏。
程序功能菜单是如何处理的
在 Windows 中,每个程序可以根据自己的需要选择菜单的模式。主要有以下几种:
标准的菜单栏
这种模式是从 Windows 1.0 就有的。一些简单的程序,比如记事本和计算器等,用的还是这样的模式。
隐藏的菜单栏
Windows Explorer 、 Internet Explorer 、 Windows Live Messenger 这些程序,平时是没有菜单栏的,但是如果按一下 Alt 就会出现一个菜单栏。在这样的程序中,往往菜单栏里面提供的功能在程序界面的其他地方也可以访问,菜单栏只是高阶用户的一个隐藏功能。
Ribbon UI
Ribbon UI 是 Office 2007 的特色功能,后来也应用到了 Windows 7 的画图、写字板和 Windows Live 的 Writer 、 Mail 等程序里面。 Ribbon UI 提供了丰富的元素类型,而且只占用有限的屏幕空间,是菜单和工具栏的结合。
Ribbon UI 也不缺乏快捷键提示,只要按一下 Alt ,就会出现非常到位的一步一步的屏幕提示:
有 Mac 用户嘲笑 Ribbon UI 说这是把所有功能全都罗列出来,看起来很混乱,跟 Mac 的简洁设计形成鲜明对比。但其实只要双击 Ribbon 的 Tab 就会缩起来,所占空间并不比一条菜单栏大。
收缩起来以后,单击一个 Tab 就会将该 Tab 的命令悬浮出来,效果就像是一个功能增强版的菜单。
无菜单
如果一个程序足够简单,或者它的全部功能都能由其他界面元素提供,那它就不需要添置一个菜单。
为什么苹果应用这种设计?
我觉得一个重要的原因是历史遗留问题。1984年的 Mac OS 1 就是顶部有一个菜单栏。或许这样设计的原因是当时屏幕太小。
(图片来自维基百科)
虽说1985年的 Widnows 1.0 被指抄袭 Mac 的设计,但它已经让每个程序有独立的菜单栏。
(图片来自维基百科)
问题在于, Mac 把菜单栏设计成一个系统级别的、跨程序的元素。想要在它上面做手脚,可不是把一个程序从菜单+工具栏变成 Ribbon UI 那么简单。想象一下,假如苹果决定在下个版本的 Mac OS X 中取消菜单栏,那应该怎么做?
首先,苹果菜单得妥善处理,像关机等功能得找地方安置。然后,附加菜单项得找地方安置。最重要的是每个程序的功能菜单得放到各个程序本身的主界面中。
对于前两个问题,已经是没那么好解决了,把 Dock 变成类似任务栏的样子然后把苹果菜单和附加菜单项放进去?这等于自己否认一直坚持的设计风格并向微软认输,作为自诩“世界上最先进的操作系统”是绝对不能接受的。而第三个问题则更加棘手,为了保证向前兼容,得设计一套标准让原来的程序能够不经修改地直接转换成新界面。可以想象一大批程序将会因此变得一团糟。况且,有些时候一个程序是活动的,但它没有任何一个窗口,此时如果用菜单栏还是可以访问它的功能,把菜单栏去掉了怎么办?
其实问题也没严重到不能容忍的程度。如果一个程序想有 Ribbon UI 还是能有的,只不过还是无法去掉菜单栏罢了。菜单栏的多数缺点可以通过尽可能少地依赖于系统菜单栏实现功能来弥补。
Mac 菜单栏的优点
可以获悉当前正在运行的程序名称
嗯,谁叫 Dock 上面没有任何提示呢。但是这个特性还不能 100% 确保灵,见下面的缺点。
让程序的快捷键有统一的实现
每一个菜单项的功能,如果有对应的快捷键,那就会显示在最右边。而且当你按这个快捷键的时候,包含这个功能的菜单还会闪一下。

搜索命令
这一点我觉得是最大的优点。因为 Mac 程序的设计理念之一是把所有功能都塞到菜单栏中,所以当你找不到一个功能的时候可以尝试在“帮助”菜单中搜索命令。当搜索到的时候,它还会告诉你这个命令究竟在什么位置。

保持主界面简洁
菜单栏是一个丢没地方放的命令的地方。开发者可以把不常用的所有功能都丢到菜单栏中,保持主界面简洁。但是下面我将会指出 Windows 用了更好的方案解决这个问题。
Mac 菜单栏的缺点
这是本文的重点,整体而言,我认为 Mac 在处理菜单栏方面做得不够好。
占用空间
只要你不是运行全屏的应用程序, Mac 的菜单栏就会一直显示,即使当前的应用程序不需要菜单。
自定义空间小
据我所知,系统标准的菜单栏中的项目只有三类:普通菜单项、复选菜单项和子菜单。当然“帮助”菜单里的那个搜索框是个例外,但我没见过程序可以自定义地把一个文本框放到一个别的地方。比方说, Chrome 的主界面的工具按钮出现的菜单中,“编辑”和“缩放”都有自定义的控件,但却无法在系统的菜单栏中实现。


与程序主体割离
这是相对严重的一个设计问题。一个程序的功能却分布在两个独立的地方。更糟糕的一种情况是当使用多显示器时,菜单栏永远显示在一个主显示器上,这样就会出现程序主界面在一个屏幕上、菜单栏在另一个屏幕上的现象。
无法在主界面访问程序所有功能
程序的部分功能隐藏在菜单栏中。如果菜单栏集成在程序主界面中,那即使程序并不是前端活动的,也可以点一下鼠标访问到该程序的菜单。但是现在这种设计中,必须点一下非活动程序的窗口,再在菜单栏里面找。
附加菜单项无法隐藏
“附加菜单项”相当于 Windows 的通知区域,但是 Mac 并没有提供一个隐藏不常用的菜单项的机制。当当前程序的菜单项较多的时候,附加菜单项就会被强制隐藏,而且除了切换到一个菜单项少点的程序之外没有别的好办法。


当无 Dock 项的时候无法使用
这样说有点抽象,这是一个例子: Sparrow 这个邮件客户端的有一个选项是“是否在 Dock 中显示”,如果选是的话,那它只要在后台运行就会在 Dock 中常驻一个图标,即使没有打开窗口。因为我让它在附加菜单中显示图标,所以 Dock 中的图标可以不用了。但是如果这样的话,就算打开了主窗口也不会在 Dock 中显示图标,更糟糕的是切换到 Sparrow 的窗口后,菜单栏还是上一个程序的内容。如下图所示, Sparrow 明明是当前活动窗口,但菜单栏显示的还是切换到 Sparrow 之前的那个程序的项目。

那么 Windows 是怎么设计的?
“苹果”菜单是如何处理的
首先是位于菜单栏最左边的“苹果”菜单。观察一下其中的项目就会发现,这些功能都集成在 Windows 的“开始”菜单中,而且 Windows 的安排更合理。
这里的重点是:“苹果”菜单处在一个非常重要的位置,无论什么时候,只要不是运行全屏的程序,它都会显示。所以,它里面放的东西应当是最重要最常用的。
附加菜单项是如何处理的
这就是“通知”区域。不想要的图标可以隐藏。

程序功能菜单是如何处理的
在 Windows 中,每个程序可以根据自己的需要选择菜单的模式。主要有以下几种:
标准的菜单栏
这种模式是从 Windows 1.0 就有的。一些简单的程序,比如记事本和计算器等,用的还是这样的模式。

隐藏的菜单栏
Windows Explorer 、 Internet Explorer 、 Windows Live Messenger 这些程序,平时是没有菜单栏的,但是如果按一下 Alt 就会出现一个菜单栏。在这样的程序中,往往菜单栏里面提供的功能在程序界面的其他地方也可以访问,菜单栏只是高阶用户的一个隐藏功能。




Ribbon UI
Ribbon UI 是 Office 2007 的特色功能,后来也应用到了 Windows 7 的画图、写字板和 Windows Live 的 Writer 、 Mail 等程序里面。 Ribbon UI 提供了丰富的元素类型,而且只占用有限的屏幕空间,是菜单和工具栏的结合。

Ribbon UI 也不缺乏快捷键提示,只要按一下 Alt ,就会出现非常到位的一步一步的屏幕提示:

有 Mac 用户嘲笑 Ribbon UI 说这是把所有功能全都罗列出来,看起来很混乱,跟 Mac 的简洁设计形成鲜明对比。但其实只要双击 Ribbon 的 Tab 就会缩起来,所占空间并不比一条菜单栏大。

收缩起来以后,单击一个 Tab 就会将该 Tab 的命令悬浮出来,效果就像是一个功能增强版的菜单。

无菜单
如果一个程序足够简单,或者它的全部功能都能由其他界面元素提供,那它就不需要添置一个菜单。

为什么苹果应用这种设计?
我觉得一个重要的原因是历史遗留问题。1984年的 Mac OS 1 就是顶部有一个菜单栏。或许这样设计的原因是当时屏幕太小。

(图片来自维基百科)
虽说1985年的 Widnows 1.0 被指抄袭 Mac 的设计,但它已经让每个程序有独立的菜单栏。

(图片来自维基百科)
问题在于, Mac 把菜单栏设计成一个系统级别的、跨程序的元素。想要在它上面做手脚,可不是把一个程序从菜单+工具栏变成 Ribbon UI 那么简单。想象一下,假如苹果决定在下个版本的 Mac OS X 中取消菜单栏,那应该怎么做?
首先,苹果菜单得妥善处理,像关机等功能得找地方安置。然后,附加菜单项得找地方安置。最重要的是每个程序的功能菜单得放到各个程序本身的主界面中。
对于前两个问题,已经是没那么好解决了,把 Dock 变成类似任务栏的样子然后把苹果菜单和附加菜单项放进去?这等于自己否认一直坚持的设计风格并向微软认输,作为自诩“世界上最先进的操作系统”是绝对不能接受的。而第三个问题则更加棘手,为了保证向前兼容,得设计一套标准让原来的程序能够不经修改地直接转换成新界面。可以想象一大批程序将会因此变得一团糟。况且,有些时候一个程序是活动的,但它没有任何一个窗口,此时如果用菜单栏还是可以访问它的功能,把菜单栏去掉了怎么办?
其实问题也没严重到不能容忍的程度。如果一个程序想有 Ribbon UI 还是能有的,只不过还是无法去掉菜单栏罢了。菜单栏的多数缺点可以通过尽可能少地依赖于系统菜单栏实现功能来弥补。

另一个重要因素是使用习惯。对用户来说,一个本身不合理但是已经用了多年形成了根深蒂固的习惯的设计和另外一个设计合理但需要重新适应的设计,我想多数人会选则接受前者。