psywalker
@psywalker

Контрольные точки в медиавыражениях и $(window).width() (или window.innerWidth) не совпадают?

Всем привет! Столкнулся с проблемой, когда контрольные точки в медиавыражениях не совпадают с точками $(window).width() (или window.innerWidth). Это и правда так, или всё же я что-то не так делаю?

Покажу на примерах.
1) https://codepen.io/psywalker/pen/WjJZbe - в этом примере верхний div отвечает за медиавыражения, нижний за $(window).width() (или window.innerWidth), ну а span -- это просто линейка в 600px, правый край которой и является нашей контрольной точкой (600px).

Здесь всё работает отлично. Сузьте экран ровно до правого края span и увидите, как все два div станут синими (take.ms/ECczJ). А если жмякнуть ссылкой на span, то даже в консоли всё будет ровненько по 600px.

2) Но всё здорово ровно до того момента, пока не появляется вертикальный скролл. Сравним вариант со скроллом. https://codepen.io/psywalker/pen/jmxKxM?editors=0110. Теперь во всех браузерах (в Edge не тестил, не суть) кроме Safari сужение экрана до 600px врубает $(window).width(), а вот медиазапросы срабатывают только на 585px. Понятно, что медиазапросы учитывают скролл, который 15px. Но разночтение с $(window).width() уже очень расстраивает. А вот в Safari всё срабатывает так же, как без скролла, то есть ровненько на 600px (take.ms/f81ta). Следовательно, помимо разночтения при скролле мы ещё имеем разночтения в браузерах (Safari vs остальных).

3) Ок, попробуем поменять $(window).width() на window.innerWidth.  https://codepen.io/psywalker/pen/wdjXNM?editors=0110. Теперь во всех браузерах (в Edge не тестил, не суть) кроме Safari медиазапросы и window.innerWidth срабатывают в одной точке - 585px, а вот в Safari медиазапросы срабатывают на 600px, а вот window.innerWidth на 585px.

Итог:
Получается, что в данном случае нет единого мнения среди браузеров, и у нас нет возможности контролировать медиазапросы вместе с $(window).width() (или window.innerWidth). Или я ошибаюсь?
  • Вопрос задан
  • 480 просмотров
Решения вопроса 2
можно попробовать window.matchMedia https://www.sitepoint.com/javascript-media-queries/
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы