Starea curentă a interogărilor elementului

Elementele de interogare a elementelor (sau "interogările containerelor", dacă trebuie) continuă să intre în conversații între factorii responsabili de proiectare web, însă includerea lor în orice spec și peisajul actual este neclară. În acest articol vom discuta care sunt întrebările de element și unde consensul comunității se regăsește în prezent printre grupurile de lucru pentru dezvoltatori și standarde.

Ce sunt întrebările elementului?

Elementele de interogare permit elementelor să "reacționeze" la constrângerile lor indiferent de constrângerile dimensiunii ecranului. Acesta este cel mai important detaliu pe care trebuie să-l înțelegeți. Întrebările media pe care le cunoaștem sunt 100% pentru aspectul receptiv, dar aspectul receptiv nu este 100% @mass-media întrebări. Modulele, componentele, elementele de interfață vor crește mereu și se vor micșora cu ecranul, dar niciodată nu vor reacționa pe cont propriu, motiv pentru care @mass-media nu este toata solutia la problemele noastre.

Aruncați o privire la demo-ul dur al întrebărilor de element folosind eqcss:

Frontul

Mulți oameni care caută soluții pentru punctele de întrerupere bazate pe elemente au început să implementeze CSS-in-JS utilizând cadre precum React. Deși s-au înregistrat progrese în alte domenii, această fractură a dezvoltatorilor de soluții a fost creată din soluții de utilizare generală pentru CSS sau JavaScript în mai multe biblioteci specifice pentru cadre. În timp ce rezultatele variază, caracteristicile principale pe care le obțin aceste instrumente sunt adesea foarte asemănătoare. În viitor, o standardizare a acestor tehnici asortate ar putea consolida o abordare a acestui tip de design receptiv care să fie aplicată pe orice site web sau orice instrument.

În timpul discuțiilor pe această temă cu Tommy Hodgins (un avocat al întrebărilor de elemente și creatorul de eqcss), oamenii sunt încă conștienți atât de "întrebări de element", cât și de conceptul separat de "interogări de containere". Consensul pare să fie împărțit în câteva domenii diferite:

Iată un alt exemplu în care pot schimba CSS pe baza lățimii videoclipului. Nu are nici o legătură cu dimensiunea ferestrei de vedere. pic.twitter.com/O6lbDBJvFf

- Wes Bos 🔥 (@wesbos) 6 octombrie 2017

Vreau Houdini. Cred că ne va permite să creăm concepte pe care browserele să le poată folosi pentru a deveni native.

- Snook (@snookca) 6 octombrie 2017

Vrei să faci o stropire în lumea web dev? Fiți cel care face o implementare de lucru a interogărilor containerelor cu Houdini. 🤹🏼♂️

- Chris Coyier (@chriscoyier) 10 octombrie 2017

Deci, ce este în lista de dorințe pentru dezvoltatori?

  1. Creați un Respect Observer și studiați beneficiul acordării de dezvoltatori unei primitive mai bune pentru a construi puncte de întrerupere bazate pe lățime. Aceasta este piesa fundamentală de care avem nevoie folosind JavaScript pentru a face interogările de elemente eficient. Vestea nefericită este că Resize Observer nu este gata, dar comunitatea creatorilor lui e greu la locul de muncă, făcând asta o realitate. Puteți citi public spec. Dacă doriți să vă scufundați în continuare.
  2. Dezvoltați-l pe Houdini într-un model de lucru și expuneți-l ca un caz perfect de utilizare a nevoilor noastre. În prezent, Grupul de lucru CSS se concentrează pe Houdini.
  3. Furnizați o putere suplimentară dezvoltatorilor folosind API-urile stabilite de Modelul Obiect CSS (o colecție de API-uri care permite JavaScript să vorbească și să manipuleze CSS). Intențiile dezvoltatorilor CSS OM sunt de a expune accesul mai profund și mai profund la modul în care browserul se ocupă de prelucrarea și gândirea despre CSS. Aceste aspecte vor permite dezvoltatorilor să scrie într-un mod mai mult ca pluginurile CSS; ceva ce nu am reușit să obținem încă. Dacă modelul de obiect CSS scanează interesul dvs., vă încurajez să citiți și acel spec.

Houdini Cine?

Imaginați-vă că ați putea scrie un plugin care să acționeze mai mult ca un patch de browser decât un plugin JavaScript. Ce ar fi dacă ați avea acces la injectarea propriei logici în modul în care un browser analizează, vopsește și redă pagini? Ce lucruri ați putea "să predați" browserul în loc să vă bazați pe logica din partea de sus a paginii pentru a calcula?

În prezent, suntem blocați de modul în care un browser procesează CSS, dar cu Houdini speranța este că vom avea capacitatea de a rearanja și de a prioriza, astfel încât să putem calcula valorile folosind abordări inteligente sau să controlam randarea pentru a ascunde defectele. JavaScript și API-urile CSS Object Model oferă CSS același tip de acces, control și putere pe care API-urile JavaScript și DOM oferă HTML-ului. Potrivit lui Tab Atkins, Houdini folosește de asemenea logica AP Typed OM și Parser API și acestea sunt tehnologiile care stau la baza pentru setările At-Rules personalizate, permițându-vă să specificați regulile elementului de interogare în foaia de stil și să le manipulați de JavaScript.

Există un site dedicat exclusiv monitorizării progresului său la ishoudinireadyyet.com, dar între timp, să luăm în considerare și alte soluții potențiale.

Utilizați un iFrame; Problema rezolvata

Folosind iframe pentru a înfășura elemente este o abordare inteligentă cu siguranță, dar, din păcate, încă nu este o soluție adevărată a problemei; mai mult un hack creativ. Citiți mai multe despre acest truc din blogul lui Tab Atkins.

Conținutul CSS (Plotul de viață nu este inclus)

Deși nu este stabilizat în formularul de specificații, această proprietate este menită să fie utilă în paginile care conțin multe widget-uri independente. Documentele afirmă că pot fi utilizate pentru a împiedica modificarea de către alte site-uri a unei reguli CSS a unui widget. O valoare de proprietate a strict sugerează că poate evita multe dintre problemele de interogare a containerelor, dar aceasta nu este întreaga soluție; doar o piesă a puzzle-ului.

O problemă majoră privind interogările containerelor este aceea că copiii și conținutul acestora poate sa au un efect asupra dimensiunii containerului. Acest lucru poate fi evitat teoretic prin utilizarea unui CSS, dar să analizăm problema care provoacă această dependență între elemente.

Dependențele ciclice: Nemesis Query Container

Aruncați o privire la următoarea discuție a lui Dan Tocchini (poate doriți să începeți videoclipul de la ora 10:00, deoarece Vimeo nu permite timbre).

De ce nu poate fi un element receptiv la dimensiunea sa? Dependențele ciclice. Iată o imagine redată din videoclipul de mai sus pentru a clarifica:

Fiecare casetă depinde de constrângerile cutiei sale (lăţime în acest caz), și aici apar dependențele ciclice. Există o relație constantă între aceste elemente legate care apare în mod natural. Acest tip de comportament există de asemenea cu :planare evenimente explicate de Tommy Hodgins în acest videoclip.

Relațiile ciclice sunt în cazul în care o bucată mare de oameni care folosesc termenul "interogare container" se blochează deoarece:

  • Este o problemă legitimă, deoarece CSS suferă deja de ea.
  • Nu există nimic pe care dezvoltatorii să o poată face pentru a rezolva problema, deoarece necesită rescrieri grele la limbajul CSS în sine.
  • Ar fi nevoie de unele ameliorări la nivelul browserului.

Vestea bună este că browserele încep să prezinte unele dovezi de lucru în jurul acestor probleme, după cum sa discutat anterior cu Houdini.

Perspectiva viitorului

Se întâmplă să existe un spec CSS Element Queries (vis) de Tommy Hodgins; și în timp ce doar un spec de vis, este foarte impresionant lungimile luate pentru a pune de fapt cuvinte și sugestii la conversație. El a compilat, de asemenea, un site care afișează dezvoltatorii care lucrează la interogări în containere, denumiți în mod corespunzător "Cine lucrează la interogările containerelor".

După toate cercetările mele, încă mai rămân întrebându-mă de ce majoritatea comunității noastre nu se construiesc în acest fel când putem? Am avut capacitatea de a construi acest mod înainte de CSS @mass-media a fost acceptat în browser, dar se pare că am fost retrași. Am plecat de la a nu avea nici o idee despre "cele mai bune practici receptive", să descoperim cum să obținem diferite rezultate folosind @mass-media; și care se răspândeau ca focul sălbatic. Articolele care discută aspectul de răspuns "Media Query-free response" folosind modele inteligente de afișare, cum ar fi Flexbox și Grid, ilustrează faptul că avem un timp dificil de divorțare a aspectului receptiv față de interogările media.

Consultați această prezentare a lui Eric Portis (Conține excitementul dvs.) în care discută acest lucru; cu atât de multe obstacole, cum avansăm platforma web în ansamblu?

Iată câteva sonde obișnuite pe care le veți auzi cu privire la întrebările de elemente:

nu 👏 tu 👏🏻 îndrăznești 👏🏼 soluționa 👏🏽 pentru 👏🏾 javascript 👏🏿 interogări containere

- Zach LeatHERMAN 🎃⬆⌨ (@zachleat) 6 octombrie 2017
  • Voi arunca o privire odată ce este un spec. Aprobat CSS (s-ar putea să nu fie niciodată ...)
  • O să o susțin numai odată ce un browser o acceptă în mod nativ (caracteristicile sunt acceptate, dar nu există zahăr pentru interogările elementului specific).
  • Nu vreau să folosesc JavaScript pentru styling deoarece "That's Bad®"

Cred că soluțiile intl vor fi bazate pe JS și acelea vor informa API-urile CSS numai. Nu ar trebui să ignorăm soluțiile tmp doar pentru că au nevoie de JS.

- Phil Walton (@philwalton) 6 octombrie 2017

Se simte ca Houdini poate uneori să fie o modalitate de a spune "nu ne putem deranja să ne pierdem timpul cu asta, așa că hai să-i lăsăm să-i dau seama"

- Sara Soueidan 🐦 (@SaraSoueidan) 6 octombrie 2017

După cum am experimentat în cariera mea, dezvoltatorii au exprimat rar probleme utilizând JavaScript pentru a adăuga suport pentru @mass-media cu IE8 pentru că am solicitat JavaScript pentru a adăuga putere de styling în care lipsesc browserele. Cu toate acestea, folosind JavaScript deja în browser pentru a îmbunătăți CSS? Aceasta este erezia pentru mulți; chiar și unii dintre cei care sunt total fericiți folosind JavaScript pentru a asambla HTML.

Ideile menționate în secțiunile anterioare permit dezvoltatorilor să lucreze cu propria lor idee, dar trebuie să începem să ne întâlnim mai frecvent, să comparăm notele, să găsim o abordare standard și să o blocăm. Din punct de vedere personal, nu vom putea divortează JavaScript din CSS atunci când vine vorba de întrebări de element, așa că trebuie să-l îmbrățișăm. Oricine așteaptă o abordare pură a CSS ar putea fi la depoul de tren pentru mulți, mulți ani care vor veni.

Gânduri de împărțire

Folosiți interogări de elemente în propria dvs. activitate? Elementele de întrebare ale unui element sunt o cauza pierdută datorită punctelor de vedere foarte avizate? Sper ca această discuție să ajute la luarea în considerare a gândirii care va permite JavaScriptului să aibă un loc la masă, astfel încât să putem construi componente excepțional de flexibile pentru webul în continuă schimbare. Ca întotdeauna, vă rugăm să postați gândurile dvs. în secțiunea de comentarii și fericit de codificare.

Multumiri speciale

O mare mulțumire pentru Tommy Hodgins pentru timpul și cunoștințele sale valoroase pe această temă și, de asemenea, pentru toată munca sa, ținând cont de acest subiect sensibil la comunitate.

Link-uri suplimentare

  • Lucrând în jurul unei lipse de întrebări de element asupra Grupului Filament
  • presto-puncte pe GitHub
  • Ce Heck sunt Elemente Queries & contacte Interogări? de Tommy Hodgins
  • GSS: Layout Reimagined pe Web Design săptămânal
  • Elemente de interogări de Tommy Hodgins
  • eqcss pe GitHub
  • Elementele de interogare CSS pe GitHub
  • cssplus pe GitHub
  • Element Query Demos Collection pe CodePen
  • Elemente de întrebări, și cum le puteți folosi astăzi pe Smashing Magazine
  • Houdini
  • Intent la navă: ResizeObserver