【发布时间】:2013-07-30 07:37:07
【问题描述】:
经验法则 - 如果您在布局中过多地使用 CSS,请切换到框架。我已经研究了几十个网格/布局框架,其中大部分都专注于传统的文档网格布局。
我的页面更像是一个 SPA(单页应用程序)。它类似于桌面应用程序使用的布局。显然 HTML 不能很好地处理这个问题,需要大量的 CSS 修补。
这是我尝试实现的布局示例(应该填满整个屏幕):
请注意,固定菜单不应悬停在其后面的滚动内容上。每个块应该驻留在自己单独的“框架”中 - 即左侧长列表的滚动条应该出现在固定菜单下方。
我还没有找到一个支持这个的轻量级网格框架(像 Sencha 或 Kendo UI 这样的框架有点矫枉过正)。手动完成 CSS 非常费力。特别是如果我决定显示一个模式对话框,并且需要在此对话框内进行类似的布局(顺便说一句,这最终杀死了我)。或者,如果我决定要在底部设置另一个固定菜单,那么一切都会崩溃。
我什至不确定这是否仅适用于 CSS(我知道至少固定底部菜单需要 CSS 中的一些硬编码值才能缩小其后面的内容,以免滚动条重叠)。如果需要 JS 解决方案,并且我希望它能够处理浏览器屏幕大小调整事件 - 再一次崩溃,因为没有简单的常见事件可以做到这一点。
我应该如何以可维护/灵活的方式解决这个问题?
评论:您会注意到,我自己添加了一个答案,建议使用 HTML 表格实现此布局。我真的不想接受我自己的答案。我有一种感觉,没有人会足够“勇敢”地推荐表格(毕竟这是有争议的),我愿意为了讨论而遭受反对票
澄清:似乎我说的可维护性和灵活性不够清楚。我的意思是让布局优雅地处理各种场景或需要的修改(即代表我做的工作很少)。为了绝对具体,让我们举一些例子:
布局不应该介意它是显示为整页还是在固定模式对话框(即引导对话框)中显示。在这些场景之间切换应该尽可能少地改变布局代码。
-
布局应支持多种描述宽度和高度的方式(即侧边栏的宽度或顶部菜单的高度)。更具体地说,应支持以下大小调整方法:
- 精确的固定像素大小。
- 通过使用容器的百分比来确定相对大小。例如:侧边栏宽度是整个容器(整页或对话框)宽度的 30%。另一个例子:顶部菜单高度是整个容器(整页或对话框)高度的 20%。
- 环绕它自己的内容。示例:顶部菜单的高度将取决于其中的内容。如果您输入一行文本,它将在不滚动的情况下换行。如果您输入两行文本,它将是原来的两倍,并且按住它们而不滚动。
- 奖励:两者的简单组合。比如侧边栏宽度为 20% 但不少于 50 像素。
正如 Ian Clark 最专业地指出的那样,CSS 可以开箱即用地实现大部分这些请求。对此没有任何争论。问题仍然存在,如果原始 CSS 是最简单的使用,是否有任何东西可以通过框架/另一种机制(如 flexbox/tables)从开发人员那里卸载。
【问题讨论】:
-
使用固定布局创建动态网格确实很难实现。页面会不断变化,还是一旦发布就完成布局?
-
布局是相当稳定的——它在运行时不会改变。问题是我有几个布局相似的屏幕,并且为每种情况进行所有手动计算和 CSS 技巧感觉就像是在浪费时间
-
哦,我明白了。我想说如果它只有一页,花时间弄清楚你需要的所有东西,写下它的列表,然后用固定的布局构建你的页面,这样你只需要做一次......但是如果您有多种变体,是的,希望您能找到替代方案。祝你好运!
-
您是要求一个库来处理一般的布局,还是尝试创建这个特定的布局?如果是前者,那么这个问题就离题了。
-
我特别想问如何实现这个布局,但添加了一个要求,它需要通过库而不是手动完成。我正在寻找一个可维护的解决方案,而不仅仅是一些肮脏的东西
标签: html css layout frameworks single-page-application