примушуючи веб-сайт відображатися лише в альбомному режимі


85

Я хочу показати свій веб-сайт лише в альбомному режимі, чи можливо це? Не має значення, яка орієнтація пристрою знаходиться в руці користувача, але веб-сайт завжди буде в альбомному режимі. Я бачив, як програма iPhone працює так, але чи можна це зробити для веб-сайту?


3
Гарне запитання, але я б поспорився, що відповідь "Неможливо", хоча ви можете якось обдурити: stackoverflow.com/a/4807047/615754 .
nnnnnn

Не зовсім. Ви можете підробити це за допомогою CSS-перетворень, але це негарно, і я не думаю, що існує спосіб дізнатися, чи це на Android. Цілком впевнений, що це вже обговорювалося тут раніше.
Dagg Nabbit

1
чи можна примусити веб-сайт мати мінімальну ширину: 320px? тому, якщо розмір екрану нижчої роздільної здатності, користувачеві потрібно буде прокрутити сторінку, щоб переглянути повний сайт. Або я можу збільшити ширину 240 пікселів до вмісту 320 пікселів?
coure2011

Я не впевнений, наскільки це посилання може бути для вас корисним, але найновіші функції [січня 2020] пропонують новий API для блокування орієнтації від W3C w3c.github.io/screen-orientation
Сарат

Відповіді:


117

@Golmaal справді відповів на це, я просто трохи детальніший.

<style type="text/css">
    #warning-message { display: none; }
    @media only screen and (orientation:portrait){
        #wrapper { display:none; }
        #warning-message { display:block; }
    }
    @media only screen and (orientation:landscape){
        #warning-message { display:none; }
    }
</style>

....

<div id="wrapper">
    <!-- your html for your website -->
</div>
<div id="warning-message">
    this website is only viewable in landscape mode
</div>

Ви не маєте контролю над користувачем, який рухається орієнтацією, однак ви можете принаймні надіслати їм повідомлення. Цей приклад приховає обгортку в портретному режимі та покаже попереджувальне повідомлення, а потім сховає попереджувальне повідомлення в альбомному режимі та покаже портрет.

Я не думаю, що ця відповідь краща за @Golmaal, лише комплімент до неї. Якщо вам подобається ця відповідь, не забудьте надати @Golmaal кредит.

Оновлення

Нещодавно я багато працюю з Cordova, і виявляється, ти МОЖЕш керувати нею, коли маєш доступ до власних функцій.

Ще одне оновлення

Тож після випуску Кордови зрештою це справді жахливо. Краще використовувати щось на зразок React Native, якщо ви хочете JavaScript. Це справді дивно, і я знаю, що це не чистий веб, а чистий веб-досвід на мобільних пристроях не вдався.


зробив мій день! це дійсно зручний скрипт, щоб змусити альбомний режим на маленьких пристроях подавати гарне повідомлення.
dhruvpatel

ти отримав більшу частину кредиту;) + 1d за твою добре описану відповідь та @Golmaal ..
Hitesh Misro

Дійсно корисно, дякую! Варто зазначити, що це, здається, не спрацьовує, якщо ви помістите це в окрему таблицю стилів.
Ммм,

Ваша відповідь краща за ту, яку ви посилаєтесь. Ви надаєте фактичне рішення та рекомендуєте легко реалізоване попередження замість чогось більш креативного та проблемного. Інша "відповідь" могла надихнути вас, але це було більш-менш просто здивуванням уголос. Це було б краще як коментар із згадуванням існування властивості orientationумовної групи.
Вінс,

46

Хоча я сам би тут чекав відповіді, мені цікаво, чи можна це зробити за допомогою CSS:

@media only screen and (orientation:portrait){
#wrapper {width:1024px}
}

@media only screen and (orientation:landscape){
#wrapper {width:1024px}
}

35

Спробуйте це. Можливо, вам більше підходить

#container { display:block; }
@media only screen and (orientation:portrait){
  #container {  
    height: 100vw;
    -webkit-transform: rotate(90deg);
    -moz-transform: rotate(90deg);
    -o-transform: rotate(90deg);
    -ms-transform: rotate(90deg);
    transform: rotate(90deg);
  }
}
@media only screen and (orientation:landscape){
  #container {  
     -webkit-transform: rotate(0deg);
     -moz-transform: rotate(0deg);
     -o-transform: rotate(0deg);
     -ms-transform: rotate(0deg);
     transform: rotate(0deg);
  }
}
<div id="container">
    <!-- your html for your website -->
    <H1>This text is always in Landscape Mode</H1>
</div>

Це автоматично керуватиме рівномірним обертанням.


8
Розумно, але насправді не працює. Значна частина сторінки недоступна при її обертанні, оскільки обертається лише вміст, а не власне браузер.
Грем

3
Це призведе до порушення будь-якої анімації, і це, мабуть, знищить мобільну реакцію сторінки.
Віссам Ель-Кік

2

Мені довелося грати з шириною моїх основних контейнерів:

html {
  @media only screen and (orientation: portrait) and (max-width: 555px) {
    transform: rotate(90deg);
    width: calc(155%);
    .content {
      width: calc(155%);
    }
  }
}

приємна ідея .. будь-які артефакти / шум при перемиканні між портретним / пейзажним?
hko
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.