css – 位置:固定左/上/右/底没有指定 – 所需的结果在FF/IE,但不是在Safari

前端之家收集整理的这篇文章主要介绍了css – 位置:固定左/上/右/底没有指定 – 所需的结果在FF/IE,但不是在Safari前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对不起,要问另一个立场:固定相关问题,但阅读各种其他问题和论坛线程没有帮助我这个。

下面的代码是简单的演示我如何使用position:在项目中固定到目前为止。我的原始(误)理解的位置:固定的是它最初固定相对于第一个定位的父容器,然后保持在该位置,无论视口滚动位置如何。我现在意识到这是错误的:实际上,位置:相对于最外面的容器(即html标签)的固定位置和位置:相对于具有非静态位置的第一父容器的绝对位置。

阅读关于SO的各种其他问题,我意识到,我试图实现使用position:fixed的效果是许多其他人尝试过的,但是后来实现是不可能的只是CSS:也就是说,定位一个元素相对到一个容器,但是当页面被滚动时,它保持在相对于视口的位置。

令我感到困惑的是,上述是我似乎已经实现的 – 至少在FF和IE8上。通过下面的代码示例,“固定右窗格内容”最初位于红色“中心可滚动内容”框的右侧,并且与中心内容的顶部垂直平移。可以滚动中心内容,但右侧内容保持原样,就好像它最初在正常文档流中静态定位,然后保持固定在视口上。

我现在意识到,这似乎是IE8和FF中的“工作”,因为我没有为固定元素指定顶/底/左/右属性。如果我这样做,我意识到固定的元素立即相对于视口定位。

直到现在,我已经假设 – 如果没有指定相对位置,那么位置:固定将默认放置在通常静态放置的元素。至少FF和IE8似乎正在做。

然而,在Safari中进行测试显示,Safari似乎将该固定元素放置在其容器的左侧。换句话说,没有定位,我的位置:固定元素既不是静态放置的位置,也不位于相对于视口的0,0。

到目前为止,我一直依靠非常不明确的行为,我最好是诉诸一个JavaScript解决方案来实现这个固定的定位?或者,这个行为是为IE / FF定义好的;有人可以解释Safari的放置背后的逻辑吗?

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2.  
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4.  
  5. <head>
  6.  
  7. <style type="text/css">
  8.  
  9. #content-centre {
  10. margin: 0 auto;
  11. width:900px;
  12. }
  13.  
  14. #header {
  15. height: 55px;
  16. position: fixed;
  17. top: 0;
  18. width: 990px;
  19. }
  20.  
  21. #left-pane {
  22. position: fixed;
  23. top: 12px;
  24. border: 1px green solid;
  25. }
  26.  
  27. #main-pane {
  28. left: 200px;
  29. position: relative;
  30. top: 66px;
  31. width: 760px;
  32. border: 1px yellow solid;
  33. }
  34.  
  35. #container-1 {
  36. border-top: 1px solid #FFFFFF;
  37. float: right;
  38. min-width: 130px;
  39. padding-left: 20px;
  40. border: 1px blue solid;
  41. }
  42.  
  43. #container-0 {
  44. margin-right: 20px;
  45. min-height: 470px;
  46. overflow: auto;
  47. padding: 10px 0;
  48. position: relative;
  49. border:1px red solid;
  50. }
  51.  
  52. .side-info-list-fixer {
  53. position: fixed;
  54. }
  55.  
  56.  
  57. </style>
  58.  
  59. </head>
  60.  
  61. <body>
  62.  
  63. <div id="content-centre">
  64.  
  65. <div id="header">
  66. </div>
  67.  
  68. <div id="left-pane">
  69. Fixed left pane content
  70. </div>
  71.  
  72.  
  73. <div id="main-pane">
  74. <div id="page-module-containers">
  75.  
  76. <div id="container-1">
  77. <div class="side-info-list-fixer"> Fixed right pane content </div>
  78. </div>
  79.  
  80. <div id="container-0">
  81. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  82. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  83. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  84. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  85. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  86. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  87. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  88. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  89. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  90. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  91. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  92. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  93. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  94. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  95. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  96. <p>Centre scrollable content</p><p>Centre scrollable content</p>
  97. </div>
  98.  
  99. </div>
  100. </div>
  101.  
  102. </div>
  103.  
  104. </body>
  105. </html>

解决方法

我相信你正在寻找的答案如下:

元素的位置并不默认为0,0。
它的位置默认设置为包含元素,因此在您的示例中,“#container-1”具有一个padding-left:20px,而其余的填充设置为0,使得元素的“default”位置为20px #container-1的墙壁左侧,顶部是#container-1顶端的0px。

默认情况下,此元素的默认位置和我的视口未滚动将是顶部63像素,左边显然取决于浏览器的宽度。但是,如果不覆盖顶部和左侧,则它们已经由渲染引擎定义为顶部:63px,left:893px。

然后在窗口调整大小时,调整该位置以反映基于视口的位置,以便您向下滚动,更改位置以保持固定。

所以,通过简单地添加“position:fixed”您的属性将(就浏览器而言)
如下:

  1. position:fixed;
  2. top:63px; // defined by default during browser rendering in some browsers (based on scroll position on load)
  3. left:893px; // defined by default during browser rendering in some browsers (based on scroll position / width of browser at time of load)

此外,IE6和喜欢,不支持的位置:固定。
http://fiddle.jshell.net/uaE4g/4/show/

我希望这有帮助!

猜你在找的CSS相关文章