热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

位置:固定元素位置:相对父级.哪个浏览器呈现正确?

如何解决《位置:固定元素位置:相对父级.哪个浏览器呈现正确?》经验,为你挑选了1个好方法。

我看到固定位置元素在相对定位的父级中的行为方式存在差异.根据我在网上找到的文档,FireFox和Chrome应该将元素固定到视口而不是父视图.但是,我发现如果我没有在固定元素上指定左/右值,它在静态和固定之间的某种混合行为,在某种意义上它是垂直固定到视口,但移动就好像它是父元素中的静态元素.我找不到围绕这些条件的任何官方/受尊敬的文件.它们基本上都表示如下内容:

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

资源

另一方面,Safari似乎渲染它,因为它被描述为纯粹固定到视口的地方,无论我是否将父元素设置为相对而没有定义任何顶部/右侧/底部/左侧属性.如果你有机会通过点击从左边-100像素的青色div来尝试在Safari中试试.黄色条将固定在视口中:

http://jsfiddle.net/bbL8Lh4r/2/

那么哪个浏览器正确呈现这个?我的所有浏览器都已更新到最新版本.起初我认为Safari只是通过阅读文档才是正确的,但FireFox和Chrome都有着相同的不同视图,它们似乎是静态和固定之间的混合体.


HTML

    

    

CSS

body,
aside,
.container,
.nav {
    margin:0;
    padding:0;
}

aside {
    background:red;
    width:30%;
    height:800px;
    float:left;
}

.container {
    position:relative;
    height:800px;
    width:70%;
    background:teal;
    float:right;
}

.container.stickied {
    left:-100px;
}

.container .nav {
    position:fixed;
    background:yellow;
    width:inherit;
}

TylerH.. 13

这似乎是一个有趣的案例.让我们深入了解规范,了解正在发生的事情.


TL; DR: W3规范在这个领域非常模糊/未定义,但似乎所有浏览器都偏离规范,或者至少,他们做出了未定义细节的决定.然而,四个主要的浏览器(Firefox,Chrome,IE和Opera)是统一的,因为它们似乎都以同样的方式偏离了规范.Safari绝对是这里的奇怪人物.


这就是CSS2.1规范在第9章中所说的:视觉格式化模型:

    9.1.2包含块 -在CSS 2.1中,许多盒位置和大小是相对于称为包含块的矩形框的边缘计算的.通常,生成的框用作包含后代框的块; 我们说一个盒子"建立"其后代的包含块.短语"一个包含块的块"意味着"盒子所在的包含块",而不是它生成的那个块.

这只是定义了包含块的内容.

    9.3定位方案 -绝对定位:在绝对定位模型中,完全从正常流中移除一个框,并为相应的包含块指定一个位置.

这表示绝对定位的元素相对于包含块定位.

    9.6绝对定位 -在绝对定位模型中,框相对于其包含块明确偏移.[...]本规范中对绝对定位元素(或其框)的引用意味着元素的position属性具有值absolutefixed.

这表示绝对定位的元素包括position:fixed;元素和position: absolute;元素.

    9.6.1固定定位 -固定定位是绝对定位的子类别.唯一的区别是对于固定位置框,包含块由视口建立.

并且这表示position: fixed;元素具有视口(嗯,不是字面上的视口,而是具有与视口相同的尺寸和位置的框)作为其包含框.稍后将通过10.1包含块的定义来备份:

如果元素具有'position:fixed',则包含块由视口[...]建立

(如果您不熟悉视口的内容,则它是"用户查阅文档的屏幕上的窗口或其他查看区域".视口的尺寸是初始包含块的基础.整个HTML content(,等)驻留在视口定义的初始包含块中.)

因此,应用于它的