Куда пропадает свойство fixed у элемента, если у родителя прописано свойство transform-style: preserve-3d;

Есть такой пример

window.addEventListener("scroll", function() {
  if (window.pageYOffset >= 100) {
    console.log(getComputedStyle(dupHeader)['position']);
    console.log(getComputedStyle(dupHeader)['top']);
    console.log(getComputedStyle(dupHeader)['transform']);
    dupHeader.classList.add("active");
  } else {
    dupHeader.classList.remove("active");
  }
});
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html,
body {
  min-height: 100vh;
  background-color: #272727;
  color: white;
}

#wrapper {
  min-height: 1000vh;
  display: grid;
  grid-template-rows: 100px 1fr 100px;
  perspective: 1px;
  transform-style: preserve-3d;
}

header,
main,
footer {
  background-image: radial-gradient(circle at 65% 15%, aqua, darkblue);
}

#dupHeader {
  background-color: #00f;
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 100px;
  transform: translateY(100%);
  transition: all .5s;
  transform-origin: top center;
  z-index: 99999999;
}

#dupHeader.active {
  background-color: #00f;
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 100px;
  transform: translateY(200%);
  transform-origin: top center;
  transition: all .5s
}
<div id="wrapper">
  <header>
    <div id="mainHeader">MainHeader</div>
    <div id="dupHeader">DupHeader</div>
  </header>
  <main>
    Main
  </main>
  <footer>
    Footer
  </footer>
</div>

Смысл в том, что когда родителю задаю transform-style: preserve-3d; дочерний элемент теряет свойство position:fixed;

Но когда в проверяю в js console.log(getComputedStyle(dupHeader)['position']); получаю fixed, но не работает

В примере ниже вариант которого хочу добиться...

window.addEventListener("scroll", function() {
  if (window.pageYOffset >= 100) {
    console.log(getComputedStyle(dupHeader)['position']);
    console.log(getComputedStyle(dupHeader)['top']);
    console.log(getComputedStyle(dupHeader)['transform']);
    dupHeader.classList.add("active");
  } else {
    dupHeader.classList.remove("active");
  }
});
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html,
body {
  min-height: 100vh;
  background-color: #272727;
  color: white;
}

#wrapper {
  min-height: 1000vh;
  display: grid;
  grid-template-rows: 100px 1fr 100px;
  perspective: 1px;
  transform-style: preserve-3d;
}

header,
main,
footer {
  background-image: radial-gradient(circle at 65% 15%, aqua, darkblue);
}

#dupHeader {
  background-color: #00f;
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 100px;
  transform: translateY(100%);
  transition: all .5s;
  transform-origin: top center;
  z-index: 99999999;
}

#dupHeader.active {
  background-color: #00f;
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 100px;
  transform: translateY(200%);
  transform-origin: top center;
  transition: all .5s
}
<div id="dupHeader">DupHeader</div>
<div id="wrapper">
  <header>
    <div id="mainHeader">MainHeader</div>
  </header>
  <main>
    Main
  </main>
  <footer>
    Footer
  </footer>
</div>

Конечно можно так реализовать как в примере втором, но хочу знать почему такое поведение и как исправить...

Stackoverflow


Ответы (0 шт):