Tar Bourbon Neat Mixins till nästa nivå

Nu när du har grunderna under ditt bälte, i denna andra handledning om snygga mixiner dyker jag lite djupare ut, utforskar några andra mixins och introducerar en funktion.

Vi ska titta på följande:

Fungera

  • new-brytpunkt

Mixins

  • reset-layout-riktning
  • riktning-kontext
  • display-kontext
  • reset-display
  • fyll-förälder
  • Återställ allt
  • media
  • rad

media

Under de senaste åren har vikten av flexibla mönster som svarat på det ständigt utvecklande landskapet med skärmstorlekar och -enheter gjorts ganska tydligt. I den meningen har Bourbon Neat din rygg och ger dig ett elegant tillvägagångssätt för att hantera mediafrågor för dina nät. Genom att använda smarta målmediafrågor kan din layout anpassas till ett brett utbud av enheter utan att göra en röra. Responsiv design är här för att stanna och en ansvarsfull och hållbar användning av mediefrågor är kung.

Något att undvika är vad du kan ringa fråga spaghetti-en besvärlig röra av mediafrågor som snabbt blir knepigt att behålla. Att hålla mediafrågor hanterbara är av avgörande betydelse. Denna mixin är inte en perfekt motgift, men det uppmuntrar definitivt ett torkat tillvägagångssätt för att hantera mediaspecifika frågor, särskilt när de är parade med new-brytpunkt fungera. Hur hör jag dig fråga?

Du kan skriva mediasökningsblock som kan ta gridkontext. Säg att du har två element som lägger till upp till 12 kolumner, som definieras i $ total kolumner inom din _grid-settings fil. Dessa element spänner över 3 respektive 9 kolumner på skärmstorlekar i skrivbordsstorlek, vilket möjliggör 1088px breda yttre behållare. För mindre enheter eller visningsstorlekar, tillåta media [fråga] mixin vet vid vilken storlek sammanhanget med 12 kolumner behöver byta till ett annat nummer och justera storleken för de responsiva elementen inom det nya sammanhanget i enlighet därmed. Bom!

HAML:

html. container% åt sidan 3 col / 1 col% artikel 9 col / 2 col

sass:

"css kroppsfärg: vit bakgrundsfärg: vit

.behållare + yttre behållare bakgrundsfärg: # f5f5f5

åt sidan, artikelmatning: 10px marginalbotten: 20px höjd: 100px

åt sidan + spänningskolumner (3) bakgrundsfärg: # 81d4fa + media (maxbredd 700px, 4) + spännkolumner (1)

artikel + spaltkolumner (9) bakgrundsfärg: # e64a19 + media (maxbredd 700px, 4) + spännkolumner (2) "

Här gav jag media mixin med en mediefunktion via max bredd 700px och ett nytt grid kontext av 4 kolumner för $ total kolumner maximal bredd av elementet. Har etablerat ett nytt rutnätverk för både åt sidan och artikel element för viewport storlek på 700px max, jag behövde bara berätta för elementen hur många kolumner de nu kan spänna inom den nya summan av 4 kolumner. Personligen tycker jag att det här är ganska läsbart och lätt att organisera. Det blir ännu kallare när du återanvändar mediekontext (mediefråga / rutnät) via new-brytpunkt funktionen och spara dem till en Sass-variabel.

Notera: Om du ger denna mixin med endast ett pixelvärde, utan någon specifik mediefunktion:

sass:

css .some-responsive element + span-kolumner (8) + media (700px) + span-kolumner (4)

då kommer Neat att använda $ Default-funktion vilket är min-bredd. Det är också frivilligt att tillhandahålla ett rutnät och standardinställningar till vad som är inställt $ total kolumner i din _grid-settings partiell.

new-brytpunkt

Du undrar nog vad som händer med DRY-tillvägagångssättet, jag nämnde ett par stycken tidigare, eller hur? Så ska det låta!

Denna praktiska anpassade Sass-funktion är Robin till din media Batman, som hindrar dig från att upprepa dig själv om och om igen. Om du vill göra dina mediafrågor mycket mer läsliga och återanvändbara ser jag inte en bra anledning till att du inte skulle använda denna sidekick för att bekämpa mediasökningsbrott.

Något av Batman-analogi. Enkelt sagt, hela funktionen är att spara mediakontext (mediefråga / rutnät) genom variabler och ge dig möjlighet att återanvända dem i alla dina media mixins. Det är en hel del av en användbar extraktion! Låt oss ta en titt.

sass:

"css $ tablett: ny brytpunkt (min bredd 768px maxbredd 1024px 4)

.lite responsiva element + spänningskolumner (3) + media ($ tablett) + spänningskolumner (1)

.en del-responsiv-element + spänningskolumner (9) + media ($ tablett) + spaltkolumner (2) "

Superläsbar! För att vara säker på att vi är på samma sida: Här anger du alla mediefunktioner du behöver (men inga kommatecken, kolonner, eller, och) plus antalet kolumner för det nya rutnätet, spara sedan det till en Sass-variabel. Allt som är kvar att göra är att mata din media mixins med lämplig variabel, och DRY är de.

Jag hoppas att du kommer att uppskatta hur rent det här läser och hur enkelt det är att tweak dina layouter för olika brytpunkter, allt på ett centralt ställe. Borta är de dagar då man hanterar massor av layoutrelaterade mediefrågor snabbt kan få dig i en fantasifistkamp med ditt tidigare själv.

rad

Jag skulle vilja ta lite extra tid att utforska den här. Om du inte använder bord mycket ofta i dina mönster (som du förmodligen inte skulle, eftersom vi kysste dagarna med att använda tabeller för layoutändamål hejdå) kan det vara svårt att hoppa in direkt.

Grunderna

Du har två huvudalternativ för att använda denna mixin: med argumentet tabell eller utan något argument.

sass:

css .som-rad-element + rad

När man använder rad utan tabell argument, a clearfix läggs till och $ display Ställer som standard, vilket är blockera. Effektivt betyder det att det som kommer efter det utsedda elementet med rad måste starta sin egen sak på en separat "rad".

sass:

css .some-table-row-element + rad (tabell)

Å andra sidan använder man rad (tabell), du gissade det, gör den här raden till en tabelllayout. Vad som händer under huven är bland annat att detta mixin sätter display: bord och tabell layout: fast.

Det finns ytterligare ett alternativ du kan erbjuda denna mixin med. Du kan skicka ett argument ($ riktning med LTR eller RTL) som ändrar riktningen för din layout för den aktuella raden.

sass:

css .some-row-element + rad ($ riktning: RTL)

Men låt oss börja i början. Följande exempel på dummy har 16 element, vars fyra första är nestade under a .rad behållare som använder rad blanda i. Låt oss se vad som händer om du lämnar tabell argument.

HAML:

"html. container

.rad% img% img% img% img

% img% img% img% img

% img% img% img% img

% img% img% img% img "

sass:

"css .container + yttre container bakgrundsfärg: # f5f5f5

.rad + rad

img + span-kolumner (1) höjd: 60px marginalbotten: 5px bakgrundsfärg: # e64a19 "

Som du kan se behandlar webbläsaren de första fyra element som en del av en rad och lägger följande element på en separat rad. Elementen nedanför .rad behållaren är inte bunden till en viss rad och flyter bara nedåt så länge de har plats till dem.

Två .rad behållare resulterar i samma knep, staplade ovanpå varandra.

HAML:

"html. container

.rad% img% img% img% img

.rad% img% img% img% img

% img% img% img% img

% img% img% img% img "

Inte för knepigt antar jag. Även om jag inte är säker på hur användbar detta skulle vara, för att jag instinktivt skulle använda omega mixin för ett sådant tillfälle. Vad som verkar ganska meningslöst använder dock rad (tabell) här. Du skulle bara få en mycket lång kolumn som staplar alla 16 element över varandra. Jag sparar dig otäck skärmdump, men kolla exemplet codepen om du är nyfiken.

Använda rad utan argument på ett bord

Hittills har jag visat dig den grundläggande mekaniken i denna mixin, speciellt om du är ny i spelet. Nu närmar vi oss användbara territorium. Låt oss spela med ett faktiskt bord.

Om du inte har lurat på bord tidigare rekommenderar jag att du brinner upp Google innan du fortsätter. Nedan är en liten överlevnadsguide för dem som behöver uppdatera ett par villkor.

Här har vi en tabell element. Den omfattar en thead tagg, som har en rad för att visa de olika kolumnrubrikerna via th taggar. Nedan hittar du tbody som innehåller de faktiska uppgifterna för varje tabellrad (tr) via td taggar.

HAML:

"html. container

%tabell

% Thead% Tr% Användarnamn% Användare_ID% Favoritpizza% Th Pet% Th Pet Name% th Favoritspel% tbody% tr% td Joe% td 112233% td Pepperoni% td Katt% td Gordon% td Splinter Cell% tr % td Jane% td 223311% td Svampar% td Hund% td Fluffy% td Metal Gear Solid V% tr% td Bob% td 331122% td Lök% td Fisk% td Sharky% td Little Big Planet 2 "

sass:

"css kroppsfärg: vit bakgrundsfärg: vit

.behållare + yttre behållare bakgrundsfärg: mörkare (# f5f5f5, 50%)

tr + rad () text-align: center

paddling: topp: 10px botten: 20px

td höjd: 50px bakgrund: # 81d4fa padding-top: 2px "Detta resulterar i en ojämn, otäck tabellblock, som bara sträcker sig så långt som innehållet i dessa tabelldataceller. Det är uppenbarligen inte super användbart och en smärta om du vill manuellt fixa det här med en massa CSS-regler för att städa upp saker.

Använda rad (tabell)

Det borde finnas en enkel lösning på den här rätten? tillsats tabell som ett argument och display: bord och tabell layout: fast kom till undsättning! För att inte nämna en liten toppning av fyll-förälder under huven.

sass:

css tr + rad (tabell) text-align: center

Notera: En fast tabell layout så här har fördelen att inte bara lägga ut bordet snabbare, men bredden på kolumnerna är inte beroende av innehållet i tabellcellerna. Du får jämnt upplagda rader som sträcker sig över bordets bredd. Ta bort en tabelldatacell (td) och du ser att de andra elementen delar upp utrymmet i den raden jämnt:

Utan rad

Låt oss stänga med ett exempel som visar tabellen som standardbeteende utan använda rad mixin alls.

sass:

"css kroppsfärg: vit bakgrundsfärg: vit

.behållare + yttre behållare bakgrundsfärg: mörkare (# f5f5f5, 50%)

tr text-align: center

paddling: topp: 10px botten: 20px

td höjd: 50px bakgrund: # 81d4fa padding-top: 2px "

Som du kan se är cellerna åtskilda jämnt men använder inte allt tillgängligt utrymme som är tillgängligt för dem. De orienterar sig mot det längsta innehållet per kolumn och anpassar sina celler för att anpassa sig efter dessa linjer.

Ursäkta för att vara alltför omtyckt om rad men jag hoppas att det här avsnittet gjorde några huvudvärk du kan ha med bord och rader lite mindre smärtfri.

fyll-förälder

Att fortsätta erbjuder Neat en enkel lösning om du vill ha ett element för att snabbt fylla sin förälder genom att spänna samma antal kolumner. Du behöver inte ge några argument. Denna mixin är inget fint, men kan vara till nytta när du hanterar mediafrågor eller tabeller.

Notera: Använder sig av span-kolonner (12) istället för fyll-förälder att spänna över hela behållarens bredd skulle inte vara det rätta tillvägagångssättet - det skulle bara lägga till onödigt bagage.

HAML:

html .container% aside Bortsett från 3 kolumner | fill-parent% artikel Artikel 5 kolumner | fyll-förälder

sass:

"css kroppsfärg: vit bakgrundsfärg: vit

.behållare + yttre behållarmarginal-topp: 10px bakgrundsfärg: # f5f5f5

åt sidan, artikel marginal-botten: 5px höjd: 200px

åt sidan + span-kolumner (3) + fyll-förälder bakgrundsfärg: # 81d4fa

artikel + span-kolumner (5) + fyll-förälder bakgrundsfärg: # e64a19 "

Tänk på att element som använder fyll-förälder ignorera andra element i samma rad, och sträva efter att spänna över sin förälders hela bredd utan att överväga sina grannar. Jag antar att den här är enkel, låt oss gå vidare!

riktning-kontext

Varje element i ditt snygga rutnät har en $ Default-layout-riktning som är inställd på LTR (vänster till höger) i inställningar / _grid.scss. Detta betyder att bakom kulisserna använder Neat alltid a riktning-kontext med vänster till höger.

Under huven gör detta mixin ingenting annat än att ändra det applicerade elementets flytriktning. Vad är snyggt är det inom några riktlinjer, låt oss säga vänster till höger, du kan samla en massa rutnät och ändra deras riktning till höger till vänster-allt på en gång, under ett kodblock. Återigen gör den här lösningen allt mer kompakt och läsbar för dig själv, såväl som lättare att förstå för någon som inte är bekant med ett visst projekt.

HAML:

html .container% åt sidan 3 kolumner% artikel 9 kolumner

sass:

"css kroppsfärg: vit bakgrundsfärg: vit

.behållare + yttre behållarmarginal-topp: 10px bakgrundsfärg: # f5f5f5

åt sidan, artikel marginal-botten: 5px höjd: 200px

+riktningskontext (höger till vänster) åt sidan + spänningskolumner (3) bakgrundsfärg: # 81d4fa

artikel + span-kolumner (9) bakgrundsfärg: # e64a19 "

Här är samma demonstration utan riktning-kontext:

Här är ett annat exempel. Inget nytt för nu, det är bara att kolumnerna är lika stora och också flyter från höger till vänster.

HAML:

html. container% åt sidan 3 kolumner% artikel 3 kolumner

sass:

"css kroppsfärg: vit bakgrundsfärg: vit

.behållare + yttre behållarmarginal-topp: 10px bakgrundsfärg: # f5f5f5

åt sidan, artikel marginal-botten: 5px höjd: 200px

+riktningskontext (höger till vänster) åt sidan + spänningskolumner (3) bakgrundsfärg: # 81d4fa

artikel + spaltkolumner (3) bakgrundsfärg: # e64a19 "

Följande lilla tweak har bara en av dessa tre kolumnelement använder mixin, och därför flyter de mot motsatta sidor av behållaren. Inget alltför magiskt, men det här kan vara praktiskt att ha i din väska med tricks.

sass:

"css kroppsfärg: vit bakgrundsfärg: vit

.behållare + yttre behållarmarginal-topp: 10px bakgrundsfärg: # f5f5f5

åt sidan, artikel marginal-botten: 5px höjd: 200px

åt sidan + span-kolumner (3) bakgrundsfärg: # 81d4fa

+riktning-kontext (höger till vänster) artikel + spänningskolumner (3) bakgrundsfärg: # e64a19 "

Sista milen

Den här sista delen av handledningen täcker ett par mixins som jag ville nämna för fullständighetens skull, men som jag personligen försöker undvika eftersom de inte alltid har givit mig de resultat jag förväntade mig. Om du har en bättre upplevelse med hjälp av dem, var snäll och låt mig veta. Dessutom kommer tre av dem snart att avlägsnas:

  • reset-display
  • reset-layout-riktning
  • Återställ allt

reset-layout-riktning

Det finns inte mycket att säga om den här. Föreställ dig att du har ändrat layoutriktningen av någon anledning och vill byta tillbaka till $ Default-layout-riktning (vänster till höger)? Här går du, standardtexten återställs! Inget argument behövs.

sass:

"css .row + row ($ direction: RTL)

.rad återställ-layout-riktning "

När kan det vara användbart? Bra fråga! Dokumentationen säger mestadels när du behöver byta riktning i en enda rad. Personligen skulle jag inte bry mig för mycket. Först och främst är det slated att bli avskedat till förmån för a riktning mixin, och det gav mig en överraskande huvudvärk när jag ville få det att fungera med mediafrågor.

display-kontext

För att skapa ett kodblock som ändrar visningsegenskaperna som används av mixins i sig har du två alternativ som du kan skicka till denna mixin: blockera och tabell. Den första är uppenbar och tabell lägger till display: bordcell till dig. tabell-cell tvingar ett element att bete sig som a td element.

sass:

css + display-context (tabell) .som-cell + spänningskolonner (2)

reset-display

Låt oss säga att du har ändrat den aktiva skärmen till tabell som i exemplet ovan, reset-display hjälper dig att enkelt byta tillbaka till blockera. Det tar inget argument heller. Dokumentationen säger att det är mest användbart om det tillämpas på enstaka rader som har ändrat sina visningsvärden.

sass:

"css .row + row (tabell)

.rad + återställningsvisning "

Återställ allt

Om du vill kombinera reset-display och reset-layout-riktning på en gång, det är vad du ska ta med Återställ allt-inga argument krävs Låt oss säga i en rad du ändrade displayen till tabell och den $ Default-layout-riktning till RTL och vill byta tillbaka.

sass:

"css .row + row (tabell, RTL)

.rad + återställ-allt "

Slutgiltiga tankar

Jo, det var en lång en. Tack för att du har gjort det, och jag hoppas att du tyckte att det var en intressant resa till Neat mixin territory. Det finns ännu en sak att diskutera om; nämligen alla variabler som du har till ditt förfogande för att anpassa ramarna för dina behov. Nästa handledning är en kortare, men bryter upp vår täckning av Neat. Vi ses där!