css - 没有固定背景高度的纯 CSS 视差?

标签 css parallax css-transforms

我试图在没有固定背景高度的情况下获得纯 CSS 视差效果。这已在 few 中进行了描述places , 但它们有一个共同的约束条件,即背景层必须具有固定的已知高度。

由于某些动态内容,我希望在没有固定的、已知的背景高度的情况下实现效果。

我的最小示例在这里:https://jsfiddle.net/yf8oyben/

#container {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  perspective: 1px;
  overflow-x: hidden;
  overflow-y: scroll;
}
.background {
  transform: translateZ(-1px) scale(2);
  width: 100%;
  background: lightgreen;
  height: 250px;  /* Assumes bg height */
  position: absolute;  /* Assumes bg height */
  top: calc(125px - 50vh);  /* Assumes bg height */
}
.foreground {
  background: rgba(0, 0, 255, 0.5);
  width: 100%;
  position: absolute;  /* Assumes bg height */
  top: 250px;  /* Assumes bg height */
}
<body>
  <div id='container'>
    <div id="group1">
      <div class="background">
        <div style="height: 10rem"></div>
        <center>Banner</center>
        <div style="height: 10rem"></div>
      </div>
      <div class="foreground">
        <div style="height: 10rem"></div>
        <center>Content</center>
        <div style="height: 100rem"></div>
      </div>
    </div>
  </div>
</body>

它现在可以工作,但假定背景为 250 像素,如 CSS 中所注释。是否可以删除它并仍然保留当前的效果?

最佳答案

您可以在不知道横幅高度的情况下实现这种视差效果。您只需要放弃绝对定位并调整 perspective-origintransform-orign 属性,它们需要一个放在另一个之上。

这是一个演示:CSS only parallax effect

*{margin:0;padding:0;}
#wrap{
  position:fixed;
  width:100%; height:100%;
  overflow-x:hidden;
  overflow-y:scroll;
  perspective: 1px;
  perspective-origin:0 0;
}
.bg{
  background:teal;
  transform-origin:0 0;
  transform: translateZ(-1px) scale(2);
}
.bg img{
  display:block;
  width:100%; height:auto;
}
.cont{
  position:relative;
  background:rgba(0,0,0,0.8);
  color:#fff;
  padding:5%;
}
.cont *{
  max-width:900px;
  margin:5% auto;
}
<div id="wrap">
  <div class="bg">
    <img src="http://i.imgur.com/hPLqUtN.jpg" alt="" />
  </div>
  <div class="cont">
    <h1>Lorem Ipsum</h1>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris et purus porta, porta dolor vel, pulvinar turpis. Suspendisse aliquam placerat turpis, sed ullamcorper nisl vestibulum eu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec euismod tempor elit a pulvinar. Integer vehicula purus ipsum, id ultricies risus placerat sit amet. Cras vel ante egestas diam egestas sagittis. Mauris facilisis, dolor pulvinar tempus vestibulum, elit lectus gravida sem, sed volutpat dui dolor vel purus. Praesent nec ligula ac mi faucibus hendrerit vitae sed felis. Nullam vehicula magna vitae ultrices dapibus. Pellentesque facilisis dui a diam scelerisque pharetra. Vestibulum dapibus imperdiet molestie. Fusce fringilla facilisis metus, in iaculis lectus fermentum eget. Ut tortor quam, imperdiet sit amet nisi in, fringilla porta sapien. Aenean a enim vestibulum, bibendum dolor sed, consequat mi.</p>
    <p>Fusce faucibus nulla id iaculis sagittis. Duis ac arcu a ex elementum feugiat. Proin ut quam quis tortor vulputate semper a id nunc. Morbi rhoncus ultricies ultricies. Praesent semper id massa sed euismod. Fusce sagittis felis nec libero malesuada, in luctus enim aliquam. Aliquam sagittis, orci eget blandit vestibulum, mi dui blandit mauris, et tincidunt tellus nisi sagittis lacus. Sed dignissim, sapien vitae cursus imperdiet, augue massa tempor ex, non finibus risus metus ac enim. Mauris blandit eros nisi.</p>
    <p>Sed bibendum ante ac metus hendrerit, nec commodo tortor venenatis. Pellentesque porta eros non eros cursus, vitae commodo sapien facilisis. Praesent sit amet volutpat lacus. Nullam sed quam ac dolor blandit lacinia. Ut euismod turpis sit amet libero pulvinar, non aliquet lacus bibendum. Nullam libero massa, facilisis sed neque id, porta fringilla eros. Curabitur vestibulum nisi nec tempor tempor. Sed fermentum mauris diam, eu volutpat magna tempus et. Ut semper dapibus purus eget ullamcorper. Aenean varius rutrum purus id congue. Mauris sit amet turpis ornare, pharetra ex et, porta lorem. In hac habitasse platea dictumst.</p>
    <p>Nulla sed pellentesque nibh, eu consectetur neque. Curabitur eu risus at felis sagittis blandit. Nunc non massa non massa mattis semper. Curabitur dapibus tortor velit, id tincidunt ligula rutrum sed. Quisque feugiat consequat molestie. Curabitur lobortis neque ac porta imperdiet. Sed malesuada nibh sit amet magna commodo, sed bibendum turpis vestibulum. Suspendisse vel rutrum dolor, sed bibendum turpis. Morbi condimentum fermentum urna id venenatis.</p>
  </div>
</div>

关于css - 没有固定背景高度的纯 CSS 视差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38693533/

相关文章:

javascript - 优化 JS 代码以在悬停时显示某些 Div

跨浏览器的 CSS 问题,但 IE 工作?

jquery - Bootstrap 3 垂直导航栏响应

css - 每列的 Susy 堆栈内容

objective-c - CSStickyHeaderFlowLayout swift

jquery - 使用滚动视差 jQuery 插件时保持图像纵横比不变

iOS:像 Spotify 一样的 UITableView 视差标题效果

javascript - 使用旋转和平移保持 3D 立方体在其边缘正确滚动的问题

javascript - Impress.js 和使用 HTML5 数据属性代替 CSS 转换

css - 网络工具包 : CSS force hardware acceleration for 2D transforms without using 3D CSS properties