Css 为什么Firefox18使用-moz转换呈现元素与Firefox17不同?
我有一些HTML/CSS可以在Firefox17中正常工作,但升级到Firefox18后,它就不再像我预期的那样工作了。我不确定我的CSS是否做错了什么(这是完全可能的,因为我是新手),或者Firefox18中是否引入了一个bug 以下HTML文件复制了该问题:Css 为什么Firefox18使用-moz转换呈现元素与Firefox17不同?,css,firefox,css-transforms,Css,Firefox,Css Transforms,我有一些HTML/CSS可以在Firefox17中正常工作,但升级到Firefox18后,它就不再像我预期的那样工作了。我不确定我的CSS是否做错了什么(这是完全可能的,因为我是新手),或者Firefox18中是否引入了一个bug 以下HTML文件复制了该问题: <html><head> <title>Transform test</title> <style> div.overlay {
<html><head>
<title>Transform test</title>
<style>
div.overlay {
background-color: rgba(230, 230, 230, 0.8);
bottom: 0;
left: 0;
position: fixed;
right: 0;
top: 0;
}
div.overlay.transparent {
background-color: transparent;
}
div.overlayFrame {
background-color: white;
border: 1px solid gray;
overflow: hidden;
position: absolute;
}
div.overlayFrame0 {
bottom: 50px;
left: 50px;
right: 50px;
top: 50px;
}
div.overlayFrame1 {
bottom: 45px;
left: 55px;
right: 45px;
top: 55px;
}
</style>
</head>
<body>
<div class="overlay">
<div style="-moz-transform: scale(1, 1);" class="overlayFrame overlayFrame1">
<div class="overlay transparent">
<div style="-moz-transform: scale(1, 1);" class="overlayFrame overlayFrame0">
</div>
</div>
</div>
</div>
</body></html>
变换测试
分区覆盖{
背景色:rgba(230,230,230,0.8);
底部:0;
左:0;
位置:固定;
右:0;
排名:0;
}
div.overlay.transparent{
背景色:透明;
}
分区覆盖框架{
背景色:白色;
边框:1px纯色灰色;
溢出:隐藏;
位置:绝对位置;
}
div.overlayFrame0{
底部:50px;
左:50px;
右:50px;
顶部:50px;
}
分区覆盖框架1{
底部:45px;
左:55px;
右:45px;
顶部:55px;
}
在Firefox 17中,这会产生叠加在彼此顶部的div偏移5px,但在Firefox 18中,顶部div偏移更多。奇怪的是,Firebug认为放错位置的top div仍然在正确的位置,因为如果在HTML树查看器中选择该div,它会在Firefox 17显示该div的同一位置为该div绘制高亮显示
我已经对此进行了调试,确定如果从外部overlayFrame div中删除“style”属性,则顶部overlayFrame div将显示在“正确”位置
这是Firefox18中的bug还是我正在做的事情中的bug?谢谢。这个问题与定位上下文有关。这似乎是由于将
position:fixed
div嵌套在具有position:absolute
的div中,反之亦然。执行此操作时,溢出:隐藏设置了code>,则固定的div定位基于整个窗口(理论上应该是这样的)。但是,当溢出时:可见如果设置了“代码>”,则其定位将基于绝对定位的父级。注意当设置溢出值时,Firefox中的行为是如何变化的
解决方案是不嵌套“纸”背景div;让第二个跟在第一个后面,两个都自己放。示例[]:
变换测试
分区覆盖{
背景色:rgba(230,230,230,0.8);
底部:0;
左:0;
位置:固定;
右:0;
排名:0;
}
分区覆盖框架{
背景色:白色;
边框:1px纯色灰色;
溢出:隐藏;
位置:绝对位置;
}
div.overlayFrame0{
底部:50px;
左:50px;
右:50px;
顶部:50px;
}
分区覆盖框架1{
底部:45px;
左:55px;
右:45px;
顶部:55px;
}
纸张
这个测试用例很有可能是这样的。听起来有点合理,但是如果我从外部覆盖框架中删除-moz转换,为什么它会“修复”呢?我想我不明白你所说的与-moz转换有什么关系?我还应该补充一点,我最初试图做一些类似于你为我的覆盖层建议的事情,但最终遇到了一个不同的问题。这些覆盖用于创建一种堆叠上下文。当我像你建议的那样分别处理它们时,我遇到了一个问题,即它们不再处于正确的z顺序堆叠上下文中(显然,透明度在创建堆叠上下文中起着作用,并且我的覆盖层不是完全不透明的)。为了解决这个问题,我将覆盖层移到更靠近我正在“覆盖”的元素的位置。我的例子显然简化了。是的,这似乎确实相关。谢谢你指出这一点。
<html><head>
<title>Transform test</title>
<style>
div.overlay {
background-color: rgba(230, 230, 230, 0.8);
bottom: 0;
left: 0;
position: fixed;
right: 0;
top: 0;
}
div.overlayFrame {
background-color: white;
border: 1px solid gray;
overflow: hidden;
position: absolute;
}
div.overlayFrame0 {
bottom: 50px;
left: 50px;
right: 50px;
top: 50px;
}
div.overlayFrame1 {
bottom: 45px;
left: 55px;
right: 45px;
top: 55px;
}
</style>
</head>
<body>
<div class="overlay"></div>
<div style="-moz-transform: scale(1, 1);" class="overlayFrame overlayFrame1"></div>
<div style="-moz-transform: scale(1, 1);" class="overlayFrame overlayFrame0">
Paper!
</div>
</body></html>