Обычно я использую событие orientationchange
, чтобы добавлять / удалять классы CSS к содержимому и переходить оттуда, а не изменять размер области просмотра. Apple предоставляет некоторый автономный пример кода, хотя из памяти я думаю, что он включает в себя только 90 ° и 0 ° ориентации - вам тоже нужно -90 ° и 180 °, как в комментарии @zyrex.
Пример кода iPhoneOrientation (developer.apple.com)
Обновление за комментарий:
Чтобы уточнить, я не изменяю размеры самих сущностей HTML, а изменяю используемые классы и полагаюсь на CSS для стилизации соответственно. В качестве упрощенного примера, скажем, я хочу переключаться между двумя классами элемента body
, в зависимости от ориентации устройства, я сделал бы что-то подобное в моем Javascript:
window.onorientationchange = updateOrientation;
// (Might want to do this onload too)
function updateOrientation(){
var o = window.orientation, body = document.querySelector('body');
switch(o){
case 0: case 180:
body.className = 'portrait';
break;
case 90: case -90:
body.className = 'landscape';
break;
}
}
… и что-то подобное в разметке по умолчанию:
<body class="portrait">
<!-- stuff here -->
… а затем CSS, который делает все, что требуется - например, другая позиция для элемента тела background
:
body {background: url('images/something.png') no-repeat}
body.portrait {background-position: 30% 50%}
body.landscape {background-position: 10% 25%}
Обновление № 2
Вам также может понадобиться изменить директиву maximum-scale
в вашем метатеге. Mobile Safari, как правило, выполняет масштабирование при смене портрета на альбомную, а не переделывает макет страницы, и это может быть тем, что вы видите.
Значение maximum-scale
предотвращает это, но вы должны заметить, что это также означает, что пользователи не могут выполнять обычные операции масштабирования. Вот как будет выглядеть тег:
<meta name="viewport" content="initial-scale=1, maximum-scale=1">
Обязательно проверьте ответы и здесь:
Как сбросить масштаб / масштаб веб-приложения при изменении ориентации на iPhone?