1

我知道有 1001 个 CSS 页脚 hacks 需要多次扭曲才能满足最古老的浏览器。

但我想知道如何为现代标准兼容浏览器制作页脚。我希望下面的代码可以工作,但它没有——页脚不在页面底部,而是在“内容”的正下方。为什么?

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Footer Test</title>
    <style type="text/css">
        html
        {
            height: 100%;
            margin: 0;
            padding: 0;
        }
        body
        {
            height: 100%;
            min-height: 100%;
            margin: 0;
            padding: 0;
        }
        #page
        {
            position: relative; /* <--- relative position for footer's parent */
            height: 100%;
            background-color: #AAA;
        }
        #header
        {
            height: 3em;
            margin: 0;
            padding: 1em;
            background-color: #F00;
        }
        #content
        {
            margin: 0;
            padding: 1em;
            background-color: #0F0;
        }
        #footer
        {
            position: relative;
            bottom: 0; /* <--- distance from #footer's bottom to #page's bottom  */
            height: 3em;
            margin: 0;
            padding: 1em;
            background-color: #00F;
        }
    </style>
</head>
<body>
    <div id="page">
        <div id="header">
            <p>This is the header!</p>
        </div>
        <div id="content">
            <p>Yeah, some content!</p>
            <p>Yeah, some content!</p>
            <p>Yeah, some content!</p>
        </div>
        <div id="footer">
            <p>This is the footer!</p>
        </div>
    </div>
</body>
</html>

编辑:

澄清:我希望页脚位于viewport的底部。因此,如果内容很少,则内容下方应留有空隙,页脚应位于页面底部。但是如果有很多内容滚动条应该出现,并且页脚应该只有在向下滚动时才可见。

4

3 回答 3

1
 #footer
        {
            position: fixed;
            width:100%;
            bottom: 0; /* <--- distance from #footer's bottom to #page's bottom  */
            height: 3em;
            margin: 0;
            padding: 1em;
            background-color: #00F;
        }
于 2013-07-05T10:46:46.820 回答
1

在这里你可以找到一些代码如下

将以下几行 CSS 添加到您的样式表中。.wrapper 中边距的负值与 .footer 和 .push 的高度相同。负边距应始终等于页脚的整个高度(包括您可能添加的任何填充或边框)。

在 CSS 中:

* {
margin: 0;
}
    html,body
    {
        height: 100%;
        }
        .wrapper {
        min-height: 100%;
        height: auto !important;
        height: 100%;
        margin: 0 auto -4em;
        }
        .footer, .push {
        height: 4em;
        }

遵循这个 HTML 结构。任何内容都不能位于 .wrapper 和 .footer div 标签之外,除非它是绝对使用 CSS 定位的。.push div 中也不应该有任何内容,因为它是一个隐藏元素,可以“下推”页脚,因此它不会与任何内容重叠。

在 HTML 正文中:

 <div class="wrapper">
            <p>Your website content here.</p>

      <div class="push"></div>
        </div>
        <div class="footer">
            <p>Copyright (c) 2013</p>
        </div>
于 2013-07-08T10:53:39.333 回答
0

我仍然不确定为什么原始版本不起作用...

但是下面的代码是免费的,并且似乎可以工作:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Footer Test</title>
    <style type="text/css">
        html 
        {
            height: 100%;
            margin: 0;
            padding: 0;
        }

        body 
        {
            margin: 0;
            padding: 0;
        }

        #page 
        {
            min-height: 100%;
            width: 100%;
            position: absolute; 
            background-color: #AAA;
        }

        #header 
        {
            padding: 1em;
            background-color: #F00;
        }

        #content 
        {
            margin-bottom: 5em; /* <--- footer's height */
            padding: 1em;
            background-color: #0F0;
        }

        #footer 
        {
            width: 100%;
            position: absolute;
            bottom: 0;
            background-color: #00F;
        }

        #footer > *
        {
            padding: 1em; /* <--- additional rule for footer's content */
        }
    </style>
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
    <script type="text/javascript">
    $(document).ready(function() { $("button").click(function() { $("#hidden").slideToggle(1000); }) });
    </script>
</head>
<body>
    <div id="page">
        <div id="header">
            <p>This is the header!</p>
        </div>
        <div id="content">
            <p>Yeah, some content!</p>
            <p>Yeah, some content!</p>
            <p>Yeah, some content!</p>
            <button>Push the footer!</button>
            <div id="hidden" style="display: none">
                <p>Begin of extra content</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>Much hidden content!</p>
                <p>End of extra content</p>
            </div>
        </div>
        <div id="footer">
            <p>This is the footer!</p>
        </div>
    </div>
</body>
</html>

我不喜欢它的地方:

  • 内容需要知道页脚的高度。

  • 页脚内容所需的附加规则。

于 2013-07-05T19:55:50.790 回答