【问题标题】:height: 100% or min-height: 100% for html and body elements?height: 100% 或 min-height: 100% 用于 html 和 body 元素?
【发布时间】:2013-07-07 11:59:46
【问题描述】:

在设计布局时,我将html, body 元素的height 设置为100%,但在某些情况下,这会失败,那么应该使用什么?

html, body {
   height: 100%;
}

html, body {
   min-height: 100%;
}

好吧,这不是基于意见的,因为每种方法都有自己的缺陷,那么推荐的方法是什么?为什么?

【问题讨论】:

    标签: html css


    【解决方案1】:

    您可以使用视口高度(vh)单位:

    body {
        min-height: 100vh;
    }
    

    它是相对于屏幕的,而不是相对于父高度的,所以你不需要 html height: 100%。

    【讨论】:

    • 这有什么额外的好处。
    • 没有额外的优势,只是解决问题的另一种方式。
    • 注意移动设备如何理解这一点
    • 请注意,并非所有浏览器都支持此单元...请先检查浏览器兼容性:caniuse.com/#feat=viewport-units
    • 警告:视口相关单位不考虑滚动条尺寸。如果页面宽度溢出,您的内容底部可能会出现额外的几个像素的空白。
    【解决方案2】:

    如果您尝试将背景图像应用到填满整个浏览器窗口的htmlbody,也不行。改用这个:

    html {
       height: 100%;
    }
    
    body {
       min-height: 100%;
    }
    

    here 给出了我的推理(我在这里全面解释了如何以这种方式应用背景):

    顺便说一句,您必须将heightmin-height 分别指定为htmlbody 的原因是因为这两个元素都没有任何固有高度。默认情况下,两者都是height: auto。它是具有 100% 高度的视口,因此 height: 100% 取自视口,然后至少应用于 body 以允许滚动内容。

    第一种方法,在两者上都使用height: 100%,可以防止body 在其内容开始超出视口高度时随其内容一起扩展。从技术上讲,这不会阻止内容滚动,但它确实会导致body 在折叠下方留下空隙,这通常是不可取的。

    第二种方式,在两者上都使用min-height: 100%,不会导致body扩展到html的完整高度,因为带有百分比的min-heightbody上不起作用,除非html有一个明确的height

    为了完整起见,section 10 of CSS2.1 包含所有详细信息,但这是一个非常令人费解的阅读,因此如果您对我在此处解释的内容不感兴趣,可以跳过它.

    【讨论】:

    • 这是我最喜欢的 :) height: 100% is taken from the viewport, then applied to body as a minimum to allow for scrolling of contenteasy peasy 解决方案...谢谢 //
    • 我想知道,滚动条是如何神奇地出现的? html 元素默认具有 overflow:visible,所以我假设滚动条是由于浏览器行为而出现的,以允许显示文档的整个正常流程。
    • @Fabrício Matté:它在视口上转换为overflow: auto,这是滚动条的来源。第 11 节对此进行了介绍:w3.org/TR/CSS21/visufx.html
    • @BoltClock 知道如何让孩子 100% 的身体 herethis 虽然有效
    • box-sizing:border-box 不影响边距。填充,是的,但这取决于个人喜好。
    猜你喜欢
    • 1970-01-01
    • 2020-10-12
    • 2011-05-27
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    相关资源
    最近更新 更多