【问题标题】:Full height and full width CSS layout全高和全宽 CSS 布局
【发布时间】:2010-09-06 15:26:16
【问题描述】:

我正在寻找一种方法来创建具有 5 个区域的纯 CSS(无 JavaScript)布局,如下所示:

   ┌────────────────────┐
   │          H         │
   ├────┬────────┬──────┤
   │    │        │      │
   │    │        │      │
   │    │        │      │
   │  A │    B   │  C   │
   │    │        │      │
   │    │        │      │
   │    │        │      │
   ├────┴────────┴──────┤
   │          F         │
   └────────────────────┘

(仅当您的字体具有 Unicode 框线绘图字符时,上图才会正确显示。)

布局必须完全填满网络浏览器中的可用空间(高度和宽度)。 A、B、C的高度必须相同;并且 H 和 F 必须具有相同的宽度。即,区域之间必须没有间隙,除了固定的边距。 区域内的元素应该知道他们的父母大小;这意味着,如果我放置

   <textarea style="width:100%;height:100%">Just a test</textarea>

在一个区域内,它将延伸到该区域的整个宽度和高度。 浏览器窗口右侧不能有滚动条(因为H、C、F的高度正好加起来就是浏览器客户区的高度)。

如果您使用&lt;table&gt; 进行布局,这非常容易做到。但我一直在读到,使用表格进行格式化是一件坏事,而 CSS 是要走的路。

我知道有 W3C 工作组致力于通过使上述布局非常易于实现的功能来扩展 CSS 标准。然而,这些标准扩展目前还没有被大多数浏览器实现。我需要一个适用于当前浏览器的解决方案。

我一直在查看许多包含示例 CSS 布局的网页,但没有一个可以完成我上面描述的操作。这些布局中的大多数不是全高,或者列具有不同的高度,或者它们需要 JavaScript。

因此,我的问题是:是否可以仅使用 CSS(没有 JavaScript、没有假列、没有 &lt;table&gt;)来创建上述布局?当然,该解决方案应该适用于当前的 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 应用程序并不重要。

/弗兰克

【问题讨论】:

  • 找不到任何有关如何执行此操作的文献是有原因的 - 因为这样做没有实际目的! 高度或宽度的流体很有用。 both 的流体是愚蠢的。您肯定已经看到有关屏幕尺寸及其对网页设计和开发的影响的讨论。即使这在技术上是可行的,创造一个适合这一点的设计也几乎是不可能的。很容易指出这种事情是为什么我们仍然需要表格进行布局,(以及问题的措辞方式,它可能是)但它不是 - 不是这种不切实际的东西。
  • 您可以在桌面应用程序的世界中找到这种布局:只需看看 Outlook、Visual Studio、Eclipse 等。 Outlook Web Access 等 Web 应用程序也有这种布局(当然是 &lt;table&gt;)。因此,我认为这一个实际的目的。
  • @fmunkert Web 应用程序使用 Javascript - 实际上,没有人在这种受限条件下工作
  • @fmunkert:我刚刚阅读了您的最新编辑。您输入的代码在 FF 中运行良好,但在 IE8 中,所有部分(文本区域)中都有滚动条。您可能需要添加“溢出:隐藏;”在你的 textarea CSS 规则中隐藏它们 :)

标签: html css


【解决方案1】:

http://jsfiddle.net/aGG3V/

要设置页眉和页脚高度,您必须将其设置为它们的样式以及 .content 填充和边距(这是负面版本)

【讨论】:

    【解决方案2】:

    嗨 fmunkert(以及这里的其他人:),

    我只是好奇并想尝试一下,所以我启动了记事本并想出了这样的东西:

    <html>
        <head></head>
    <body style="margin: 0px; padding: 0px; height: 100%; width: 100%; text-align: center;">
    <div style="height: 100%; width: 100%;">
    
    <div style="height:20%; width: 100%; text-align: center; background-color: orange;">H</div>
    
    <div style="height:60%; width: 100%; display: table;">
    <div style="float:left; height:100%; width: 20%; background-color: yellow;">A</div>
    <div style="float:left; height:100%; width: 60%; background-color: grey;">B</div>
    <div style="float:left; height:100%; width: 20%; background-color: yellow;">C</div>
    </div>
    
    <div style="height:20%; width: 100%; text-align: center; background-color: orange;">F</div>
    
    </div>
    </body>
    </html>
    

    这是 Firefox 中的输出:

    以及在 IE8 中的输出:

    我使用 Firefox 3 和 IE8 对此进行了测试。对我来说似乎没问题。这是你想要的吗? :)

    注意 1:正如其他人所提到的,这可能不切实际,但这仍然取决于您/您的客户想要什么。

    注意 2:如果这确实是您想要的,您可以根据需要编辑高度和宽度值,最好将这些 CSS 规则放入单独的 CSS 文件中,而不是内联样式。

    【讨论】:

    • 它在 Firefox 3.5.5 中完美运行,但我无法在 Internet Explorer 8 中运行。我尝试了几种 DOCTYPE(无、html、松散和严格),但无论是高度太小或 C 部分放错了位置。
    • 这很奇怪。我上传了 IE8 屏幕截图,如您所见,它就像在 Firefox 中一样工作。您是否有其他可能导致问题的 CSS 文件?尝试使用 IE 开发人员工具(快捷方式 - F12)找出答案。
    【解决方案3】:

    您找不到任何 CSS 来执行此操作的原因是,CSS 规范实际上不允许您在不使用至少一个您不想使用的选项的情况下满足所有这些条件。

    Holy Grail 液体布局是 100% CSS,但它本身不符合您的高度标准:http://www.alistapart.com/articles/holygrail/

    您可以使用以下方法在页脚中伪造高度标准: http://www.themaninblue.com/writing/perspective/2005/08/29/

    这篇 24Ways 文章有一个使用绝对定位的全高列方法,它解决了您的一些问题,但创建了一个新问题,因为如果内容扩展,您的一个列总是会溢出:http://24ways.org/2008/absolute-columns

    您可能需要结合多种方法来获得适用于您的规范的方法。我个人只是使​​用 jquery,因为生命太短了,不能像这样乱搞 CSS,但是如果你一心想避免它,那就为自己做大量的黑客攻击吧。

    【讨论】:

      【解决方案4】:

      在使用百分比测量时,没有简单的方法让元素准确地填充给定的深度。

      您可以靠近窗口底部的anchoring the footer,然后 - 如果列 A 和 C 共享背景颜色但列 B 的背景不同,则设置您的主体(或容器 div,如果存在)背景颜色以匹配列 A + C 无缝填充这些列下方的间隙(如果它们比 col B 短)。

      【讨论】:

        猜你喜欢
        • 2015-08-14
        • 2016-04-30
        • 2010-10-09
        • 2014-11-27
        • 2010-09-22
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多