Изменение мобильной ориентации не применяется CSS

я тестирую веб-сайт, который я разрабатываю, и использую медиа-запросы.

когда я тестирую и изменяю размер страницы в браузере, все хорошо.

но когда я тестирую на своем мобильном устройстве, я сталкиваюсь с проблемой, когда я меняю ориентацию телефона.

если я загружу страницу в landscape mode, применяются правильные CSS.

когда я меняю на portrait, CSS также верны.

но если я вернусь к landscape, в portrait классы css все еще применяются.

я использую эти метатеги

<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

и в моих медиа-запросах у меня есть

@media 
only screen and (max-width: 610px),
only screen and (max-width: 610px) and (orientation:landscape) { ... }

@media
only screen and (min-device-width: 240px) and (max-device-width: 520px),
only screen and (min-width: 240px) and (max-width: 520px) { ... } 

я предупредил ширину устройства, чтобы убедиться, что все в порядке и в landscape режим 598px широкий и portrait is 384px

я использую Nexus 4 (Android 4.3)

Почему CSS не применяются, как только я изменяю ориентацию?

EDIT: Если я загружу сайт в portrait, а затем landscape, CSS не применяются. Это как если бы, как только он идет к наименьшему разрешению,он не может вернуться.

5 ответов


на моем Nexus 4 у меня есть что-то, что выглядит так и, похоже, работает для ваших тестовых случаев:

<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
<meta name='viewport' content='width=device-width'>

и я не ссылаюсь на ориентацию в медиа-запросе, например:

@media only screen and (max-width: 610px) { /* Some CSS here */ }

EDIT: Похоже, вам нужно поместить max-device-width после других материалов max-width с точки зрения медиа-запросов. Цитируя Викса.ca в комментариях ниже...

только что нашел свою проблему. Обратите внимание, как я определяю "max-device-width" перед остальными. Если я поставлю это условие последнее, оно работает. "max-device-width" используется для отображения retina.


этот код работал для меня:-

  @media only screen and (min-width: 240px) and (max-width: 520px), only screen and (min-device-width: 240px) and (max-device-width: 520px) and (orientation:portrait)
{
    body
    {
        background:#009;
    }
}

@media only screen and and (max-width: 610px), only screen and (max-device-width: 610px) and (orientation:landscape)
{
    body
    {
        background:#993;
    }
}

моя проблема связана с порядком моих запросов CSS.

я использовал для определения 'min-device-width' раньше остальных.

@media
only screen and (min-device-width: 240px) and (max-device-width: 520px),
only screen and (min-width: 240px) and (max-width: 520px) { ... } 

но если я определяю его последним, он работает.

@media
   only screen and (min-width: 240px) and (max-width: 520px),
   only screen and (min-device-width: 240px) and (max-device-width: 520px) { ... }

для получения дополнительной информации об устройстве-ширина: -проверить этот вопрос


ваш медиа-запросы имеют перекрытие. Max-width 520 также будет истинна max-width 610. Также у вас есть или в ландшафте, поэтому можно быть истинным в портрете, если максимальная ширина 610 истинна. Перекрывающиеся медиа-запросы будут работать как CSS в том, что он каскадирует, так что вы получите странное поведение.

Я не вижу ссылки на orientation: portrait в ваших запросах, так как вы знаете, что применяются портретные классы. Обычно вы хотите сделать это либо или при выполнении ориентации запросы.

также попробуйте добавить min-width, чтобы удалить любое перекрытие ширины

@media only screen and (orientation:landscape) { ... }

@media only screen and (orientation:portrait) { ... }


известный сайт quiksmode определяет устройство-ширина / устройство-высота функции СМИ как статический.

эти медиа-запросы статичны после определения; т. е. они не обновляют значение, которое они проверяются при изменении ориентации устройства. (Поэтому, если вы начинаете с портрета, а затем переключаетесь на пейзаж, ширина портретного устройства все еще считается. Перезагрузка страницы решает эту проблему.)

вот почему, используя max-device-width по-прежнему применяется после изменения ориентации.