The New CSS Media Query Range Syntax PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Noua sintaxă a intervalului de interogări media CSS

Ne bazăm pe Interogări media CSS pentru selectarea și stilizarea elementelor pe baza unei condiții vizate. Această condiție poate fi tot felul de lucruri, dar de obicei se încadrează în două tabere: (1) tipul de media care este utilizat și (2) o caracteristică specifică a browserului, dispozitivului sau chiar a mediului utilizatorului.

Deci, să presupunem că vrem să aplicăm un anumit stil CSS unui document tipărit:

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

Faptul că putem aplica stiluri la o anumită lățime a ferestrei de vizualizare a făcut din CSS Media Queries un ingredient de bază al designului web responsive de la Ethan Marcotte a inventat termenul. Dacă lățimea ferestrei de vizualizare a browserului este de o anumită dimensiune, atunci aplicați un set de reguli de stil, care ne permite să proiectăm elemente care să răspundă la dimensiunea browserului.

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

Observați and acolo? Acesta este un operator care ne permite să combinăm instrucțiuni. În acel exemplu, am combinat o condiție ca tipul media să fie a screen și că este min-width caracteristica este setată la 30em (sau deasupra). Putem face același lucru pentru a viza o gamă de dimensiuni de ferestre de vizualizare:

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

Acum, aceste stiluri se aplică unui interval explicit de lățimi ale ferestrelor de vizualizare, mai degrabă decât unei singure lățimi!

Dar specificația Media Queries Nivelul 4 a introdus o nouă sintaxă pentru vizarea unei game de lățimi de ferestre de vizualizare folosind operatori de comparație matematică obișnuiți - lucruri precum <, >, și = — care au mai mult sens sintactic în timp ce scriu mai puțin cod.

Să cercetăm cum funcționează.

Noi operatori de comparare

Acest ultim exemplu este o ilustrare bună a modului în care am „falsificat” intervale prin combinarea condițiilor folosind and operator. Marea schimbare în specificația Media Queries Level 4 este că avem noi operatori care compară valorile mai degrabă decât să le combine:

  • < evaluează dacă o valoare este mai puțin de altă valoare
  • > evaluează dacă o valoare este mai mare decât altă valoare
  • = evaluează dacă o valoare este egal la o altă valoare
  • <= evaluează dacă o valoare este mai mic sau egal cu to altă valoare
  • >= evaluează dacă o valoare este mai mare sau egal cu to altă valoare

Iată cum am putea fi scris o interogare media care aplică stiluri dacă browserul este 600px lat sau mai mare:

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

Iată cum arată să scrieți același lucru folosind un operator de comparație:

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

Vizarea unei game de lățimi a ferestrei de vizualizare

Adesea, când scriem interogări media CSS, creăm ceea ce se numește a breakpoint — o condiție în care designul „se rupe” și se aplică un set de stiluri pentru a-l remedia. Un design poate avea o grămadă de puncte de întrerupere! Și, de obicei, se bazează pe vizualizarea care se află între două lățimi: unde începe punctul de întrerupere și unde se termină punctul de întrerupere.

Iată cum am făcut asta folosind and operator pentru a combina cele două valori ale punctului de întrerupere:

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

Începeți să înțelegeți cât de mai scurt și mai ușor este să scrieți o interogare media atunci când renunțăm la booleanul and operator în favoarea noii sintaxe de comparare a intervalului:

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

Mult mai ușor, nu? Și este clar exact ce face această interogare media.

Suport browser

Această sintaxă îmbunătățită a interogării media este încă la începuturile sale la momentul scrierii acestui articol și nu este la fel de susținută în prezent ca abordarea care combină min-width și max-width. Ne apropiem, totuși! Safari este singura reținere majoră în acest moment, dar există un bilet deschis pentru el pe care le poți urmări.

Datele de asistență ale acestui browser provin de la Pot folosi, care are mai multe detalii. Un număr indică faptul că browserul acceptă funcția la versiunea respectivă și mai sus.

Desktop

Chrome Firefox IE Margine Safari
104 63 Nu 104 Nu

Mobil/Tabletă

Android-chrome Android Firefox Android Safari iOS
106 106 106 Nu

Să ne uităm la un exemplu

Iată un aspect pentru care este potrivit pentru ecrane mai mari, cum ar fi un desktop:

Noua sintaxă a intervalului de interogări media CSS

Acest aspect are stiluri de bază care sunt comune tuturor punctelor de întrerupere. Dar, pe măsură ce ecranul devine mai îngust, începem să aplicăm stiluri care sunt aplicate condiționat la diferite puncte de întrerupere mai mici, care sunt potrivite ideal pentru tablete până la telefoanele mobile:

Capturi de ecran alăturate ale aspectelor pentru dispozitive mobile și tablete cu traseele lor CSS Grid suprapuse.
Noua sintaxă a intervalului de interogări media CSS

Pentru a vedea ce se întâmplă, iată cum răspunde aspectul între cele două puncte de întrerupere mai mici. Lista de navigare ascunsă este afișată la fel de bine title în main crește în font-size.

Această modificare este declanșată atunci când modificările ferestrei de vizualizare trec de la potrivirea condițiilor unui media la alta:

/* 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;
  }
}

Am combinat câteva dintre conceptele pe care le-am acoperit! Vizăm dispozitive cu a screen tip media, evaluând dacă lățimea ferestrei de vizualizare este mai mare sau egală cu o anumită valoare utilizând noua sintaxă a intervalului de caracteristici media și combinând cele două condiții cu and operator.

Diagramă a sintaxei interogării media, care detaliază tipul media, operatorul și caracteristica media intervalului.
Noua sintaxă a intervalului de interogări media CSS

OK, deci este grozav pentru dispozitivele mobile de mai jos 768px și pentru alte dispozitive egale sau mai mari decât 768px. Dar cum rămâne cu aspectul de pe desktop... cum ajungem acolo?

În ceea ce privește aspectul:

  • main elementul devine o grilă cu 12 coloane.
  • Pe imagine este afișat un buton.
  • Dimensiunea .title fontul elementului crește și se suprapune pe imagine.

Presupunând că ne-am făcut temele și am stabilit exact unde ar trebui să aibă loc acele modificări, putem aplica acele stiluri atunci când fereastra se potrivește cu width condiția pentru acel punct de întrerupere. Vom spune că punctul de întrerupere este la 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;
  }
}
Afișarea pistelor grilei CSS pentru un aspect desktop utilizând o interogare media CSS cu noua sintaxă a intervalului.
Noua sintaxă a intervalului de interogări media CSS

Joacă-te cu el:

De ce noua sintaxă este mai ușor de înțeles

Concluzia: este mai ușor să distingeți un operator de comparație (de ex width >= 320px) decât a face diferența dintre min-width și max-width folosind and operator. Prin eliminarea nuanței dintre min- și max-, avem un singur width parametrul cu care să lucrăm și operatorii ne spun restul.

Dincolo de diferențele vizuale ale acelor sintaxe, ei fac și lucruri ușor diferite. Folosind min- și max- este echivalent cu utilizarea operatorilor matematici de comparare:

  • max-width este echivalent cu <= operator (ex (max-width: 320px) este la fel ca (width <= 320px)).
  • min-width este echivalent cu >= operator (ex (min-width: 320px) este la fel ca (width >= 320px)).

Observați că niciunul nu este echivalentul lui > or < operatori.

Să tragem un exemplu direct din specificația Media Queries Level 4 unde definim diferite stiluri pe baza unui punct de întrerupere la 320px în lățimea ferestrei de vizualizare folosind min-width și max-width:

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

Ambele interogări media corespund unei condiții când lățimea ferestrei de vizualizare este egală cu 320px. Nu este tocmai ceea ce ne dorim. Noi vrem oricare una dintre aceste condiții mai degrabă decât ambele în același timp. Pentru a evita aceste modificări implicite, am putea adăuga un pixel la interogare bazată pe min-width:

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

În timp ce acest lucru asigură că cele două seturi de stiluri nu se aplică simultan atunci când lățimea ferestrei de vizualizare este 320px, orice lățime a ferestrei de vizualizare care se află între 320px și 321px va avea ca rezultat o zonă foarte mică în care niciunul dintre stilurile din nicio interogare nu este aplicat - o situație ciudată de „flash de conținut fără stil”.

O soluție este creșterea celei de-a doua valori a scalei de comparație (numerele după virgulă zecimală) la 320.01px:

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

Dar asta devine prostesc și prea complicat. De aceea, noua sintaxă a gamei de caracteristici media este o abordare mai adecvată:

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

La finalul

Uf, am acoperit mult teren cu privire la noua sintaxă pentru direcționarea intervalelor de lățime a ferestrei de vizualizare în CSS Media Queries. Acum că specificația Media Queries Level 4 a introdus sintaxa și a fost adoptată în browserele Firefox și Chromium, ne apropiem de a putea folosi noii operatori de comparare și de a le combina cu alte caracteristici media din gama, în afară de width, cum ar fi height și aspect-ratio

Și aceasta este doar una dintre caracteristicile mai noi pe care le-a introdus specificația Level 4, alături de un o mulțime de interogări pe care le putem face pe baza preferințelor utilizatorului. Nu se termină aici! Verificați Ghid complet pentru interogări media CSS pentru o scurtă privire de ce ar putea fi inclus în Interogări media Nivelul 5.

Timestamp-ul:

Mai mult de la CSS Trucuri