仅使用 css 修复内部 div [重复]

Posted

技术标签:

【中文标题】仅使用 css 修复内部 div [重复]【英文标题】:Make inner div fixed using only css [duplicate] 【发布时间】:2016-09-02 09:17:43 【问题描述】:

我正在尝试使内部 div 相对于它的父 div 固定。我在jsfiddle 上做了一个我的代码示例。问题是当你滚动 div 时。它不再在它的位置上。我的 html 看起来像:

 <div class="outer">
   <div class="inner1">
     Lorem ipsum dolor
   </div>
   <div class="inner2">

   </div>

</div>

和css

    .outer
  position: relative;
  width: 400px;
  height: 300px;
  border: 1px solid black;
  overflow: auto;


.inner1
  position: absolute;
  width:50px;
  height: auto;
  border: 1px solid blue;
  top: 10px;
  right: 10px;

.inner2
  width: 500px;
  height: 500px;

有没有办法让inner1 相对于outer 仅使用css 固定?

【问题讨论】:

“CSS 规范要求position:fixed 锚定到viewport,而不是包含定位元素。” 参考this 答案.. fixed 与父级无关!它总是停留在给定的位置! 我知道不是!我只想让 inner1 即使在你滚动时也保持在它的位置上......我知道其中一个解决方案是在 JS 中计算偏移量并使用 position: fixed.. 但我的问题是,如果你只能使用 css 来做到这一点 【参考方案1】:

试试这个...

 <style>
.outer
  position: relative;
  width: 400px;
  height: 300px;
  border: 1px solid black;
  overflow: auto;


.inner1
  position: fixed;
  width:50px;
  height: auto;
  border: 1px solid blue;


.inner2
  width: 500px;
  height: 500px;

</style>

【讨论】:

【参考方案2】:

你可以试试这个:

.inner1 
        position: fixed;
        width: 50px;
        height: auto;
        border: 1px solid blue;
        top: 10px;
        right: calc(100% - 400px); // 400px is the outer div's width
    

【讨论】:

【参考方案3】:

这里正在工作JSfiddle

<div class="container">
<div class="header">title</div>
<div class="cont_elements">
    <div class="element">......</div>
    <div class="element">......</div>
    <div class="element">......</div>
</div>

和 css 将是

.header 
    position: absolute;
    top:0;
    /* scrolling out of view :-( */
    z-index:2;
    background-color:pink;

.container 
    position:relative;
    width:200px;
    height:400px;
    background:gold;

.cont_elements overflow-y:scroll; height:100%;
.element 
    position: relative;

【讨论】:

【参考方案4】:

只需更改 .inner1

.inner1
    position: fixed;
    width:50px;
    height: auto;
    border: 1px solid blue;
    margin-top: 10px;
    left: 330px;

【讨论】:

以上是关于仅使用 css 修复内部 div [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用javascript / css修复表头[重复]

CSS IE6空Div添加保证金 - 修复

css 在演示导入器中修复内部切换。

修复了滚动 div 内的 div

使用 CSS/Angular JS 修复列和标题

CSS 在IE中修复li背景重复错误