HTML5指令打破了灵活布局

时间:2015-01-27 07:24:19

标签: html css html5 css3

使用灵活布局(display: flex)玩得很开心,我对它的功能印象深刻。但是,我遇到了一个问题,它与<!DOCTYPE html>

有某种关系

我想创建简单的页面。页眉和页脚(均为50px高度)和内容应占用剩余空间。页眉和页脚应始终可见,因此即使内容长于该屏幕,也不应显示滚动。

请查看以下代码段

<html>
<head>
    <style>
        body {
            margin: 0;
            padding: 0;
        }

        .container {
            height: 100%;
            display: flex;
            flex-direction: column;
        }

        .header {
            height: 50px;
            background-color: red;
        }

        .content {
            flex-grow: 1;
            background-color: blue;
        }

        .footer {
            height: 50px;
            background-color: green;
        }
    </style>
<head>
<body>
    <div class="container">
        <div class="header"></div>
        <div class="content"></div>
        <div class="footer"></div>
    </div>
</body>

工作正常。标题位于顶部,页脚位于底部,内容占据剩余空间。但是,如果我添加指令<!DOCTYPE html>,则内容为0px高度,标题位于页脚旁边。内容未扩展。

这应该是这样的: enter image description here

这就是<!DOCTYPE html>的外观 enter image description here

任何人都知道原因是什么?怎么解决?为什么这个指令对渲染有如此大的影响?

2 个答案:

答案 0 :(得分:3)

没有!DOCTYPE您的浏览器转到quirks mode并导致不同的box model

Mateusz的代码似乎工作正常。

答案 1 :(得分:2)

由于在<!DOCTYPE html>持续存在时使用HTML5标准模式,因此无法根据需要使用flex布局。要生成预期结果,您需要通过以下示例

更改容器类的CSS样式样式

.container{ position:absolute; width: 100%; height: 100%; display: flex; flex-direction: column; }

使用这个css-trick,你将同时包含html5和html4。