Html 位置:固定在位置:固定:哪个浏览器正确?

Html 位置:固定在位置:固定:哪个浏览器正确?,html,css,css-position,Html,Css,Css Position,在Chrome/Safari和Firefox中,将一个固定元素放置在另一个固定元素中的行为是不同的 对于相对div中的固定div,在此基础上: 固定定位不要为元素留出空间。相反,将其放置在相对于屏幕视口的指定位置,滚动时不要移动它。打印时,将其放置在每页的固定位置 我不理解的是Firefox在固定div中使用固定div做了什么。我期望的是子元素在悬停时随包装器一起移动 .wrapper、.header{ 位置:固定; 宽度:320px; } .包装器:悬停{ 左:0px; } .包装纸{ 宽度

在Chrome/Safari和Firefox中,将一个固定元素放置在另一个固定元素中的行为是不同的

对于相对div中的固定div,在此基础上:

固定定位不要为元素留出空间。相反,将其放置在相对于屏幕视口的指定位置,滚动时不要移动它。打印时,将其放置在每页的固定位置

我不理解的是Firefox在固定div中使用固定div做了什么。我期望的是子元素在悬停时随包装器一起移动

.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{