2016-08-01 142 views
5

我想獲得純粹的CSS視差效果沒有固定的背景高度工作。這已在fewplaces中描述,但它們具有共同的約束,即背景層必須具有固定的已知高度。沒有固定背景高度的純CSS視差?

我想得到的效果沒有固定的,已知的背景高度由於一些動態內容。

我的小例子,是在這裏: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註釋。是否有可能刪除這個,仍然保持目前的效果?

+0

我這個問題了很多努力,並沒有發現任何可能的解決方案,基本上主要的問題是,父母DIV不能將其高度設置爲絕對子div,因此您必須插入一行js來設置其高度。 –

回答

2

您可以在不知道橫幅高度的情況下實現這種視差效果。您只需要放棄絕對位置並調整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>