Принудительный режим ориентации «пейзаж»

Я пытаюсь принудительно установить «пейзажный» режим для своего приложения, потому что мое приложение абсолютно не предназначено для «портретного» режима. Как я могу это сделать?


person user1599537    schedule 16.01.2013    source источник


Ответы (4)


Теперь это возможно с помощью манифеста веб-приложения HTML5. См. ниже.


Исходный ответ:

Вы не можете заблокировать веб-сайт или веб-приложение в определенной ориентации. Это противоречит естественному поведению устройства.

Вы можете определить ориентацию устройства с помощью мультимедийных запросов CSS3 следующим образом:

@media screen and (orientation:portrait) {
    // CSS applied when the device is in portrait mode
}

@media screen and (orientation:landscape) {
    // CSS applied when the device is in landscape mode
}

Или привязав событие изменения ориентации JavaScript следующим образом:

document.addEventListener("orientationchange", function(event){
    switch(window.orientation) 
    {  
        case -90: case 90:
            /* Device is in landscape mode */
            break; 
        default:
            /* Device is in portrait mode */
    }
});

Обновление от 12 ноября 2014 г.: теперь это возможно с помощью манифеста веб-приложения HTML5.

Как описано в html5rocks.com, теперь вы можете принудительно включить режим ориентации с помощью файла manifest.json.

Вам нужно включить эти строки в файл json:

{
    "display":      "standalone", /* Could be "fullscreen", "standalone", "minimal-ui", or "browser" */
    "orientation":  "landscape", /* Could be "landscape" or "portrait" */
    ...
}

И вам нужно включить манифест в свой html-файл следующим образом:

<link rel="manifest" href="manifest.json">

Не совсем уверен, какая поддержка в манифесте веб-приложения для режима блокировки ориентации, но Chrome определенно там. Обновлю, когда у меня будет информация.

person Rémi Breton    schedule 16.01.2013
comment
Веб-приложения тоже? _______________________ - person user1599537; 16.01.2013
comment
Да, веб-приложения тоже. Даже если вы сохраните свой веб-сайт на главном экране iPhone или iPad, веб-приложение изменит свою ориентацию. - person Rémi Breton; 16.01.2013
comment
Согласно caniuse.com, манифесты можно использовать, начиная с Android 4.1. См. caniuse.com/#feat=offline-apps. - person Rémi Breton; 21.01.2015
comment
Как узнать, вызывается ли манифест? У меня это не работает, и в сети моих инструментов разработки ничего не отображается, несмотря на то, что манифест находится в том же месте, что и index.html, где он связан. - person Ian S; 22.02.2016
comment
Это большой вопрос. Я не слышал о способе подтверждения, действительно ли вызывается файл манифеста. Дайте мне знать, если найдете. - person Rémi Breton; 02.03.2016
comment
В Chrome теперь вы можете проверить вкладку «Приложение» в режиме проверки, есть страница манифеста с прямой ссылкой на ваш файл json и информацией о нем. - person drskullster; 30.05.2017
comment
@RémiBreton - вы все еще ищете эту информацию, так что можете обновить? Мы терпеливо ждали лет! - person ashleedawg; 18.02.2019

screen.orientation.lock('landscape');

Заставит его перейти в ландшафтный режим и остаться в нем. Проверено на Nexus 5.

http://www.w3.org/TR/screen-orientation/#examples

person Crowbar    schedule 12.02.2015
comment
Этот метод более прост в реализации, по сравнению с другими. - person Sarin Jacob Sunny; 29.06.2017
comment
Не работает на Android с использованием интернет-браузера по умолчанию (не Chrome) - есть идеи? - person Antonios Tsimourtos; 08.03.2018
comment
Не реализовано для Safari (iOS и macOS): caniuse.com/#feat=screen-orientation - person MBach; 03.05.2018
comment
Небольшое замечание, это работает только после входа в полноэкранный режим. - person Thane Brimhall; 03.12.2018
comment
Этот метод не рекомендуется Mozilla: developer.mozilla.org/en -US/docs/Web/API/Screen/lockOrientation Также у него очень плохая совместимость с браузерами. - person Fernando Garcia; 08.08.2019
comment
Это даже не работает в полноэкранном режиме в Chrome: | - person Shamshirsaz.Navid; 07.03.2020

Я использую такой CSS (на основе приемов CSS):

@media screen and (min-width: 320px) and (max-width: 767px) and (orientation: portrait) {
  html {
    transform: rotate(-90deg);
    transform-origin: left top;
    width: 100vh;
    height: 100vw;
    overflow-x: hidden;
    position: absolute;
    top: 100%;
    left: 0;
  }
}
person pomber    schedule 22.09.2019
comment
Я использовал этот ответ .. все, что мне нужно сделать, это изменить медиа-запрос с landscape на portrait, и он работает, как и ожидалось @media screen and (orientation: portrait) - person ymz; 20.10.2019
comment
Отредактировал ответ, чтобы помочь будущим людям. Поворот должен применяться, когда текущий режим portrait (чтобы он мог переключиться на landscape). - person lfarroco; 24.12.2019
comment
Спасибо. Я искал что-то вроде этого. - person underdog; 24.02.2020
comment
Как я мог применить его только на одной странице через page-id-xxx? - person Homer; 17.05.2020
comment
Спасибо тебе за это! Я обнаружил, что вам нужно изменить каждые vh на vw и vw на vh во всех файлах CSS (в портретном режиме)... так что, если у кого-то это не получилось, возможно, из-за этого. - person tomer raitz; 16.12.2020

У меня была та же проблема, это был отсутствующий файл manifest.json, если он не был найден, браузер решил, что ориентация лучше всего подходит, если вы не укажете файл или используете неправильный путь.

Я исправил только правильный вызов manifest.json для заголовков html.

Мои заголовки html:

<meta name="application-name" content="App Name">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<link rel="manifest" href="manifest.json">
<meta name="msapplication-starturl" content="/">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#">
<meta name="msapplication-TileColor" content="#">
<meta name="msapplication-config" content="browserconfig.xml">
<link rel="icon" type="image/png" sizes="192x192" href="android-chrome-192x192.png">
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">
<link rel="mask-icon" href="safari-pinned-tab.svg" color="#ffffff">
<link rel="shortcut icon" href="favicon.ico">

И содержимое файла manifest.json:

{
  "display": "standalone",
  "orientation": "portrait",
  "start_url": "/",
  "theme_color": "#000000",
  "background_color": "#ffffff",
  "icons": [
  {
    "src": "android-chrome-192x192.png",
    "sizes": "192x192",
    "type": "image/png"
  }
}

Для создания фавиконов и значков используйте этот веб-инструмент: https://realfavicongenerator.net/

Для создания файла манифеста используйте: https://tomitm.github.io/appmanifest/

Мой PWA отлично работает, надеюсь, поможет!

person Miguel Montes de Oca    schedule 10.11.2018