Новый синтаксис диапазона медиазапросов CSS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Новый синтаксис диапазона мультимедийных запросов CSS

Мы полагаемся на Медиа-запросы CSS для выбора и стилизации элементов на основе целевого состояния. Это может быть что угодно, но обычно они делятся на два лагеря: (1) тип используемого носителя и (2) конкретная функция браузера, устройства или даже среды пользователя.

Итак, скажем, мы хотим применить определенные стили CSS к печатному документу:

@media print {
  .element {
    /* Style away! */
  }
}

Тот факт, что мы можем применять стили при определенной ширине области просмотра, сделал CSS Media Queries ключевым компонентом адаптивного веб-дизайна со времен Итана Маркотта. ввел термин. Если ширина области просмотра браузера имеет определенный размер, тогда применяется набор правил стиля, который позволяет нам создавать элементы, соответствующие размеру браузера.

/* When the viewport width is at least 30em... */
@media screen and (min-width: 30em) {
  .element {
    /* Style away! */
  }
}

Обратите внимание, что and там? Это оператор, который позволяет нам комбинировать операторы. В этом примере мы объединили условие, что тип носителя является screen и что это min-width функция установлена ​​на 30em (или выше). Мы можем сделать то же самое для таргетинга на диапазон размеров области просмотра:

/* When the viewport width is between 30em - 80em */
@media screen and (min-width: 30em) and (max-width: 80em) {
  .element {
    /* Style away! */
  }
}

Теперь эти стили применяются к явному диапазону ширины области просмотра, а не к одной ширине!

Но спецификация Media Queries Level 4 ввела новый синтаксис для нацеливания на диапазон ширины области просмотра с использованием общих математических операторов сравнения — таких вещей, как <, >качества = — которые имеют больше синтаксического смысла при написании меньшего количества кода.

Давайте разбираться, как это работает.

Новые операторы сравнения

Последний пример является хорошей иллюстрацией того, как мы «подделываем» диапазоны, комбинируя условия с помощью and оператор. Большое изменение в спецификации Media Queries Level 4 заключается в том, что у нас есть новые операторы, которые сравнивают значения, а не объединяют их:

  • < оценивает, является ли значение меньше, чем другое значение
  • > оценивает, является ли значение больше другое значение
  • = оценивает, является ли значение равный к другому значению
  • <= оценивает, является ли значение меньше или равно tо другое значение
  • >= оценивает, является ли значение больше или равно tо другое значение

Вот как мы могли бы написать медиа-запрос, который применяет стили, если браузер 600px широкий или больше:

@media (min-width: 600px) {
  .element {
    /* Style away! */
  }
}

Вот как это выглядит, если написать то же самое с помощью оператора сравнения:

@media (width >= 600px) {
  .element {
    /* Style away! */
  }
}

Ориентация на диапазон ширины области просмотра

Часто, когда мы пишем медиазапросы CSS, мы создаем то, что называется точка остановки — состояние, при котором дизайн «ломается» и для его исправления применяется набор стилей. В дизайне может быть куча точек останова! И они обычно основаны на том, что окно просмотра находится между двумя значениями ширины: где начинается точка останова и где точка останова заканчивается.

Вот как мы это сделали, используя and оператор для объединения двух значений точки останова:

/* When the browser is between 400px - 1000px */
@media (min-width: 400px) and (max-width: 1000px) {
  /* etc. */
}

Вы начинаете понимать, насколько короче и проще написать медиа-запрос, когда мы отказываемся от логического значения. and оператор в пользу нового синтаксиса сравнения диапазонов:

@media (400px <= width <= 1000px) {
  /* etc. */
}

Гораздо проще, правда? И совершенно ясно, что делает этот медиа-запрос.

Поддержка браузеров

Этот улучшенный синтаксис медиа-запроса все еще находится в зачаточном состоянии на момент написания этой статьи и в настоящее время не так широко поддерживается, как подход, сочетающий min-width и max-width. Мы приближаемся, однако! Safari — единственное серьезное сопротивление на данный момент, но на него есть открытый билет что вы можете следовать.

Эти данные поддержки браузера взяты из Могу ли я использовать, который имеет более подробную информацию. Число указывает, что браузер поддерживает эту функцию в этой версии и выше.

Для ПК

Chrome Firefox IE Edge Safari
104 63 Нет 104 Нет

Мобильный/Планшет

Android Chrome Android Firefox Android Система IOS Safari
106 106 106 Нет

Давайте посмотрим на пример

Вот макет, который хорошо подходит для больших экранов, таких как рабочий стол:

Новый синтаксис диапазона мультимедийных запросов CSS

Этот макет имеет базовые стили, общие для всех точек останова. Но по мере того, как экран становится уже, мы начинаем применять стили, которые условно применяются в разных меньших контрольных точках, идеально подходящих для планшетов, вплоть до мобильных телефонов:

Расположенные рядом скриншоты макетов для мобильных устройств и планшетов с наложенными дорожками CSS Grid.
Новый синтаксис диапазона мультимедийных запросов CSS

Чтобы увидеть, что происходит, вот как макет реагирует между двумя меньшими контрольными точками. Отображается скрытый список навигации, а также title в main увеличивается в font-size.

Это изменение срабатывает, когда изменения области просмотра переходят от соответствия условиям одного медиа к другому:

/* Base styles (any screen size) */
header {
  display: flex;
  justify-content: center;
}

header ul {
  display: none;
}

.title p {
  font-size: 3.75rem;
}

/* When the media type is a screen with a width greater or equal to 768px */
@media screen and (width >= 768px) {
  header {
    justify-content: space-between;
  }

  header ul {
    display: flex;
    justify-content: space-between;
    gap: 3rem;
  }

  .title p {
    font-size: 5.75rem;
  }
}

Мы объединили несколько концепций, которые мы рассмотрели! Мы ориентируемся на устройства с screen Тип мультимедиа, оценивая, является ли ширина области просмотра больше или равной определенному значению, используя синтаксис нового диапазона функций мультимедиа, и комбинируя два условия с and оператор.

Схема синтаксиса мультимедийного запроса с подробным описанием типа мультимедиа, оператора и функции мультимедиа диапазона.
Новый синтаксис диапазона мультимедийных запросов CSS

ОК, так что это отлично подходит для мобильных устройств ниже 768px и для других устройств, равных или превышающих 768px. Но как насчет того макета рабочего стола… как мы туда попадем?

Что касается макета:

  • Ассоциация main элемент становится сеткой из 12 столбцов.
  • На изображении отображается кнопка.
  • Размеры .title шрифт элемента увеличивается и перекрывает изображение.

Предполагая, что мы сделали свою домашнюю работу и точно определили, где должны происходить эти изменения, мы можем применить эти стили, когда окно просмотра соответствует width условие для этой точки останова. Мы собираемся сказать, что точка останова находится в 1000px:

/* When the media type is a screen with a width greater or equal to 1000px  */
@media screen and (width >= 1000px) {
  /* Becomes a 12-column grid */
  main {
    display: grid;
    grid-template-columns: repeat(12, 1fr);
    grid-template-rows: auto 250px;
  }

  /* Places the .title on the grid */
  .title {
    grid-row: 1;
  }

  /* Bumps up the font-size */
  .title p {
    font-size: 7.75rem;
  }

  /* Places .images on the grid */
  .images {
    grid-row: 1 / span 2;
    align-self: end;
    position: relative;
  }

  /* Displays the button */
  .images .button {
    display: block;
    position: absolute;
    inset-block-end: 5rem;
    inset-inline-end: -1rem;
  }
}
Отображение дорожек сетки CSS для макета рабочего стола с использованием мультимедийного запроса CSS с новым синтаксисом диапазона.
Новый синтаксис диапазона мультимедийных запросов CSS

Поиграйте с ним:

Почему новый синтаксис легче понять

Суть: легче отличить оператор сравнения (например, width >= 320px), чем сказать разницу между min-width и max-width используя and оператор. Устранив нюанс между min- и max-, у нас есть один единственный width параметр для работы, а операторы говорят нам все остальное.

Помимо визуальных различий этих синтаксисов, они также делают немного разные вещи. С использованием min- и max- эквивалентно использованию математических операторов сравнения:

  • max-width эквивалентно <= оператор (например, (max-width: 320px) такой же как (width <= 320px)).
  • min-width эквивалентно >= оператор (например, (min-width: 320px) такой же как (width >= 320px)).

Обратите внимание, что ни один из них не является эквивалентом > or < операторы.

Давайте возьмем пример прямо из спецификации Media Queries Level 4, где мы определяем разные стили на основе точки останова в 320px в ширине области просмотра, используя min-width и max-width:

@media (max-width: 320px) { /* styles for viewports = 320px */ }

Оба медиа-запроса соответствуют условию, когда ширина области просмотра равна 320px. Это не совсем то, что мы хотим. Мы хотим или одно из этих условий, а не оба одновременно. Чтобы избежать этих неявных изменений, мы можем добавить пиксель к запросу на основе min-width:

@media (max-width: 320px){ /* styles for viewports = 321px */ }

Хотя это гарантирует, что два набора стилей не применяются одновременно, когда ширина области просмотра 320px, любая ширина области просмотра, которая находится между 320px и 321px приведет к очень маленькой зоне, где ни один из стилей ни в одном из запросов не применяется — странная ситуация «вспышки нестилизованного контента».

Одним из решений является увеличение второго значения шкалы сравнения (числа после запятой) до 320.01px:

@media (max-width: 320px) { /* styles for viewports = 320.01px */ }

Но это становится глупо и слишком сложно. Вот почему новый синтаксис диапазона функций мультимедиа является более подходящим подходом:

@media (width <= 320px) { /* styles for viewports  320px) { /* styles for viewports > 320px */ }

Подведение итогов

Уф, мы многое рассмотрели в новом синтаксисе для таргетинга на диапазоны ширины области просмотра в CSS Media Queries. Теперь, когда спецификация Media Queries Level 4 представила синтаксис и он был принят в браузерах Firefox и Chromium, мы приближаемся к тому, чтобы использовать новые операторы сравнения и комбинировать их с другими функциями мультимедиа диапазона, помимо width, Как height и aspect-ratio

И это только одна из новых функций, представленных спецификацией уровня 4, наряду с куча запросов, которые мы можем сделать на основе пользовательских предпочтений. Это не заканчивается! Проверьте Полное руководство по медиазапросам CSS для беглого взгляда что может быть включено в Media Queries Level 5.

Отметка времени:

Больше от CSS хитрости