footer置底时,整个页面超出了浏览器高度的原因?

设备信息和错误图片

chrome: 114.0.5735.199 (正式版本) (64 位) (cohort: Stable)
图片是与下处同一个代码所得:

html和body以及div#wrapper都是1034*1020,不过html在页面一加载就会占据整个视窗,div#wrapper和body相比html边缘部分多出了h1.title的marginTop, 占据的空间是从marginTop到浏览器最底下的.
html是占据


参考https://segmentfault.com/a/1190000008516654第一种方法让footer置底,但是出现了滚动条,溢出了。看了元素的盒子模型是符合浏览器高度的.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>css lessons</title>
    <style>
        * {
            font-family: myfont, Arial, Helvetica, sans-serif;
        }

        html,
        body {
            margin: 0;
            padding: 0;
            height: 100%;
        }

        body {
            background-color: lightblue;
        }

        h1 {
            text-align: center;
            text-transform: uppercase;
            letter-spacing: 1rem;
            font-weight: bolder;
            text-shadow: 1px 2px 3px lightslategray;
        }

        span {
            font-size: large;
            letter-spacing: normal;
            font-weight: normal;
        }

        /* CONTAINER */
        #container {
            width: 1000px;
            height: 400px;
            background-color: #4524FB;
            margin: 80px auto;
            border-radius: 20px;
            display: flex;
            flex-direction: row;
        }

        .item1,
        .item2,
        .item3 {
            width: 100px;
            height: 50px;
            background-color: lime;
            border-radius: 10px;
            text-align: center;
            /* line-height和height相等时文本居中 */
            line-height: 50px;
            font-weight: bolder;
        }

        #wrapper {
            min-height: 100%;
            margin-bottom: -60px;
        }

        .placeholder,
        footer {
            height: 60px;
        }

        footer {
            background-color: lightslategray;
        }
    </style>
</head>

<body>
    <div id="wrapper">
        <h1 class="title"><span>The Complete Guide to</span> <br>CSS Flexbox</h1>

        <div id="container">
            <div class="item1">1</div>
            <div class="item2">2</div>
            <div class="item3">3</div>
        </div>
        <div class="placeholder"></div>
    </div>

    <footer>
        <span class="copyright">Posted by: Clarence</span>
        <p class="info">
            <span id="email">email: xxxxxx</span>
            <span id="website">website: <a>xxxxxx</a></span>
        </p>
    </footer>
</body>

</html>

  1. 高度超过窗口高度原因?
  2. 为什么文章中第一种方法需要div.placeholder占位符,不需要可以吗?
阅读 2.8k
3 个回答

第一个问题:

浏览器的部分元素是带有 默认样式 的,清除掉即可

* {
    margin: 0;
    padding: 0;
}

第二个问题:

首先题主给出的链接中似乎没有 div.placeholder,如果是指原文的 div.push,那就涉及到 文档流

通常情况下,文档流中的元素会根据其内容自动撑开父容器的高度。但是,当我们将 margin-bottom 设置为负值时,这个元素实际上超出了其正常的布局边界,并且不再影响父容器的高度计算

它还有个广为人知的名字: BFC (块级格式化上下文)

BFC 是 CSS 中的一种渲染机制,它会影响元素在布局中的表现和相邻元素之间的交互。当一个元素触发 BFC 时,它会创建一个 独立 的渲染环境,并遵循一些特定规则进行布局,最常见的例子就是 绝对定位

如果只是简单地将 footermargin-bottom 设置为负数,在没有其他调整的情况下,它可能会 重叠或覆盖 页面上其他内容。

因此需要一个 同高 的占位 div 来代替被 footer 所占用的空间

h1 {
     margin-top: 0;
}

需要重置一下元素的默认样式

*{margin: 0; padding: 0}

你增加一下这个就行了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏