質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

解決済

1回答

3747閲覧

monaca iPhone viewportが効かない

退会済みユーザー

退会済みユーザー

総合スコア0

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

2クリップ

投稿2017/04/20 16:35

monacaにて現在、iPhone端末向けのアプリを作成しており、HTML自体はWebサーバーにアップしており、jqueryでWebサーバーで取得したHTML(body部分のみ)を取得し、bodyタグに出力しているのですが、iPhone5iS端末で確認すると画面幅が大きく横スクロールが発生してしまう状況です。下記のmonacaのJSを利用してもうまくレスポンシブが効かない状態です。

monaca.viewport({width:"device-width"});

現状、その再現が発生しているHTMLは下記となりますが、解決方法が解らず、ご教授可能な方がおりましたら、教えて頂けると幸いです。

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta http-equiv="Content-Security-Policy" content="default-src * data:; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'"> <script type="text/javascript" src="components/loader.js"></script> <script type="text/javascript" src="components/monacac-jquery/jquery.js"></script> <script type="text/javascript" src="components/monaca.viewport.js"></script> <link rel="stylesheet" href="components/loader.css"> <link rel="stylesheet" href="css/style.css"> <style> img { max-width: 100% !important; height: auto; } html { width: 100% !important; } body { width: 100% !important; overflow-x: hidden; overflow-y: auto; margin: 0; padding: 0; } </style> <script> function get_page(next_url){ // 外部のWebサーバーにあるHTMLを取得してbodyに出力する var url = "https://hogehoge.com"; $('body').load(url, function(response, status, xhr){ } } </script> <body class="hogehoge"> </body> </html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

デバイスに依存した問題かもしれませんので完全な回答とはいえませんが、ヒントになりそうなことを4つ書いておきます。

###viewport.jsを使わない

viewport.jsが作られたのは2012年です。
おそらく、当時のAndroidの標準ブラウザやwebviewでの動作が考慮されたものなのでしょう。
現在のmonacaアプリでは、Cordovaプラグインの「Crosswalk WebView Engine」を利用できます。
これを追加しAndriod内部ブラウザの性能を向上させたうえで自前でmeta viewタグを記述し、viewport.jsは使用しないというのが、現在の有効な書き方なのではないかと思います。

###範囲外にコンテンツをはみ出させない

viewport指定範囲外にコンテンツがあると悪影響が起きることがあるようです。
width:100%のタグがあるようですが、外側に間違いなくはみ出ないように、border:0,margin:0もセットで指定しておいたほうが無難でしょう。
ちなみに私のアプリでは、ローディング中にCSSで作った画像タグをぐるぐる回転させてたら、margin部分がはみ出たせいでviewportがおかしくなったことがありました。

###overflowを利用

html

1html { 2 overflow : auto; 3} 4body { 5 overflow : hidden; 6}

汎用的に効果があるかどうかはわかりません。
私のアプリで発生していた意図しない横スクロールは、この指定で消えました。

###zoom

javascript

1$("html").css("zoom",1);

このコードは、viewport指定通りの大きさで表示するという効果があるようです。適当な場所に入れてみてください。

投稿2017/07/15 14:41

zohnam

総合スコア1441

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/09 13:53

ご返事遅れましたが、私が対応したときは「viewport.js」を利用せず、HTMLやCSSで普通に制御して何とか解決することが出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問