Html 位置:固定在位置:固定:哪个浏览器正确?
在Chrome/Safari和Firefox中,将一个固定元素放置在另一个固定元素中的行为是不同的 对于相对div中的固定div,在此基础上: 固定定位不要为元素留出空间。相反,将其放置在相对于屏幕视口的指定位置,滚动时不要移动它。打印时,将其放置在每页的固定位置 我不理解的是Firefox在固定div中使用固定div做了什么。我期望的是子元素在悬停时随包装器一起移动Html 位置:固定在位置:固定:哪个浏览器正确?,html,css,css-position,Html,Css,Css Position,在Chrome/Safari和Firefox中,将一个固定元素放置在另一个固定元素中的行为是不同的 对于相对div中的固定div,在此基础上: 固定定位不要为元素留出空间。相反,将其放置在相对于屏幕视口的指定位置,滚动时不要移动它。打印时,将其放置在每页的固定位置 我不理解的是Firefox在固定div中使用固定div做了什么。我期望的是子元素在悬停时随包装器一起移动 .wrapper、.header{ 位置:固定; 宽度:320px; } .包装器:悬停{ 左:0px; } .包装纸{ 宽度
.wrapper、.header{
位置:固定;
宽度:320px;
}
.包装器:悬停{
左:0px;
}
.包装纸{
宽度:320px;
身高:100%;
背景:白色;
溢出:滚动;
左:-200px;
过渡:全部放松;
}
保险商实验室{
边缘顶部:120px;
}
.标题{
背景:rgba(255255,0.9);
}
身体{
背景:灰色;
我是一位杰出的建筑设计师。我是一位杰出的建筑设计师。我是一位杰出的建筑设计师。我是一位杰出的建筑设计师!
-
同一种知识,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种暂时的美德,是一种美德,是一种美德,是一种美德,是一种美德!
-
同一种知识,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种暂时的美德,是一种美德,是一种美德,是一种美德,是一种美德!
-
同一种知识,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种暂时的美德,是一种美德,是一种美德,是一种美德,是一种美德!
-
同一种知识,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种暂时的美德,是一种美德,是一种美德,是一种美德,是一种美德!
要查看所需行为的两种变通方法,请在水平规则下方向下滚动。
2016年11月18日更新-CSSWG回复我说,它应该创建一个新的堆叠上下文:
关于哪个浏览器是正确的主题:
fixed
位置元素应始终相对于视口放置,特别是位置:fixed
元素的包含块在10.1.3中建立:
如果元素具有“位置:固定”,则包含的块由视口[…]建立
该包含块正式称为“初始包含块”
也可以说,对于普通的无页面媒体(如下图所示)
[…]对于手持、投影、屏幕、tty和电视媒体类型,框相对于视口是固定的,滚动时不会移动
代码中发生的情况是,您正在更改悬停时父元素的left
属性的值,并且您希望子元素也移动。但是,子元素(正确地)没有移动
说
为了计算静态位置,固定位置元素的包含块是初始包含块,而不是视口
(此处的静态位置是指元件在正常流量下的位置)
它还说:
[如果]“左”和“右”是“自动”而“宽度”不是“自动”,则[…]将“左”设置为静态位置,否则将“右”设置为静态位置。然后求解“左”(如果“方向”是“rtl”)或“右”(如果“方向”是“ltr”)
我认为,这解释了为什么子位置:固定元素最初设置为左:-200px;
每,如果它是位置:静态,它将位于其父元素内
在这一点上,您似乎认为父元素的新left
值应该移动子元素,我假设,这是因为您希望新的left
属性由子元素继承(这不是left
的工作方式),或者您希望它在:hover
上重新绘制文档,我记得这不会发生;浏览器只在:hover
上重新绘制,这不会更改文档流,但会更改元素的外观(例如背景色
,不透明度
,可见性:隐藏;
等)
因此,重新绘制时的元素不应该移动,除非有伪选择器在临时状态(如:hover
)期间更改属性,或者在播放时有过渡/动画
在这种情况下,Chrome和Safari似乎做了一些与规范建议不同的事情;它们要么导致了完全的重新流动,要么它们设置了位置:fixed
元素从祖先那里继承left
属性。根据Oriol belo的链接,如果你愿意的话,这似乎是高在上的w、 但是,在更新规范之前,它仍然是非标准行为
- 长话短说,Chrome和Safari现在是错误的,但最终一旦规范更新,它们将是正确的,Firefox将不得不更新其渲染行为
让.header
div继承您新的left
属性,因为Chrome就是这样做的,这就是您所寻求的行为。我还稍微调整了.header
的宽度,这样它就不会覆盖.wrapper
上的滚动条了:
.wrapper、.header{