【发布时间】:2010-11-24 03:21:17
【问题描述】:
我必须为一个网站生成以下布局,其中所有元素都根据其内容调整大小。我无法设置任何元素的宽度 - 如果没有其他方法,可能是最外面的容器 (0)。
最外层容器 (0) 的大小由页面布局的其他部分决定。它包含几个具有相同结构的项目 (1)。容器 (1) 包含一些小内容 (2) - 实际上它只是一个数字;将其视为章节编号。在这个数字的右边是容器 (3),其中包含由几个部分 (3) 到 (6) 组成的实际内容。并非所有内容项 (4) 到 (6) 都始终存在;当前内容项移动到容器 (3) 的顶部,以便第一个当前内容项位于数字 (2) 的右侧。内容项 (4) 到 (6) 可能包含必须环绕的长文本。
最后整个结构嵌套了三遍——容器(6)和容器(1)的结构相同。在最深的嵌套级别容器 (3) 中包含一个可能非常宽且必须可水平滚动的表格。
___________________________________
|0 _______________________________ |
| |1 _____ ___________________ | |
| | |2 | |3 _______________ | | |
| | |_____| | |4 | | | |
| | | |_______________| | | |
| | | _______________ | | |
| | | |5 | | | |
| | | |_______________| | | |
| | | _______________ | | |
| | | |6 | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | |_______________| | | |
| | |___________________| | |
| |_______________________________| |
| . |
| . |
| . |
| _______________________________ |
| |1 _____ ___________________ | |
| | |2 | |3 _______________ | | |
| | |_____| | |4 | | | |
| | | |_______________| | | |
| | | _______________ | | |
| | | |5 | | | |
| | | |_______________| | | |
| | | _______________ | | |
| | | |6 | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | |_______________| | | |
| | |___________________| | |
| |_______________________________| |
|___________________________________|
到目前为止我尝试过
- 使用 DIV 的布局,但未能将 (2) 和 (3) 并排放置
- 使用 DIV 和向左浮动 (2) 和 (3) 的布局,但如果 (3) 变宽,则 (3) 的内容在 (2) 周围浮动或 (3) 移动到 (2) 下方
- 使用 DIV 和左浮动 (2) 和右浮动 (3) 的布局,但如果 (3) 的内容很窄,则 (2) 和 (3) 之间的间隙可能会变得任意宽
- 使用具有两列的嵌套表的布局 - 一列用于 (2),一列用于 (3) - 但未能将表的宽度限制为容器 (0)。嵌套最深的非常宽的表格只是将所有单元格和表格推到右侧。
- 一个基于 DIV 的布局,带有表格显示样式,但浏览器支持太差,所以很快放弃了这个想法
- 使用有序列表的布局,如CSS 2.1 12.4.1 中所述,但这会将数字放入 (3) 中。此外,不能保证我的数字是连续的(但这可以通过显式设置计数器来解决)。
最终的结果应该是这样的。
1 Section Header
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur risus
tortor, egestas id laoreet sit amet, sollicitudin nec ligula. Aliquam vitae
justo lacus, non sagittis diam. Vestibulum ante ipsum primis in faucibus.
1.1 Question Header
Orci luctus et ultrices posuere cubilia Curae; Praesent eu nisi vitae
arcu cursus lobortis vitae vitae dui. Duis imperdiet varius molestie.
Donec ut fermentum ligula.
1.1.1 Nunc dictum, est non vestibulum adipiscing, lacus felis commodo
orci, in commodo nibh ante ut dolor. Quisque posuere, lacus non
rutrum sollicitudin, lectus sem commodo tellus, at hendrerit lacus
neque mattis risus.
________________________________________________________________
| | | | | | |
| Header | Header | Header | Header | Header | Hea|
|___________|___________|___________|___________|___________|____|
| | | | | | |
| | | | | | |
|___________|___________|___________|___________|___________|____|
| | | | | | |
| | | | | | |
|___________|___________|___________|___________|___________|____|
____________________________________________________________
|<|____________________________________________________________|>|
1.1.2 Nunc dictum, est non vestibulum adipiscing, lacus felis commodo
orci, in commodo nibh ante ut dolor. Quisque posuere, lacus non
rutrum sollicitudin, lectus sem commodo tellus, at hendrerit lacus
neque mattis risus.
2 Section Header
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur risus
tortor, egestas id laoreet sit amet, sollicitudin nec ligula. Aliquam vitae
justo lacus, non sagittis diam. Vestibulum ante ipsum primis in faucibus.
2.1 Question Header
Orci luctus et ultrices posuere cubilia Curae; Praesent eu nisi vitae
arcu cursus lobortis vitae vitae dui. Duis imperdiet varius molestie.
Donec ut fermentum ligula.
没关系,数字越大,内容越向右。
1 Section Caption
1.1 Question Caption
10 Section Caption
10.1 Question Caption
但对齐内容也可以。这应该很容易使用一个复杂的表而不是嵌套表来实现。
1 Section Caption
1.1 Question Caption
10 Section Caption
10.1 Question Caption
然后数字也可以右对齐,但我认为左对齐看起来可能更好 - 数字的长度变化不大。
1 Section Caption
1.1 Question Caption
10 Section Caption
10.1 Question Caption
所以问题的本质是将元素 (2) 和 (3) 并排放置,并根据内容调整它们的大小。有任何想法吗?使用嵌套有序列表的语义正确解决方案优先于 DIV 和 DIV 略优于表。
【问题讨论】:
-
你应该真正看到这个非常有用的技巧:绝对定位内部相对定位:css-tricks.com/absolute-positioning-inside-relative-positioning
-
我希望您正在使用贝宝支付回答此问题的人。另外,不要忘记存在 inline-block。
-
@Sarfraz 请参阅我对 nemophrost 答案的评论 - 定位元素(几乎)总是需要对元素的大小进行一些假设。这正是我要避免的;我只想按内容调整元素的大小。
-
@meder 我还没有真正考虑过内联块。我会试一试的。