【发布时间】:2015-12-13 15:13:37
【问题描述】:
我遇到了困难:我有一个不知道大小的父元素。而且我有一个必须永久放置在主体顶部的项目,然后是position: fixed,但我不能因为给它width: 100%,是主体的100%,但我想要100%的父元素.我该怎么办?
【问题讨论】:
我遇到了困难:我有一个不知道大小的父元素。而且我有一个必须永久放置在主体顶部的项目,然后是position: fixed,但我不能因为给它width: 100%,是主体的100%,但我想要100%的父元素.我该怎么办?
【问题讨论】:
将.fixed 的宽度设置为width: inherit; 不要使用100%
body {
padding: 0;
margin: 0 auto;
}
.container {
position: relative;
width: 70%;
height: 1000px;
background: red;
}
.fixed {
position: fixed;
width: inherit; /*change here*/
line-height: 50px;
background: blue;
color: #f0f0f0;
text-align: center;
font-size: 20px;
}
<div class="container">
<div class="fixed">Navbar Fixed</div>
</div>
【讨论】:
.container 位于 .super-container 中且 width 与 100% 不同,则它不会起作用。
问题在于,与绝对定位元素不同,固定定位元素的包含块通常是视口,而不是它最近的定位元素。然后,width: 100% 根据视口宽度解析。
有一些方法可以改变这种行为,例如带有transform 的元素为其固定定位的后代建立一个包含块。但是你的元素不会固定在视口的顶部。
相反,您应该使用粘性定位:
.fixed {
position: sticky;
top: 0;
}
body {
padding: 0;
margin: 0 auto;
}
.container {
width: 70%;
height: 1000px;
background: red;
}
.fixed {
position: sticky;
top: 0;
line-height: 50px;
background: blue;
color: #f0f0f0;
text-align: center;
font-size: 20px;
}
<div class="container">
<div class="fixed">Navbar Fixed</div>
</div>
请注意,它尚未得到广泛支持。
【讨论】:
将transform: translate3d(0, 0, 0); 设置为父级。
【讨论】:
.container { -webkit-transform: translate3d(0, 0, 0); -o-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); }(显然格式正确)以及为什么你说它有效的解释将是加分:)