search
LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

Organization

canvasをiPhoneのsafe area内に収めてみた

はじめに

最近のiPhoneにはいやーなsafe areaというのがありますね。
普通に作ってると、ホームバーがcanvasと重なりやがる。

くそーAppleめー、めんどくさいじゃ無いか。

いろいろ情報収集してると、padding-bottomにenv(safe-area-inset-bottom)を入れておけばいいらしい。ほうほう、そうなんですね。

ぶー、かなりダメだ。稀にしか動かないような。styleは詳しく無いんだよ。

でもなんとかなった。

やり方

    <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">

viewport-fit=coverを追加して

<canvas style="position:absolute;
       left:env(safe-area-inset-left);
       top:0px;
       width:calc(100% - env(safe-area-inset-left) - env(safe-area-inset-right));
       height:calc(100% - env(safe-area-inset-bottom));">
</canvas>

これでsafe area内にcanvasがいい感じで収まる。縦横切り替えても、Safariのツールバー非表示にしてもOK。

ちなみにenv(safe-area-inset-bottom)の値はjsでは取れないらしい。
js(これはdartだけど)からいじる時はこんな感じでいけた。

canvas.style.height = "calc(100% - ${なんか数字}px - env(safe-area-inset-bottom))";

しかーしcalc(100% - env(safe-area-inset-left) - env(safe-area-inset-right))とは・・・いまいちかなあ。

で、改良。こうなった。

    <div
        style="visibility: visible;position:absolute;top:0px;left: 0px;right: 0px;bottom: 0px;margin-left: env(safe-area-inset-left);margin-right: env(safe-area-inset-right);margin-bottom: env(safe-area-inset-bottom);">
        <canvas id="stage"
        style="position: absolute;left: 0px;top: 0px;width: 100%;height: 100%;"></canvas>
    </div>

このdivのstyle、canvasだとうまくいかないんだよね。displayとかbox-sizingとかも試したけどダメ。
何がダメだったのかわからない。誰か教えて。

終わりに

paddingじゃなくて、大きさを調整すればよかったんだけど、canvasはよくわからんね。

htmlはめんどくさい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0