3D transform issue in firefox

248 views Asked by At

I have a JSFiddle showing a flipping card, It works in chrome as I would expect but the depth perspective in firefox is flat and I'm not sure where the issue is.

I have tried adding:

transform-style: preserve-3d;

and

perspective: 1000;

to all classes (like card) I could with no luck.

The HTML structure is:

<div id="card-container">
    <button id="card-flip">Flip the card</button>
    <div id="card">
        <div class="front card-surface"><!-- front -->
            <p>The front</p>
        </div>
        <div class="back card-surface"><!-- back -->
            <p>The back</p>
        </div>
    </div>
</div>

The simplified CSS is:

#card-container{
    position: relative;
    background-color:#888;
    width: 300px;
    height: 450px;
    margin:0 auto;
}
#card-flip{
    display:none;
}
#card{
    margin:10px auto;
    width: 100%;
    height: 400px;
}
.card-surface{
    margin-top:5px;
    width: 280px;
    height: 180px;
    padding:10px;
}
.front{
     background-color:#7B78E8;   
}
.back{
     background-color:#78AFE8;   
}
/* Only apply 3d effects if they exist in the browser */

#card-container.threed{
    height: 250px;
    perspective: 1000;
}
.threed #card-flip{
    background-color:transparent;
    position:relative;
    top:220px;
    width:100%;
    height:40px;
    background-color:#99E5FF;
}
.threed #card-flip:focus{
    outline:0;
}
.threed #card-flip:hover{
    background-color:#49A5BF;
}
#card-flip:hover + #card .card-surface{
    box-shadow: 0 0px 50px rgba(0,0,0,0.9);
    transition: all .8s ease-in-out;
}
.threed #card{
    height:200px;   
}
.threed #card .front {
    float: none;
    position: absolute;
    top: 0;
    left: 0;
    z-index: 900;

    transform: rotateX(0deg) rotateY(0deg);

    transform-style: preserve-3d;

    backface-visibility: hidden;
}

.threed #card.flip .front {
    z-index: 900;
    border-color: #eee;
    background: #333;
    box-shadow: 0 15px 50px rgba(0,0,0,0.2);

    transform: rotateY(180deg);
}

.threed #card .back {
    float: none;
    position: absolute;
    top: 0;
    left: 0;
    z-index: 800;
    border: 1px solid #ccc;
    text-shadow: 1px 1px 1px rgba(0,0,0,0.6);

    transform: rotateY(-180deg);

    transform-style: preserve-3d;

    backface-visibility: hidden;
}

.threed #card.flip .back {
    z-index: 1000;
    background-color:#ccc;
    transform: rotateX(0deg) rotateY(0deg);
}
.threed #card .card-surface{
    background-color:$base-white;
    transition: all .8s ease-in-out;
    width: 280px;
    height: 180px;
    padding:10px;
}

I have seen working examples like This one. Can anyone tell me what I am missing or is it not possible with this structure?

1

There are 1 answers

0
Totoro On BEST ANSWER

I have figured out the issue.

Here is a new version of the fiddle. The problem was that I did not have the px after the perspective property. this was ignored by chrome but not firefox. I also applied The perspective to the wrong element in the demo so even though I had tried to ad the px before it didn't work.