デザイナーがiPhone6(375px)基準のデザインをつくってきたとき
320pxでも見切れなく表示する必要がある。
viewport
// http://www.bricoleur.co.jp/blog/archives/2985
import UA from './UA';
const ua = new UA();
const _ua = ua.get();
export default (() => {
const SP_BASE_WIDTH = 375; // デザイナー作成サイズ
const PC_MAX_WIDTH = 1280; // タブレット内に収めたいサイズ
const ua = navigator.userAgent.toLowerCase();
const isiOS = (ua.indexOf("iphone") > -1) || (ua.indexOf("ipod") > -1) || (ua.indexOf("ipad") > -1);
const iOSviewportW = (isiOS) ? document.documentElement.clientWidth : 0;
function updateMetaViewport(){
const ww = (isiOS) ? iOSviewportW : window.outerWidth;
let viewportContent;
if (_ua.Tablet) {
// タブレットの場合はpcを縮小した感じにする
viewportContent = `width=${PC_MAX_WIDTH}, user-scalable=no, shrink-to-fit=no`;
} else {
// spの基準サイズ(デザイナー作成サイズ)以下はよしなに縮小する
// ※ iphone7などのデザイナー作成サイズ以上のときも拡大表示したい場合は、
// 条件分岐をなくし、width=デザイナー作成サイズ を適応する。
viewportContent = (ww < SP_BASE_WIDTH)
? `width=${SP_BASE_WIDTH}, user-scalable=no, shrink-to-fit=no`
: `width=device-width, user-scalable=no, shrink-to-fit=no` ;
}
document.querySelector("meta[name='viewport']").setAttribute("content", viewportContent);
}
window.addEventListener("resize", updateMetaViewport, false);
window.addEventListener("orientationchange", updateMetaViewport, false);
const evt = document.createEvent("UIEvent");
evt.initEvent("resize", true, true);
window.dispatchEvent(evt);
})();
zoom
個人的にはzoomで横着してしまっている。
他に良い方法あればコメントください。
(zoomは使わないほうがいい)
デモ:http://s.codepen.io/mo4_9/debug/ZpRoBy
(インスペクタのスマホ表示)
375pxを基準に320~600pxの間で10pxずつzoomを設定するサンプル
@mixin media($width) {
@media only screen and (max-width: $width + 'px') {
@content;
}
}
@mixin fixZoom() {
$base: 375;
$max: 600;
$min: 320;
$current: $max;
$stride: 10;
$flag: true;
@while $current >= $min {
@if $flag {
@if $current < $base {
@include media($base) {
body{ zoom: 1.0 ; }
$flag: false;
}
}
}
@include media($current) {
body{ zoom: $current / $base ; }
$current: $current - $stride;
}
}
}
追記
(以下のコードはiOSでうまく拡縮してなかったので使わないほうがいいかも)
media queryよりjsの方が柔軟に対応できそうなので
SP環境かつ320~600pxでよしなにzoomする。
Zoom.js
import $ from 'jquery';
export default class {
constructor(opts={}) {
this.MAX_WIDTH = opts.MAX_WIDTH || 600;
this.MIN_WIDTH = opts.MIN_WIDTH || 320;
this.isSP = opts.isSP || false;
this.initListener();
}
initListener() {
$(window).on('load resize', () => {
if (!this.isSP) return;
this.changeScale();
})
}
changeScale() {
const ww = window.innerWidth;
if ( ww >= this.MAX_WIDTH || ww <= this.MIN_WIDTH ) return;
const BASE = 375; // zoom = 1.0
$(document.body).css('zoom', ww / BASE * 1.0 )
}
}
Author And Source
この問題について(デザイナーがiPhone6(375px)基準のデザインをつくってきたとき), 我々は、より多くの情報をここで見つけました https://qiita.com/mczkzk/items/1e8a533e01b0dec795e9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .