请使用chrome
浏览器敲打例子代码!
长久以来,我和部分同学对css中position:fixed的理解是该元素相对屏幕视口的定位
。然而并不是,以下摘要自[MDN](
https://developer.mozilla.org...:
position:fixed
不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时,元素会出现在的每页的固定位置。fixed
属性会创建新的层叠上下文。当元素祖先的 <span style="color: #f00;">transform 属性非
none</span> 时,容器由视口改为该祖先。
什么意思呢?我们用例子来表示。
下面的例子是元素相对body的定位:
<div class="parent">
<div class="son">
我是fixed元素
</div>
<div class="other">
我是其他元素
</div>
</div>
body {
height: 2000px;
}
.son {
position: fixed;
left: 100px;
top: 100px;
width: 100px;
height: 100px;
background: #f00;
}
.other {
height: 1000px;
}
这个例子里,body的滚动条滚动后,son元素的位置都是相对屏幕视口的位置。根据MDN的说明,改下代码的css部分添加parent元素样式:
.parent {
margin-top: 100px;
height: 500px;
overflow-y: auto;
background: #ff0;
transform: translate(0,0);
}
这个时候,会发现滚动body的滚动条的时候,son元素跟着parent一起走了。然而,滚动parent的滚动条,son元素并没有按照想象中那样固定在parent容器的一个位置上,而是表现为absolute
的效果。(这样就不能做我们心爱的吸顶效果了)。
整个例子下来,就总结出一句:这不是蛋疼吗?既然fixed在transform里变成了absolute的行为,为毛transform还要去影响fixed呢?
引用:
https://developer.mozilla.org...
http://www.zhangxinxu.com/wor...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。