最近、スマートフォンを中心にドロワーメニューが流行っている。こういうやつ。 実装するのは極めて簡単で、トリガーとなるボタンが押されたらメインのコンテンツ部分に transform: translateX( 100px ) みたいにして動かすだけ。で、閉じるときにはその値を 0 に戻す。 ただこれ、固定ヘッダーを用いる場合には iOS でちょっと壁にぶつかる。iOS では GPU アクセラレーションが有効になっている要素内の全ての要素で position: fixed が position: relative のように振る舞われるためだ。 一度でもドロワーメニューが開かれれば translateX が当たっているので、その要素内に固定のヘッダーとかを持っている場合には固定されなくなってしまうのだ。 対応策は、 固定ヘッダーをやめる translateX の代わりに left プロパティを使う