Aktuell status för elementfrågor

Elementfrågor (eller "behållarfrågor" om du måste) fortsätter att göra sig in i konversationer bland lyhörda webbdesigners, men deras inkludering i någon spec och det nuvarande landskapet är oklart. I den här artikeln kommer vi att diskutera vilka elementfrågor som är och där gemenskapsöverenskommelse för närvarande befinner sig bland utvecklare och standardgrupper.

Vad är elementfrågor?

Elementfrågor tillåter element att "reagera" till sina egna begränsningar oavsett begränsningar av skärmstorlek. Detta är den viktigaste detalj som man måste förstå. Mediefrågor som vi känner dem är 100% för responsiv layout, men responsiv layout är inte 100% @media frågor. Moduler, komponenter, gränssnittselement kommer alltid att växa och krympa med skärmen, men reagerar aldrig på egen hand, vilket är anledningen till det @media är inte hela lösningen på våra problem.

Ta en titt på denna grova demo av elementfrågor med hjälp av eqcss:

Frontlinjen

Många som söker lösningar för elementbaserade brytpunkter började implementera CSS-in-JS med hjälp av ramar som React. Även om det har gjorts framsteg på andra områden, bröt det lösningarna utvecklare skapade från lösningar för allmänt bruk för CSS eller JavaScript i flera ramsspecifika bibliotek. Även om resultaten varierar är de kärnfunktioner som dessa verktyg uppnår ofta mycket lika. I framtiden kan en standardisering av dessa olika tekniker stärka ett tillvägagångssätt för denna typ av responsiv design som ska tillämpas på vilken webbplats som helst, eller vilket verktyg som helst.

Under mina diskussioner om detta ämne med Tommy Hodgins (en förespråkare för elementfrågor och skapare av eqcss) verkar det som om folk fortfarande är medvetna om både "elementfrågor" och det separata begreppet "containerfrågor". Samförståndet verkar splittras i några olika områden:

Här är ett annat exempel där jag kan ändra CSS baserat på videoens bredd. Helt orelaterad med viewport storlek. pic.twitter.com/O6lbDBJvFf

- Wes Bos 🔥 (@wesbos) 6 oktober 2017

Jag vill ha Houdini. Jag tror att det låter oss skapa koncept som webbläsare kan använda för att gå inbyggda.

- Snook (@ snookca) 6 oktober 2017

Vill du göra ett stänk i web dev världen? Var den som utför en fungerande implementering av behållarfrågor med Houdini. 🤹🏼♂️

- Chris Coyier (@chriscoyier) 10 oktober 2017

Så vad finns på önskelistan för utvecklare?

  1. Skapa en Resize Observer och studera fördelarna med att ge utvecklare en bättre primitiv för att bygga breddbaserade brytpunkter från. Detta är den grundläggande delen vi behöver använda JavaScript för att göra elementfrågor effektivt. Den olyckliga nyheten är att Resize Observer inte är redo, men samhället av dess skapare är hårt på jobbet vilket gör det verklighet. Du kan läsa publiken som vill visa dig om du vill dyka vidare.
  2. Utveckla Houdini till en arbetsmodell och visa den som ett perfekt användningsområde för våra behov. För närvarande arbetar CSS-arbetsgruppen faktiskt med Houdini.
  3. Ge ytterligare ström till utvecklare som använder API: erna som anges av CSS-objektmodellen (en samling API som låter JavaScript prata med och manipulera CSS). Intentionerna av CSS OM-utvecklare är att avslöja nyare, djupare tillgång till hur en webbläsare behandlar och tänker på CSS. Dessa aspekter kommer att tillåta utvecklare att skriva i ett mer CSS plugins-liknande sätt; något vi inte har kunnat uppnå från och med än. Om CSS-objektmodellen gnistor ditt intresse uppmanar jag dig att läsa den specen också.

Houdini Vem?

Tänk dig att du kan skriva ett plugin som fungerade mer som en webbläsare än en JavaScript-plugin. Vad händer om du hade tillgång till att injicera din egen logik i hur en webbläsare analyserar, målar och gör sidor? Vilka saker kan du "lära" webbläsaren istället för att förlita sig på logiken ovanpå sidan för att beräkna?

För närvarande håller vi fast vid hur en webbläsare behandlar CSS, men med Houdini är hoppet att vi ska kunna omorganisera och prioritera så att vi kan beräkna värden med hjälp av intelligenta metoder eller kontrollera rendering för att dölja brister. Javascript- och CSS-objektmodell API låter CSS samma typ av åtkomst, kontroll och kraft som JavaScript och DOM API ger till HTML. Enligt Tab Atkins använder Houdini även Typed OM och Parser API logik och dessa är de underliggande techs för anpassade At-Rules så att du anger Element Query-regler i ditt stylesheet och hanterar dem med JavaScript.

Det finns en webbplats som är avsedd att spåra dess framsteg på ishoudinireadyyet.com, men under tiden får vi överväga några andra potentiella lösningar.

Använd en iFrame; Problemet löst

Att använda iframes att byta element är smart inställning säkert, men tyvärr är det fortfarande inte en sann lösning på problemet; mer en kreativ hacka. Läs mer om detta trick från Tab Atkins bloggar.

CSS Contain (Life Raft ingår ej)

Fastän den inte stabiliseras i specifikationsform, är den här egenskapen avsedd att vara användbar på sidor som innehåller många oberoende widgets. Dokumenterna hävdar att det kan användas för att förhindra att en widgets CSS-regler ändrar andra på sidan. Ett fastighetsvärde av sträng föreslår att det kan undvika många problem med containerfrågor, men det här är inte hela lösningen. bara en bit till pusslet.

En viktig fråga om containerfrågor är att barnen och deras innehåll kan har en effekt på behållarens storlek. Detta kan undvikas i teorin genom att använda CSS-inneslutning, men låt oss undersöka det faktiska problemet som orsakar detta beroende mellan element.

Cykliska beroenden: Container Query Nemesis

Ta en titt på följande prat av Dan Tocchini (du kanske vill börja video från 10:00-märket eftersom Vimeo inte tillåter tidsstämplar).

Varför kan ett element inte lyssna på dess storlek? Cykliska beroenden. Här är en grafik som återskapas från videon ovan för att klargöra:

Varje låda beror på begränsningarna i dess innehållande låda (bredd I detta fall), och det är här de cykliska beroenden uppträder. Det finns ett konstant förhållande mellan dessa bundna element som uppträder naturligt. Denna typ av beteende finns också med :sväva händelser som Tommy Hodgins förklarar i den här videon.

Cykliska beroenden är där en stor bit av folket som använder termen "containerfråga" fastnar eftersom:

  • Det är ett legitimt problem eftersom CSS redan lider av det.
  • Det finns inget utvecklare kan göra för att arbeta runt det eftersom det kräver lite tungt omskrivning till CSS-språket själv.
  • Det skulle kräva några tweaks på webbläsernivå.

Den goda nyheten är att webbläsare börjar visa några bevis på att arbeta kring dessa problem som diskuterats tidigare med Houdini.

Framtida Outlook

Det råkar vara en CSS Element Queries (dröm) spec av Tommy Hodgins; och samtidigt som en drömspecifikation är det väldigt imponerande hur lång tid det tar att faktiskt lägga ord och förslag till konversationen. Han har också sammanställt en webbplats som listar utvecklare som arbetar med containerfrågor med titeln "Vem arbetar med containerfrågor".

Efter all min forskning lämnas jag fortfarande kvar och undrar varför majoriteten av vårt samhälle inte bygger på detta sätt när vi kan? Vi har haft möjlighet att bygga detta sätt före CSS @media stöddes i webbläsaren, men det verkar som vi blev sidospårade. Vi gick från ingen aning om "responsiva bästa praxis", för att upptäcka hur man uppnår olika resultat med hjälp av @media; och det spred sig som ett eldsvamp. Artiklar som diskuterar "Media Query-Free Responsive Layout" med hjälp av smartare visningsmodeller som Flexbox och Grid illustrerar att vi har svårt att skilda tidigt skiljande layout från mediafrågor.

Kolla in den här presentationen av Eric Portis (Contain Your Excitement), där han diskuterar just denna punkt. med så många vägspärrar, hur går vi framåt på webbplattformen som helhet?

Här är några vanliga soundbites som du kommer att höra om elementfrågor:

inte 👏 du 👏🏻 våga 👏🏼 lösa 👏🏽 för 👏🏾 javascript 👏🏿 containerfrågor

- Zach LeatHERMAN 🎃⬆⌨ (@zachleat) 6 oktober 2017
  • Jag tar en titt när det är en godkänd CSS-specifikation (det kan aldrig vara ...)
  • Jag stöder bara det en gång en webbläsare stöder den nativt (funktionerna stöds, men det finns inget socker för elementfrågor specifikt).
  • Jag vill inte använda JavaScript för styling eftersom "Det är Bad®"

Jag tror att intl-lösningar kommer att vara JS-baserade och de kommer att informera CSS-only APIs. Vi bör inte ignorera tmp-lösningar bara för att de behöver JS.

- Phil Walton (@philwalton) 6 oktober 2017

Det känns som om Houdini ibland kan vara ett sätt att säga "vi kan inte bry sig om att slösa bort vår tid på detta så låt oss låta * dem * räkna ut det"

- Sara Soueidan 🐦 (@SaraSoueidan) 6 oktober 2017

Som jag har upplevt under min karriär uttryckte utvecklarna sällan problem med JavaScript för att lägga till stöd för @media med IE8 eftersom vi krävde JavaScript för att lägga till styling power där webbläsare saknade. Men använder du javascript redan i webbläsaren för att förbättra CSS? Det är kätteri för många; även några av dem som är helt nöjda med att använda JavaScript för att samla HTML.

De idéer som nämns i tidigare avsnitt tillåter visserligen att utvecklare ska arbeta med sina egna idéer, men vi måste börja komma ihop oftare, jämföra anteckningar, hitta en standardinriktning och låsa in den. Enligt min personliga uppfattning kommer vi inte att kunna skildra JavaScript från CSS när det gäller elementfrågor så vi måste omfamna det. Vem som helst som väntar på en ren CSS-strategi kan vara på tågdepositionen för många, många år framöver.

Skilja tankar

Använder du elementfrågor i ditt eget arbete? Är elementfrågor en förlorad orsak på grund av de mycket uppfattade synpunkterna? Jag hoppas att den här diskussionen hjälper till att sparka överväganden som tillåter JavaScript att sitta vid bordet så att vi kan bygga exceptionellt flexibla komponenter för det ständigt föränderliga nätet. Skriv alltid dina tankar i kommentarfältet och glatt kodning som alltid.

Speciellt tack

Ett stort tack till Tommy Hodgins för hans tid och värdefull kunskap om detta ämne och också för allt sitt arbete att hålla upp på det här samhällskänsliga ämnet.

Ytterligare länkar

  • Arbetar kring en brist på elementfrågor på Filament Group
  • presto-poäng på GitHub
  • Vad Heck är Element Queries & Container Queries? av Tommy Hodgins
  • GSS: Layout Reimagined på webbdesign varje vecka
  • Element Queries av Tommy Hodgins
  • eqcss på GitHub
  • CSS Element Queries på GitHub
  • cssplus på GitHub
  • Element Query Demos Collection på CodePen
  • Element Queries, och hur du kan använda dem idag i smashing Magazine
  • houdini
  • Avsedd att skicka: ResizeObserver