Синтаксис нового медіа-запиту CSS PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Новий синтаксис діапазону медіа-запитів CSS

Ми покладаємось на Медіа-запити CSS для вибору та стилізації елементів на основі цільового стану. Ця умова може бути будь-якою, але зазвичай поділяється на два табори: (1) тип медіафайлу, який використовується, і (2) певна функція веб-переглядача, пристрою чи навіть середовища користувача.

Отже, скажімо, ми хочемо застосувати певний стиль CSS до друкованого документа:

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

Той факт, що ми можемо застосовувати стилі з певною шириною вікна перегляду, зробив медіа-запити CSS основним компонентом адаптивного веб-дизайну з часів Ітана Маркотта придумав термін. Якщо ширина вікна перегляду браузера має певний розмір, тоді застосовуйте набір правил стилю, що дозволяє нам створювати елементи, які відповідають розміру браузера.

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

Зверніть увагу на and там? Це оператор, який дозволяє нам комбінувати оператори. У цьому прикладі ми поєднали умову, що тип носія є a 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! */
  }
}

Тепер ці стилі застосовуються до явного діапазону ширин вікна перегляду, а не до однієї ширини!

Але специфікація медіа-запитів рівня 4 представила новий синтаксис для націлювання на діапазон ширини вікна перегляду за допомогою звичайних математичних операторів порівняння — таких як <, > та = — які мають більше синтаксичного сенсу при написанні менше коду.

Давайте розберемося, як це працює.

Нові оператори порівняння

Цей останній приклад є гарною ілюстрацією того, як ми ніби «підробили» діапазони, об’єднавши умови за допомогою and оператор. Велика зміна в специфікації Media Queries Level 4 полягає в тому, що ми маємо нові оператори, які порівнюють значення, а не комбінують їх:

  • < оцінює, чи є значення менше інше значення
  • > оцінює, чи є значення більше інше значення
  • = оцінює, чи є значення рівним на інше значення
  • <= оцінює, чи є значення менше або дорівнює to інше значення
  • >= оцінює, чи є значення більше або дорівнює to інше значення

Ось як ми могли б написати медіа-запит, який застосовує стилі, якщо браузер є 600px широкий або більший:

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

Ось як виглядає запис того самого за допомогою оператора порівняння:

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

Націлювання на діапазон ширини вікна перегляду

Часто, коли ми пишемо медіа-запити CSS, ми створюємо те, що називається a точка зупинки — стан, коли дизайн «ламається» і для його виправлення застосовують набір стилів. Дизайн може мати купу точок зупину! Зазвичай вони базуються на тому, що вікно перегляду знаходиться між двома ширинами: там, де починається точка розриву, і де точка розриву закінчується.

Ось як ми це зробили за допомогою 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 край Safari
104 63 Немає 104 Немає

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

android-chrome Android Firefox Android IOS Safari
106 106 106 Немає

Давайте розглянемо приклад

Ось макет, який чудово підходить для великих екранів, наприклад робочого столу:

Новий синтаксис діапазону медіа-запитів CSS

Цей макет має базові стилі, спільні для всіх точок зупину. Але коли екран стає вужчим, ми починаємо застосовувати стилі, які умовно застосовуються в різних менших точках зупинки, які ідеально підходять для планшетів і аж до мобільних телефонів:

Пліч-о-пліч знімки екрана макетів мобільного телефону та планшета з накладеними доріжками сітки CSS.
Новий синтаксис діапазону медіа-запитів 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;
  }
}

Ми об’єднали кілька розглянутих концепцій! Ми орієнтуємося на пристрої з a 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, поряд з a купа запитів, які ми можемо зробити на основі вподобань користувача. На цьому все не закінчується! Перевірте Повний посібник із медіа-запитів CSS для короткого огляду що може бути включено в медіа-запити рівня 5.

Часова мітка:

Більше від CSS-хитрощі