我创建了codepens,它展示了元素定位方面令人困惑的行为
First Codepen显示一个块元素,其位置为:absolute和bottom:10px
<div class="block_element square absolute">
Example
</div>
<div class="content">
<!-- a bunch of lorem ipsum -->
</div>
此绝对定位显示正确的行为,并从屏幕底部向上10px位置
Second Codepen有javascript,它抓取html元素的高度并将其显示在高度为5000px的div中
var o = document.getElementsByTagName("html")[0];
var styles = window.getComputedStyle(o);
var p = styles.getPropertyValue('height');
document.getElementById('answer').innerHTML = p;
html元素的高度显示为高于屏幕高度的高度,这违背了html高度和宽度等于屏幕大小的常见信念。如见过Here
“html元素的高度和宽度由浏览器窗口控制” (来自上面的链接)
为什么html元素高度不等于屏幕高度?如果是这样,那么什么是位置:绝对引用?
答案 0 :(得分:3)
Absolutely positioned元素相对于其包含块进行了偏移。
在绝对定位模型中,框相对于其包含块显式偏移。
对于他们来说,containing block是
如果元素具有'position:absolute',则包含块为 由最近的祖先建立
position
absolute
,relative
或fixed
,方式如下:
- 在祖先是内联元素的情况下,包含块是第一个和第二个填充框周围的边界框。 为该元素生成的最后一个内联框。在CSS 2.1中,如果是 内联元素分为多行,包含块为 未定义。
- 否则,包含块由祖先的padding edge形成。
醇>如果没有这样的祖先,则包含块是初始值 包含块。
在你的情况下,没有定位的祖先,所以包含的块是the initial one:
root element所在的包含块是一个矩形 称为初始包含块。对于连续媒体,它有 viewport的尺寸并锚定在画布原点;它是 分页媒体的page area。
不,默认情况下,根元素的高度由其内容给出,它不是视口的高度。但你可以用
实现这一目标html { height: 100%; }
答案 1 :(得分:0)
在第二支笔中,高度TIMESTAMP
表示5028px
+ 5000px
(填充)+ 10px
(边框)+ 默认值<的总和2px的{{1}}。
尝试添加以下行:
padding
并对body
和body { margin: 0; }
发表评论并删除padding
的默认边距,并在this fork of your pen中显示border
。
答案 2 :(得分:0)
5000px(display: inline-block;
高度)+ 8px(.box
上边距)+ 8px(body
下边距)+ 5px(body
顶部填充)+ 5px({{ 1}}底部填充)+ 1px(.box
顶部边框)+ 1px(.box
底部边框)= 5028px。