我正在寻找一种方法来创建一个仅CSS(无
JavaScript)布局,其中有5个区域如下所示:
- ┌────────────────────┐
- │ H │
- ├────┬────────┬──────┤
- │ │ │ │
- │ │ │ │
- │ │ │ │
- │ A │ B │ C │
- │ │ │ │
- │ │ │ │
- │ │ │ │
- ├────┴────────┴──────┤
- │ F │
- └────────────────────┘
(仅当您的字体具有Unicode框线绘图字符时,上图才会正确显示.)
布局必须完全填写网络浏览器中的可用空间(高度和宽度).
A,B,C必须具有相同的高度; H和F必须具有相同的宽度.也就是说,除固定利润之外,区域之间不能有差距.
区域内的元素应该知道他们的父母的大小;这意味着,如果我放置
- <textarea style="width:100%;height:100%">Just a test</textarea>
在一个区域内,它将延伸到该区域的全宽和高度.
在浏览器窗口的右侧不应有滚动条(因为H,C和F的高度恰好与浏览器客户区的高度相加).
如果您使用的是< table>,则这是非常容易的做布局.但是我继续阅读,使用表格进行格式化是一件坏事,CSS是要走的路.
我知道有W3C工作组通过功能扩展CSS标准,使上述布局非常容易实现.然而,这些标准扩展目前尚未被大多数浏览器实现;我需要一个适用于当前浏览器的解决方案.
我一直在寻找包含CSS样式样本的许多网页,但是没有一个可以做上述的描述.大多数这些布局既不是全高度的,或者列具有不同的高度,或者它们需要JavaScript.
因此,我的问题是:是否可以创建上述布局,只使用CSS(没有JavaScript,没有人造柱,没有< table>)?当然,该解决方案应该与当前的Web浏览器配合使用.
编辑:根据Gilsham提供的解决方案,我设法编写一个示例页面,生成所需的仅CSS布局(使用Firefox 3.5.5和IE8进行测试):
- <!DOCTYPE html>
- <html>
- <head>
- <style type="text/css">
- html,body{
- height:100%;
- margin:0;
- padding:0;
- border:0;
- }
- div{
- margin:0;
- border:0;
- }
- textarea {
- margin:0;
- border:0;
- padding:0;
- height:100%;
- width:100%;
- }
- .content{
- display:table;
- width:100%;
- border-collapse:separate;
- height:80%;
- }
- .Col{
- display:table-cell;
- width:30%;
- height:100%;
- }
- #header,#footer{
- height:10%;
- position:relative;
- z-index:1;
- }
- </style>
- </head>
- <body>
- <div id="header"><textarea style="background-color:orange;">H Just a test</textarea></div>
- <div class="content">
- <div id="left" class="Col"><textarea style="background-color:lightskyblue;">A Just a test</textarea></div>
- <div id="center" class="Col"><textarea style="background-color:green;">B Just a test</textarea></div>
- <div id="right" class="Col"><textarea style="background-color:lime;">C Just a test</textarea></div>
- </div>
- <div id="footer"><textarea style="background-color:yellow;">F Just a test</textarea></div>
- </body>
- </html>
一个缺点是必须以特定的顺序指定div,这对搜索引擎优化和屏幕阅读器是不利的;但是,对于预期的Web应用程序来说,这并不重要.
/弗兰克
解决方法
http://jsfiddle.net/aGG3V/
设置页眉和页脚的高度,你必须设置它的风格以及.content的填充和边距(这是负版本)