スマホとタブレットでviewportを出し分ける

以前にレスポンシブWebデザインでタブレット版がないときの対応の記事を書きましたが、最近viewportを出し分けたい時に使うコードを改めてまとめておきます。

ユーザーエージェントを使う場合

まずはユーザーエージェントを使う方法で、仕組みとしては以前の記事のjQueryを使わない版になります。
下記コードをhead内に記述します。

// ユーザーエージェント
var ua = navigator.userAgent.toLowerCase();
var ver = navigator.appVersion.toLowerCase();
var uaList = {};
uaList['isiPhone'] = (ua.indexOf('iphone') > -1) && (ua.indexOf('ipad') == -1);
uaList['isiPad'] = (ua.indexOf('ipad') > -1);
uaList['isAndroid'] = (ua.indexOf('android') > -1) && (ua.indexOf('mobile') > -1);
uaList['isAndroidTablet'] = (ua.indexOf('android') > -1) && (ua.indexOf('mobile') == -1);
uaList['isTablet'] = (uaList['isiPad'] || uaList['isAndroidTablet']);
uaList['isSP'] = (uaList['isiPhone'] || uaList['isAndroid']);

// viewportの設定
var viewport = document.createElement('meta');
viewport.setAttribute('name', 'viewport');
if(uaList['isSP']) {
	viewport.setAttribute('content', 'width=device-width, initial-scale=1.0');
} else {
	viewport.setAttribute('content', 'width=1200');
}
document.getElementsByTagName('head')[0].appendChild(viewport);

ユーザーエージェントで判別するデモページ

画面の幅を使う場合

基本的にはユーザーエージェントを使う方法が便利だったのですが、将来的にchromeでユーザーエージェントを使った判別ができなくなるようです。
参考: ChromeでUserAgentが凍結される日(User Agent Client Hintsの使い方) – Qiita
そこで別の方法として、screen.widthを使って画面の幅で判別してみます。

// viewportの設定
var viewport = document.createElement('meta');
viewport.setAttribute('name', 'viewport');
if(screen.width < 768) {
	viewport.setAttribute('content', 'width=device-width, initial-scale=1.0');
} else {
	viewport.setAttribute('content', 'width=1200');
}
document.getElementsByTagName('head')[0].appendChild(viewport);

画面の幅で判別するデモページ
今回は768未満をスマホとして判別しましたが、タブレットによっては768px以下の画面幅のものも一応あります。
その場合はスマホの表示になる形で個人的には問題ないと思いますが、案件の仕様や対応端末の範囲などに応じて適宜変更してください。

参考サイト

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年10月
 12345
6789101112
13141516171819
20212223242526
2728293031