While testing my website on an iOS device I realized that a particular transition, which I used to animate the changing of a div's background-color, looked very jittery on it. At first I thought it was the device's fault, but when I later tested on a few other, newer devices the result was the same.
I did some research and discovered that this is a well known problem, and that all I need to do to improve the animation quality is to coax iOS into enabling hardware acceleration. This answer showed me how:
-webkit-transform: translate3d(0, 0, 0);
Adding this style to the the div completely smoothed out the transition. However, it had the unintended side-effect making all elements that had position: fixed to stop working properly, and instead behave as if they had position: absolute instead.
Here is an screenshot of my page, slightly scrolled down, viewed on an iPad without the style:
And here is a screenshot of the page scrolled down the same amount, but with the style:
The nav is, in fact, still there. You just have to scroll up to see it. It is no longer fixed to the viewport.
Here is a demo which demonstrates the bug in action:
html,
body {
    width:100%;
    height:100%;
    margin:0;
    padding:0;
    transform: translate3d(0, 0, 0);
}
#nav{
    width:100%;
    height:10%;
    position:fixed;
    top:0;
    left:0;
    background-color:red;
}
#content {
    width:100%;
    height:500%;
}<!DOCTYPE html>
<html>
 <body>
  <nav id="nav">
  </nav>
  <main id="content">
  </main>
 </body>
</html>The red nav should be visible even after scrolling down. Depending on your browser, this may or may not work properly as is. Removing the problematic -webkit-transform: translate3d(0, 0, 0); style makes it work properly across all browsers.
This is one of several threads I found which confirm my suspicion of this not being case-specific. Any page with this style and position: fixed doesn't work properly.
So my question is, how can I enable hardware acceleration and at the same time have elements with position: fixed function properly?


