I'm animating an element by unveiling it from the bottom of the page. The position of the child elements should not be affected by the size change of the unveiling animation.
That's what I'm looking for:
<div>
<h1>Hello stranger</h1>
</div>
Both elements are positioned absolute
with top, right, bottom & left set to 0
. The contents are revealed by lowering the top
of the div
from 100%
to 0%
. Have a Fiddle.
My goal is
But these are my problems (Fiddles included)
position:fixed
for the h1
the overflow
becomes always visible.position:absolute
the position isn't fixed
correctly.clip:rect(500px auto auto auto)
I lose the ability to use %
. And thus I can't determine the exact height of the viewport without using JavaScript.What else can be done to archieve the described behavour without JS?
The solution is to move the h1
in the opposite direction to the div
animation at the same time which gives the illusion that the h1
has remained static. However the h1
is actually also moving relative to the div
just in the opposite direction.
I've kept the same markup and also the position: absolute; top: 0; right:0; left:0; bottom: 0;
requirement you stated on both elements.
http://jsfiddle.net/eLbcdc9c/6/
HTML
<div>
<h1>Hello stranger</h1>
</div>
CSS
div {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: #000;
transform: translate3d(0, 0%, 0);
overflow: hidden;
}
h1 {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
color: #fff;
text-align: center;
transform: translate3d(0, 50%, 0);
}
/* Transition effect and timing must be the same for both elements to give the perfect illusion */
div,
h1 {
transition: transform 500ms ease-in;
}
/* The transform class added to the div to begin the animation on the h1 and div at the same time */
.hide {
transform: translate3d(0, 100%, 0);
}
.hide h1 {
transform: translate3d(0, -50%, 0);
}
Apply the hide
class to the div
(by clicking the toggle in the fiddle) and you should get the desired affect.
Things that are important to note here is the use of 3dtransforms. These are much smoother than animating top
or margins
and takes advantage of using a devices GPU for Hardware acceleration to achieve this.
3dtransforms are very well supported but you may need to apply the browser prefixes in some instances depending on the support you want to offer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With