重新提出最近的问题,即模式对话框何时真正需要?. 为什么模态对话框是邪恶的?是因为人们无论如何都不读它们吗?因为它们经常执行得很差?还有什么?
11 回答
到目前为止,大约一半的答案是解决确认对话框的缺陷,而不是模式对话框的缺陷。虽然绝大多数确认对话框都是模态的,但这并不意味着这两个术语是同义词。
模态对话框是将程序置于特定模式并且不允许您在打开时执行与该模式不对应的任何操作的对话框。在最常见的实现中,这意味着您无法访问任何其他窗口。
这是邪恶的。
考虑一个地址簿应用程序。假设您在通讯录中有一个现有的人,并且您希望添加他们的室友。
- 如果“添加人员”对话框是非模态的,您可以在旧记录和新记录之间来回切换,复制和粘贴您的数据。
- 如果“添加人员”对话框是模态的,则在添加对话框打开时,您无法对旧记录执行任何操作。您可以在选择“添加”之前选择要复制的内容,但只有一件事。其他所有内容都必须手动重新输入。
在极少数情况下,您会遇到真正必须一次性完成的事情,而不允许用户在完成之前偏离该任务。模态对话框适用于这种情况。 但这种情况非常罕见! 这基本上是这个问题引用的另一个线程的重点。
人们不阅读它们,这是一件好事。您希望人们围绕您的 UI 形成习惯,但是在弹出窗口中有一个重要的选择只会让用户点击 OK。
它们打断用户,阻止用户做其他事情。
如果您想从主窗口复制和粘贴一些东西怎么办?如果您想在模态对话框中复制消息怎么办?如果你不在乎怎么办。
只需比较 IE 的查找对话框与 Firefox
比较 IE 的“您希望我们为您记住此密码吗?” 到火狐
最好的 UI 是模态的。和最坏的一样。
模态 UI——不管它是由对话框、工具栏按钮还是文本提示构建的——只有在每个模式都符合用户过渡到它的期望时才是可取的。当程序意外转换到一种模式时……或者该模式要求用户拥有他没有现成的信息……那么这将导致用户困难,要么迫使他恢复到以前的模式,要么猜测适当的行动可能会产生不良后果。
非模态 UI 是一套完整的工具。有些与手头的工作相关,有些则不相关。用户必须具有足够的技能来选择正确的工具并以正确的方式应用它们。因此,虽然非模态 UI 永远不会像好的模态 UI(当前任务的正确工具)那样最佳,但它也永远不会像糟糕的模态 UI(错误的工具)那样次优。当前任务重重地砸在你粗心的手指上)。
对于非平凡的应用程序来说,设计一个好的模态 UI 可能是一项极其艰巨的任务,尤其是对于旨在供各种用户用于更广泛用途的通用程序而言。菜单系统和对话框试图弥合差距,在更大的非模态应用程序中允许小的、特定于任务的模态部分。然而,没有一个扩展得特别好,误用和过度使用给它们留下了坏名声,通常被视为懒惰程序员的第一个避难所。特别是对话框通常更多地被用作迫使用户进入程序员(或设计师)关于如何使用应用程序的想法,或者将困难的设计决策和棘手的错误处理放在用户身上的一种手段,而不是为了他们的同名目标沟通。
确实,Web 应用程序的兴起使这种趋势在众多论坛、新闻组和问答网站(例如这个)中浮出水面,因为程序员习惯于编写超线性逻辑,在程序需要时提示用户输入,而不是在程序需要时提示用户输入。对用户可用... 被迫进入一个用户可以非线性导航的系统,并且很可能将任何限制这种自由的尝试视为一种古怪的烦恼,而不是一种必要的邪恶。这些可怜的程序员的哀号在网络上回荡,因为他们试图将这种粗糙的模态行为强加到非模态系统上的尝试在他们周围崩溃了。对于我们这些长期在他们残酷的“对话”下受苦的人来说,这确实是一首可爱的曲子。
在阅读我的答案之前,您必须仔细阅读以下消息的全部内容。所有进程、子进程、任务和线程都将无限期挂起,等待您的回答。而且,一旦你完全理解了这个信息,并且可能同意一些法律内容,以及所有这些的所有含义,那么只有这样你才能继续。
在消费者风格的应用程序中,它们或多或少是无用的;用户不阅读它们,学会忽略它们,当他们阅读它们时,通常最终会感到困惑。我认为是/否/取消对话框是彻头彻尾的懒惰 UI 设计。“按钮说他们做什么”对话框稍微好一些,因为用户不需要阅读太多。
话虽这么说:在数据关键的 Intranet/“企业”应用程序中,它们或多或少有必要确认破坏性操作或健全检查可能允许但不推荐的非标准工作流程。
所以,我不认为它们在概念上是“邪恶的”,但通常是糟糕的 UI 设计的结果。
它们是邪恶的,因为它们违反了用户应该能够指导软件操作的基本原则。模态对话框(通常是邪恶的对话框形式)将用户限制在一个动作上。
有些答案似乎误解了它是任何要求用户确认的弹出窗口。这可以在不占用整个应用程序或计算机的情况下完成;人们反对的正是这种行为。
在某些环境中,模式对话框仅将用户限制在单个应用程序的上下文中(或者可能更少)。非常糟糕的模式对话框会阻止用户在整个操作系统(例如 Windows)中执行任何其他操作。
我不喜欢它们的原因之一是因为它们以串行方式显示信息(一次很多信息)而不是并行(您需要一次查看的所有信息),并行将允许用户选择他们想看什么,就像连续剧一样,你几乎迫使他们选择一个选项。
再加上他们打破了用户的控制流(例如,从你正在处理的对象上窃取焦点),我真的不喜欢这样做。因此,实际上用户只需点击 OK,以便他们可以回到他们正在做的事情并忽略对话框中的信息。
请注意,在某些情况下您仍然需要它们。
维基百科的文章很好地总结了这些投诉。
我不记得我第一次在哪里看到的,但是模式对话框的更好方法通常是允许轻松查找和使用“撤消”功能。当您删除文件时,Windows 资源管理器实际上会同时执行这两种操作。它要求确认(模态对话框),然后,在删除文件后,编辑菜单有一个“撤消删除”选项。当然,这只是访问回收站的一种简单方法,但在这种情况下,微软真的可以取消对话框。
关键是,您通常可以通过一些思考,也许还有一些额外的代码,而无需对话框,但对于懒惰的,或者更慷慨的,时间受限的开发人员来说,这太容易了。
也就是说,有时你真的想要一个对话。想想典型的“打印”对话框中的所有选项。哪个打印机?所有页面,还是只有几页?多少本?我不知道没有对话框你会怎么做......
Noboy 阅读它们,它们会中断程序流程。通常当用作错误通知时,它们是程序失败的前兆。当用户意识到正在发生的事情时,消息已经消失了,他们只能尽可能地回忆或发明消息。
我个人认为这完全取决于它是如何完成的。
尝试复制 10 个文件,其中每个文件都存在于目标目录中,使用 Windows 资源管理器进行。
每个文件的单个模式对话框是否真的是此类操作中的正确答案。我知道你有“同意”,但整个循环系统应该以不同的方式构建。它应该将所有存在的文件收集到一个大列表中并询问一次“你想对这些文件做什么”,然后让我决定列表中的每个文件在单击“确定”并恢复操作之前要做什么.
很多时候对话框只是打断了正常的工作流程。
是的,人们不阅读对话框。因此,如果您必须使用对话框,那么一个黄金技巧就是改写它。
而不是“你想删除数据库中的这一行吗?”,试着用措辞来询问(但这不是正确的措辞)“你不想删除数据库中的这一行吗?” 这样,如果他们只是点击“是”,这是用户想要继续使用它的典型反应,他们最终会什么都不做。