Hur man bygger en responsiv användargränssnittskomponent med hjälp av elementfrågor

I den här handledningen fortsätter vi vår diskussion om elementfrågor, och vi vänder oss till att bygga en återanvändbar responsiv komponent.

För att återskapa, gör elementfrågor oss att forma ett element baserat på behållarens egenskaper. bredden, höjden och så vidare. Men det är värt att påpeka att elementfrågor är långt ifrån att bli en CSS-standard, och vi måste nog vänta ett par år innan det händer.

Så för tillfället måste vi tillgripa ett JavaScript-bibliotek för att efterlikna liknande funktioner, som EQCSS.

EQCSS

EQCSS är ett JavaScript-bibliotek som utvecklats av Tommy Hodgins. Låt oss titta på några anledningar till att välja detta bibliotek.

Till att börja med ger EQCSS oss en liknande syntax till CSS3 Media Queries standard med @element deklaration. Detta fungerar inom ett stylesheet eller inbäddad i en stil element, därför känner sig mycket intuitivt. I den följande koden staplar vi till exempel menyerna i navigeringen för att hantera navigeringsplatsens (inte visningsportens) krympande utrymme.

.navigering .menu display: inline-block;  @ element ".navigation" och (maxbredd: 480px) .navigation .menu display: block; 

EQCSS erbjuder mer än bara bredd eller höjdbaserade frågor. Det ger också räknebaserade frågor, vilket ger oss möjlighet att tillämpa stilregler baserat på innehållet. antalet tecken, linjer och element som ingår.

.tweetContent // textarea background-color: #eaeaea;  @ element ".tweetContent" och (min-tecken: 100) .tweetContent bakgrundsfärg: # ffc04d; // orange @ element ".tweetContent" och (min-tecken: 140) .tweetContent bakgrundsfärg: # FF3333; // röd färg: #fff; 

Den stöder varierande CSS-enheter inklusive senaste tillägg som vwvhVmin, och vmax

Och för dem som fortfarande behöver stöd för IE8, ger EQCSS en polyfill.

EQCSS är tillgänglig via Bower, NPM, CDNJS och direkt från förvaret i Github. Välj vilket uttag som passar din projektutplacering, och se till att den är laddad på din sida.

Nu, låt oss bygga något!

HTML

Vi ska bygga en användarprofil UI-komponent, och vi börjar med HTML-markupen.

Louie R. Avatar Bild

Louie R.

Midgård

En utvecklare och en frekvent StackOverflow-läsare. Född, uppvuxen och levande på webben. Jag pratar tre språk: HTML, CSS och JavaScript.

Vår komponent består av en avatarbild, användarnamnet, var de bor, en kort biografi och en "följ" -knapp à la Twitter och Medium.

CSS

Först ställer vi in ​​UI-komponentbehållarens bredd och visningsläge till böja. Flexbox-syntaxen i följande kodfragment är oförberedd för tydlighetens skull, så det fungerar bara i de senaste webbläsarna. Om det behövs kan du alltid använda Autoprefixer för att generera äldre syntax samt leverantörs prefix för att stödja äldre webbläsare.

.användarprofil bredd: 100%; max bredd: 640px; display: flex; 

Därefter bestämmer vi breddandelen mellan avatarbilden och profilöversikten som innehåller namn, plats och kortbiografi.

.användarprofil__avatar bredd: 25%; max bredd: 120px; flex: 1 1 120px;  .user-profile__summary width: 75%; stoppning-vänster: 25px; typsnittstorlek: 1em; 

Vi justerar också lite skriftstorleken på användarnamnet och platsen.

.användarprofilnamn font-family: "Montserrat", sans-serif; font-size: 1.3125em;  .user-profile__location font-size: 0.87em; 

Det här är de primära stilreglerna för att visa hur elementfrågor fungerar. De stilistiska reglerna som bakgrundsfärg, text Färg, och box-shadow är helt upp till din smak. I mitt fall verkar det som följer.

Distribuera elementfrågor

Att använda elementfrågor med EQCSS är ganska intuitivt. Som nämnts liknar syntaxen CSS-mediafrågor. Först, som vi visade tidigare, betecknar vi en elementfråga med @element följt med en eller flera elementväljare och fråga villkoret såsom bredden, höjden, rullningsläge etc. av elementet.

@ element "rubrik, nav, sidfot och (min bredd: 100px) och (minhöjd: minhöjd: 300px) // Style rules 

Vi kan nu distribuera det till vår UI-komponent, till exempel, ändra storlek på elementets bredd i behållaren och justera teckenstorleken när behållarens bredd reduceras.

@ element '.user-profil' och (maxbredd: 540px) .user-profil font-size: 0.75em;  .user-profile__avatar maxbredd: 80px; 

Dessutom vill vi att användargränssnittskomponenten är återanvändbar och viktigare att presentera i någon del av webbplatsen oavsett den tillgängliga bredden. Sidopanelen, till exempel, där dess bredd är vanligtvis mindre än 400px. I det här fallet, eftersom bredden är mycket smalare måste vi justera hela komponentens layout.

@ element '.user-profil' och (maxbredd: 380px) . användarprofil padding-top: 30px; vadderande-botten: 30px; display: block; text-align: center;  .user-profile__avatar, .user-profile__summary width: 100%;  .user-profile__avatar margin-right: auto; marginalbotten: 20px; marginal-vänster: auto;  .user-profile__summary padding-left: 0; 

Avslutar

I denna handledning har vi byggt en UI-komponent för att visa en användarprofil. Det är lyhörd, ändras enligt behållaren istället för till utsikten. Du kan titta på demosidan och se till att layouten ändras oberoende av visningsportstorleken. Propert!

Detta är bara ett exempel. Det finns en handfull andra exempel som andra har pekat på var elementfrågor är meningsfulla. 

Kom ihåg; Syntaxen i denna handledning är helt baserad på EQCSS-huruvida W3C-arbetsgruppen kommer att anta det eller skapa egna är obestämda än. Ändå ser jag fram emot att denna idé antas och revolutionerar hur vi bygger webbplatser igen.