У меня только что была эта идея, поэтому, возможно, она близорука, но, похоже, она работает хорошо и может быть наиболее согласованной между вашим CSS и JS.
В вашем CSS вы устанавливаете значение max-width для htmlоснованный на значении экрана @media:
@media screen and (max-width: 480px) and (orientation: portrait){
html {
max-width: 480px;
}
... more styles for max-width 480px screens go here
}
Затем, используя JS (возможно, через фреймворк, такой как JQuery), вы просто проверите значение максимальной ширины тега html:
maxwidth = $('html').css('max-width');
Теперь вы можете использовать это значение для внесения условных изменений:
If (maxwidth == '480px') { do something }
Если помещение значения max-width в тег html кажется пугающим, то, возможно, вы можете добавить другой тег, который будетиспользуется только для этой цели.Для моей цели тег html работает нормально и не влияет на мою разметку.
Полезно, если вы используете Sass и т. Д. : для возврата более абстрактного значения, такого как точка остановаname, вместо значения px вы можете сделать что-то вроде:
- Создать элемент, который будет хранить имя точки останова, например,
<div id="breakpoint-indicator" />
- С помощью медиа-запросов css измените свойство содержимого наэтот элемент, например, «большой» или «мобильный» и т. д. (тот же самый базовый подход к медиа-запросу, что и выше, но с установкой свойства css 'content' вместо 'max-width').
- Получить значение свойства css contentиспользуя js или jquery (например, jquery
$('#breakpoint-indicator').css('content');
), который возвращает «большое» или «мобильное» и т. д. в зависимости от того, какое свойство содержимого установлено медиазапросом. - Действовать по текущему значению.
Теперь вы можете использовать те же имена точек останова, что и в sass, например, sass: @include respond-to(xs)
и js if ($breakpoint = "xs) {}
.
Что мне особенно нравится в этом, так это то, чтоЯ могу определить мои имена точек останова все в css и в одном месте (likЭто может быть переменная документ scss), и мои js могут работать с ними независимо.