Forcer le mode d'orientation «paysage»

91

J'essaye de forcer le mode "paysage" pour mon application car mon application n'est absolument pas conçue pour le mode "portrait". Comment puis je faire ça?

user1599537
la source

Réponses:

93

C'est désormais possible avec le manifeste webapp HTML5. Voir ci-dessous.


Réponse originale:

Vous ne pouvez pas verrouiller un site Web ou une application Web dans une orientation spécifique. Cela va à l'encontre du comportement naturel de l'appareil.

Vous pouvez détecter l'orientation de l'appareil avec des requêtes multimédias CSS3 comme ceci:

@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
}

Ou en liant un événement de changement d'orientation JavaScript comme celui-ci:

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

Mise à jour du 12 novembre 2014: c'est désormais possible avec le manifeste webapp HTML5.

Comme expliqué sur html5rocks.com , vous pouvez maintenant forcer le mode d'orientation à l'aide d'un manifest.jsonfichier.

Vous devez inclure ces lignes dans le fichier json:

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

Et vous devez inclure le manifeste dans votre fichier html comme ceci:

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

Je ne sais pas exactement quelle est la prise en charge sur le manifeste de l'application Web pour le mode d'orientation de verrouillage, mais Chrome est définitivement là. Mettra à jour lorsque j'aurai les informations.

Rémi Breton
la source
1
Oui, les webapps aussi. Même si vous «enregistrez» votre site Web sur l'écran d'accueil de l'iPhone ou de l'iPad, l'application Web changera son orientation.
Rémi Breton
2
Selon caniuse.com, les manifestes peuvent être utilisés depuis Android 4.1. Voir caniuse.com/#feat=offline-apps
Rémi Breton
1
Comment puis-je savoir si le manifeste est appelé? Cela ne fonctionne pas pour moi et rien ne semble être chargé dans le réseau de mes outils de développement bien que le manifeste soit au même endroit que l'index.html où il est lié.
Ian S
3
Dans Chrome, vous pouvez maintenant vérifier l'onglet "Application" en mode Inspecter, il y a une page "Manifeste" avec un lien direct vers votre fichier json et des informations à ce sujet.
drskullster
1
@ RémiBreton - êtes-vous toujours à la recherche de cette information, alors pouvez-vous mettre à jour? Nous attendons patiemment depuis des années!
ashleedawg
46
screen.orientation.lock('landscape');

Le forcera à passer et à rester en mode paysage. Testé sur Nexus 5.

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

Pied de biche
la source
3
Ne fonctionne pas sur Android en utilisant le navigateur Internet par défaut (pas Chrome) - des idées?
Antonios Tsimourtos
6
Non implémenté pour Safari (iOS et macOS): caniuse.com/#feat=screen-orientation
MBach
3
Juste une note rapide, cela ne fonctionne qu'après être entré en mode plein écran.
Thane Brimhall
2
Cette méthode est déconseillée par Mozilla: developer.mozilla.org/en-US/docs/Web/API/Screen/lockOrientation De plus, elle a une très mauvaise compatibilité avec le navigateur
Fernando Garcia
1
Cela ne fonctionne même pas en mode plein écran dans Chrome: |
Shamshirsaz.Navid
23

J'utilise des css comme celui-ci (basé sur des astuces 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;
  }
}
pomber
la source
3
J'ai utilisé cette réponse .. tout ce que j'ai à faire est de changer la requête multimédia de landscapeà portraitet cela fonctionne comme prévu@media screen and (orientation: portrait)
ymz
Modification de la réponse pour aider les futurs. La rotation doit être appliquée lorsque le mode actuel est portrait(afin qu'il puisse basculer vers landscape).
lfarroco
Merci. Je cherchais quelque chose comme ça.
outsider le
Comment puis-je l'appliquer uniquement sur une seule page via page-id-xxx?
Homer
0

J'ai eu le même problème, c'était un fichier manifest.json manquant, s'il n'est pas trouvé, le navigateur décide avec l'orientation qui convient le mieux, si vous ne spécifiez pas le fichier ou utilisez un mauvais chemin.

J'ai corrigé le simple fait d'appeler le manifest.json correctement sur les en-têtes html.

Mes en-têtes 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">

Et le contenu du fichier 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"
  }
}

Pour générer vos favicons et icônes, utilisez cet outil Web: https://realfavicongenerator.net/

Pour générer votre fichier manifeste, utilisez: https://tomitm.github.io/appmanifest/

Mon PWA fonctionne très bien, j'espère que cela vous aidera!

Miguel Montes de Oca
la source