仅使用CSS3的视差效果

San*_*mar 2 html css css3 parallax

我试图只用CSS3创建视差效果,但不幸的是我无法,简单的结构是一个div与图像和一个div与内容,我不能在背景中使用图像.

注意:请不要建议任何JS解决方案和背景图像解决方案,因为我只是尝试使用CSS3和图像标记来处理它DIV

任何人都可以建议如何处理这个?这是JSfiddle

.image-div{
        width: 100%; 
        float: left;
        -webkit-perspective: 1px;
        perspective: 1px;
        -webkit-perspective-origin: center top;
        perspective-origin: center top;
        -webkit-transform-style: preserve-3d;
        transform-style: preserve-3d;
        position: relative;
    }
    .image-div img{
        width: 100%; 
        height: auto;
    }
    .content-div{
        width: 100%;
        background: #fff; 
        float: left;
        position: relative;
        -webkit-transform: translateZ(0);
        transform: translateZ(0);

    }
Run Code Online (Sandbox Code Playgroud)
<div class="image-div">
        <img src="https://pbs.twimg.com/media/B2XTRwtCAAEnqlP.jpg:large">
    </div>
    <div class="content-div">
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet
            lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis
            parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci,
            sed rhoncus pronin sapien nunc accuan eget.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet
                lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis
                parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci,
                sed rhoncus pronin sapien nunc accuan eget.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet
                    lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis
                    parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci,
                    sed rhoncus pronin sapien nunc accuan eget.</p>        
    </div>
Run Code Online (Sandbox Code Playgroud)

fca*_*ran 6

的jsfiddle


这是我一步一步的尝试

1)将您的内容包装到包装元素中,例如<main>使用此样式

main {
   height: 100vh;
   perspective: 1px;
   position: relative;
   transform-style: preserve-3d;
}
Run Code Online (Sandbox Code Playgroud)

2)除去float,并打开的位置,content-divimage-divrelativeabsolute.为内容提供一些上边距(或者它将与图像重叠)并在页面中填充足够的内容以查看效果.

3)你需要调整其较慢层(图像)translateZ,并scale以适当的性质transform-origin,所以添加这种风格

.image-div{
    width: 100%; 
    position: absolute;
    height: 30vw;
    transform: translateZ(-1px) scale(2);
    transform-origin: 50vw 50vh;
}
Run Code Online (Sandbox Code Playgroud)

最后,您可以通过简单地更改图像的值来降低图像层的速度transform: translateZ(-1px) scale(2);,这样您就可以调整其深度.

通用公式是:

transform: translateZ(-<n> px) scale( <n+1> );
Run Code Online (Sandbox Code Playgroud)

n = 5的JSFiddle示例