【问题标题】:CSS child with position: fixed not respecting parent layout具有位置的 CSS 子项:固定不尊重父布局
【发布时间】:2017-10-17 20:37:46
【问题描述】:

如果定位的父元素(position: relativeposition: absolute)有一个带有position: absolute 的子元素,则子元素将绝对定位在定位的父元素内。

带有position: sticky 的子元素的行为方式相同 - 子元素将在已定位的父元素内固定定位。

但是带有position: fixed 的子元素不会在定位的父元素中占据固定位置。

说明性示例:

.panel {
display: inline-block;
position: relative;
width: 240px;
height: 180px;
margin-right: 6px;
overflow-x: hidden;
overflow-y: auto;
}

header, footer {
display: block;
position: fixed;
left: 0;
width: 240px;
height: 24px;
background-color: rgb(255, 0, 0);
}

header {
top: 0;
}

footer {
bottom: 0;
}

.panel + .panel header,
.panel + .panel footer {
position: sticky;
}

header code {
padding-left: 6px;
font-weight: bold;
color: rgb(255, 255, 255);
}
<div class="panel">
<header><code>position: fixed</code></header>

<p>Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, `and what is the use of a book,' thought Alice `without pictures or conversation?'</p>

<p>So she was considering in her own mind (as well as she could, for the hot day made her feel very sleepy and stupid), whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her.</p>

<p>There was nothing so very remarkable in that; nor did Alice think it so very much out of the way to hear the Rabbit say to itself, `Oh dear! Oh dear! I shall be late!' (when she thought it over afterwards, it occurred to her that she ought to have wondered at this, but at the time it all seemed quite natural); but when the Rabbit actually took a watch out of its waistcoat-pocket, and looked at it, and then hurried on, Alice started to her feet, for it flashed across her mind that she had never before seen a rabbit with either a waistcoat-pocket, or a watch to take out of it, and burning with curiosity, she ran across the field after it, and fortunately was just in time to see it pop down a large rabbit-hole under the hedge.</p>

<footer></footer>
</div>

<div class="panel">
<header><code>position: sticky</code></header>

<p>Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, `and what is the use of a book,' thought Alice `without pictures or conversation?'</p>

<p>So she was considering in her own mind (as well as she could, for the hot day made her feel very sleepy and stupid), whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her.</p>

<p>There was nothing so very remarkable in that; nor did Alice think it so very much out of the way to hear the Rabbit say to itself, `Oh dear! Oh dear! I shall be late!' (when she thought it over afterwards, it occurred to her that she ought to have wondered at this, but at the time it all seemed quite natural); but when the Rabbit actually took a watch out of its waistcoat-pocket, and looked at it, and then hurried on, Alice started to her feet, for it flashed across her mind that she had never before seen a rabbit with either a waistcoat-pocket, or a watch to take out of it, and burning with curiosity, she ran across the field after it, and fortunately was just in time to see it pop down a large rabbit-hole under the hedge.</p>

<footer></footer>
</div>

javascript是解决这个问题的唯一方法吗?

或者是否有一种 CSS 方法可以使具有position: fixed 的子元素在其定位的父元素中占据固定位置?

【问题讨论】:

  • 我告诉你,孩子们(position: fixed)在我那个年代很尊重他们的父母(布局) ;)
  • 如果只是。事实上,这种孩子从来没有尊重过他们的父母。我想知道 - 在这个 position: sticky 的新时代 - 如果上述孩子现在有了他们以前缺乏的新的尊重......但似乎没有。
  • 该死的千禧一代——我们必须依靠下一代。

标签: css css-position


【解决方案1】:

根据specs,固定位置始终相对于视口。所以这是一个功能。

【讨论】:

  • 谢谢。我知道曾经是这种情况,但我不知道它仍然没有更新。那么......是否仍然没有 CSS 方法来“修复”可滚动定位的父元素中的子元素?
【解决方案2】:

这是一种 javascript 方法,它使页眉和页脚能够采用相对于可滚动父级的假固定位置

工作示例:

var panel = document.getElementsByClassName('panel')[0];
var panelHeader = panel.getElementsByTagName('header')[0];
var panelFooter = panel.getElementsByTagName('footer')[0];

function fixElements() {
    var panelHeight = panel.clientHeight;
    var panelFooterHeight = panelFooter.clientHeight;

    panelHeader.style.top = panel.scrollTop + 'px';
    panelFooter.style.top = panel.scrollTop + panelHeight - panelFooterHeight + 'px';
}

panel.addEventListener('scroll', fixElements, false);
.panel {
display: inline-block;
position: relative;
width: 240px;
height: 180px;
overflow-x: hidden;
overflow-y: auto;
}

header, footer {
display: block;
position: absolute;
left: 0;
width: 240px;
height: 24px;
background-color: rgb(255, 0, 0);
}

header {
top: 0;
}

footer {
top: 156px;
}

header code {
padding-left: 6px;
font-weight: bold;
color: rgb(255, 255, 255);
}

.panel p:first-of-type {
padding-top: 12px;
}

.panel p:last-of-type {
padding-bottom: 12px;
}
<div class="panel">
<header><code>position: faux-fixed</code></header>

<p>Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, `and what is the use of a book,' thought Alice `without pictures or conversation?'</p>

<p>So she was considering in her own mind (as well as she could, for the hot day made her feel very sleepy and stupid), whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her.</p>

<p>There was nothing so very remarkable in that; nor did Alice think it so very much out of the way to hear the Rabbit say to itself, `Oh dear! Oh dear! I shall be late!' (when she thought it over afterwards, it occurred to her that she ought to have wondered at this, but at the time it all seemed quite natural); but when the Rabbit actually took a watch out of its waistcoat-pocket, and looked at it, and then hurried on, Alice started to her feet, for it flashed across her mind that she had never before seen a rabbit with either a waistcoat-pocket, or a watch to take out of it, and burning with curiosity, she ran across the field after it, and fortunately was just in time to see it pop down a large rabbit-hole under the hedge.</p>

<footer></footer>
</div>

【讨论】:

    猜你喜欢
    • 2018-08-09
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多