Tar Bourbon Neat Mixins til neste nivå

Nå som du har det grunnleggende under beltet ditt, i denne andre opplæringen om Neat mixins vil jeg dykke litt dypere, utforske noen andre mixins og introdusere en funksjon.

Vi skal se på følgende:

Funksjon

  • ny-stoppunkt

mixins

  • reset-layout-retningen
  • retning-kontekst
  • skjerm-kontekst
  • reset-skjerm
  • fylle-foreldre
  • Tilbakestill alt
  • media
  • rad

media

I løpet av de siste årene har betydningen av fleksible design som reagerer på det stadig evolusjonerende landskapet med skjermstørrelser og enheter, blitt gjort ganske klart. I denne forstand har Bourbon Neat ryggen din, og gir deg en elegant tilnærming til å håndtere medieforespørsler for nettene dine. Gjennom bruk av smarte målrettede medieforespørsler kan layoutet tilpasses et bredt spekter av enheter uten å gjøre rot. Responsive design er her for å bli og en ansvarlig og bærekraftig bruk av medieforespørsler er konge.

Noe å unngå er det du kan ringe spørre spaghetti-et tøff rot av medieforespørsler som raskt blir vanskelig å vedlikeholde. Å holde mediespørsmål håndterbare er av avgjørende betydning. Denne blandingen er ikke en perfekt motgift, men det oppfordrer definitivt en tørr tilnærming til å håndtere medieforespørsler sunt - spesielt når det er parret med ny-stoppunkt funksjon. Hvordan hører jeg deg spørre?

Du kan skrive mediequeryblokker som kan ta gridkontekster. Si at du har to elementer som legger opp til 12 kolonner-som definert i $ total-kolonner innenfor din _grid-innstillinger fil. Disse elementene spenner over henholdsvis 3 og 9 kolonner på skjermstørrelsesskjermer, som gir mulighet for 1088px brede ytre beholdere. For mindre enheter eller visningsstørrelser, tillat media [spørring] mixin vet i hvilken størrelse konteksten til 12 kolonner må bytte til et annet tall og justere størrelsen på de responsive elementene i den nye konteksten tilsvarende. boom!

Haml:

html. container% til side 3 col / 1 col% artikkel 9 col / 2 col

Sass:

"css kroppsfarge: hvit bakgrunnsfarge: hvit

.container + ytre beholder bakgrunnsfarge: # f5f5f5

til side, artikkelpostering: 10px margin-bunn: 20px høyde: 100px

bortsett fra + span-kolonner (3) bakgrunnsfarge: # 81d4fa + media (maksimal bredde 700px, 4) + spansøyler (1)

artikkel + span-kolonner (9) bakgrunnsfarge: # e64a19 + media (maksimal bredde 700px, 4) + span-kolonner (2) "

Her ga jeg til media mixin med en mediefunksjon via maksimal bredde 700px og en ny grid kontekst av 4 kolonner for $ total-kolonner max bredde av elementet. Etter å ha etablert en ny grid kontekst for begge side og artikkel elementer for visningsstørrelsen på 700 piksler max, jeg trengte bare å fortelle elementene hvor mange kolonner de nå kan spenne innenfor den nye summen av 4 kolonner. Personlig tror jeg dette er ganske darn lesbart og enkelt å organisere. Det blir enda kjøligere når du gjenbruker mediekontekster (media spørring / grid kontekst) via ny-stoppunkt fungere og lagre dem i en Sass-variabel.

Merk: Hvis du gir denne mixin kun en pikselverdi, uten noen spesiell mediefunksjon:

Sass:

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

så vil Neat bruke $ Default-funksjonen som er en minstebredde. Også, å gi en grid kontekst er valgfritt og standard til hva som er satt gjennom $ total-kolonner i din _grid-innstillinger delvis.

ny-stoppunkt

Du lurer sikkert på hva som skjer med DRY-tilnærmingen jeg nevnte et par avsnitt tidligere, ikke sant? Det er ånden!

Denne praktiske tilpassede Sass-funksjonen er Robin til din media Batman, holder deg fra å gjenta deg selv igjen og igjen. Hvis du vil gjøre medieforespørsmålene dine mye mer lesbare og gjenbrukbare, ser jeg ikke en god grunn til at du ikke ville bruke dette sidekicket til å bekjempe mediaforespørsler.

Nok av Batman-analogien. Enkelt sagt, hele denne funksjonen er å lagre mediekontekster (mediesøk / grid-kontekst) gjennom variabler og gi deg muligheten til å gjenbruke dem i alle dine media mixins. Det er en hakke av en nyttig utvinning! La oss ta en titt.

Sass:

"css $ tablett: nytt bruddpunkt (min bredde 768px maksimal bredde 1024px 4)

.lite responsivt element + spenningskolonner (3) + media ($ tablett) + sperrekolonner (1)

.noen-andre-responsive-element + span-kolonner (9) + media ($ tablet) + span-kolonner (2) "

Superlesbar! For å være ekstra sikker på at vi er på samme side: Her gir du alle mediefunksjonene du trenger (men ingen kommaer, kolonner, eller, og) pluss antall kolonner for den nye grid-konteksten, lagre den deretter til en Sass-variabel. Alt som er igjen å gjøre er å mate din media mixins med riktig variabel, og DRY de er.

Jeg håper du vil sette pris på hvor rent dette leser og hvor enkelt det er å finjustere layoutene dine for ulike bruddpunkter, alt på ett sentralt sted. Borte er de dagene hvor man håndterer tonn med layoutrelaterte medieforespørsler, kan raskt få deg i en fantasifestekamp med ditt tidligere selv.

rad

Jeg vil gjerne ta litt ekstra tid til å utforske denne. Hvis du ikke bruker bord svært ofte i designene dine (som du sannsynligvis ikke burde ha siden da vi kysset dagene med å bruke tabeller for layoutformål, farvel), kan dette være vanskelig å hoppe inn med en gang.

Grunnleggende

Du har to hovedalternativer for bruk av denne mixin: med argumentet bord eller uten noe argument.

Sass:

css.some-row-element + rad

Når du bruker rad uten bord argument, a clearfix er lagt til og $ skjerm forblir satt til standard, som er blokkere. Effektivt betyr det at det som kommer etter at det utpekte elementet bruker rad må starte sin egen ting på en egen "rad".

Sass:

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

På den annen side bruker rad (tabell), du gjettet det, gjør denne raden en del av et bordoppsett. Hva som skjer under hetten, er blant annet at denne blandingen settes skjerm: bord og bordoppsett: fast.

Det er en ekstra mulighet du kan gi denne mixin med. Du kan passere et argument ($ retning med LTR eller RTL) som endrer retningen til oppsettet for den aktuelle raden.

Sass:

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

Men la oss starte i begynnelsen. Følgende dummy eksempel har 16 elementer, de fire første er nestet under a .rad beholder som bruker rad mixin. La oss se hva som skjer hvis du går av bord argument.

Haml:

"html .container

.rad% img% img% img% img

% img% img% img% img

% img% img% img% img

% img% img% img% img "

Sass:

"css .container + ytre beholder bakgrunnsfarge: # f5f5f5

.rad + rad

img + span-kolonner (1) høyde: 60px margin-bunn: 5px bakgrunnsfarge: # e64a19 "

Som du kan se, behandler nettleseren de første fire elementer som en del av en rad, legger følgende elementer på en egen rad. Elementene under .rad Beholderen er ikke bundet til en bestemt rad og flyter bare nedover så lenge de har plass til dem.

To .rad beholdere resulterer i det samme trikset, stablet på toppen av hverandre.

Haml:

"html .container

.rad% img% img% img% img

.rad% img% img% img% img

% img% img% img% img

% img% img% img% img "

Ikke for vanskelig jeg antar. Selv om jeg ikke er sikker på hvor nyttig dette ville være, fordi instinktivt vil jeg heller bruke omega mixin for en slik anledning. Det som virker ganske ubrukelig, bruker imidlertid rad (tabell) her. Du vil bare få en veldig lang kolonne som stabler alle 16 elementene over hverandre. Jeg sparer deg for det ekle skjermbildet, men sjekk ut kodespillet hvis du er nysgjerrig.

Bruke Row uten et argument på et bord

Så langt har jeg vist deg de grunnleggende mekanikkene til denne mixin, spesielt hvis du er ny i spillet. Nå nærmer vi oss nyttig territorium. La oss spille med en faktisk tabell.

Hvis du ikke har lurt med tabeller før, anbefaler jeg at du skyter opp Google før du fortsetter. Nedenfor er en liten overlevelsesguide for de som trenger å oppdatere et par vilkår.

Her har vi en bord element. Den består av a thead tag, som har en rad for å vise de forskjellige kolonneoverskriftene via th tags. Under finner du tbody som huser de faktiske dataene for hver tabellrad (tr) via td tags.

Haml:

"html .container

%bord

%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % td Jane% td 223311% td sopp% 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 kroppsfarge: hvit bakgrunnsfarge: hvit

.container + ytre beholder bakgrunnsfarge: mørkere (# f5f5f5, 50%)

tr + rad () tekstjustering: senter

t polstring: topp: 10px bunn: 20px

td høyde: 50px bakgrunn: # 81d4fa padding-top: 2px "Dette resulterer i en ujevn, ekkel tabellblomst, som bare strekker seg så langt som innholdet i disse tabelldataceller. Tydeligvis ikke super nyttig og en smerte hvis du vil manuelt fikse dette ved hjelp av en haug med CSS-regler for å rydde opp ting.

Bruke rad (tabell)

Det bør være en enkel løsning på denne rettigheten? legge bord som et argument og skjerm: bord og bordoppsett: fast kom til redning! For ikke å nevne en liten topping av fylle-foreldre under panseret.

Sass:

css tr + rad (tabell) tekstjustering: senter

Merk: Et fast bordoppsett som dette har fordelen av ikke bare å legge bordet raskere, men bredden på kolonnene er ikke avhengig av innholdet i tabellcellene. Du får jevnt lagt ut rader som strekker seg over bordbeholderens bredde. Fjern en tabelldatakelle (td) og du vil se de andre elementene dele opp plassen i den raden jevnt:

Uten rad

La oss lukke med et eksempel som viser standardoppførelsen til tabeller uten bruker rad mixin i det hele tatt.

Sass:

"css kroppsfarge: hvit bakgrunnsfarge: hvit

.container + ytre beholder bakgrunnsfarge: mørkere (# f5f5f5, 50%)

tr tekstjustering: senter

t polstring: topp: 10px bunn: 20px

td høyde: 50px bakgrunn: # 81d4fa padding-top: 2px "

Som du kan se, er cellene fordelt jevnt, men ikke bruk alle de tildelte plassene som er tilgjengelige for dem. De orienterer seg til det lengste innholdet per kolonne og justerer sine celler for å justere seg langs disse linjene.

Unnskyld for å være altfor forvirret om rad men jeg håper denne delen gjorde noen hodepine du kanskje har med bord og rader litt mindre smertefri.

fylle-foreldre

Fortsett, tilbyr Neat en enkel løsning hvis du vil ha et element for raskt å fylle sin forelder ved å spenne det samme antall kolonner. Du trenger ikke å gi noen argumenter. Denne mixin er ikke noe fancy, men kan være nyttig når du håndterer medieforespørsler eller -tabeller.

Merk: Ved hjelp av span-kolonner (12) i stedet for fylle-foreldre å spenne hele bredden på en ytre beholder ville ikke være den rette tilnærmingen - det ville bare legge til unødvendig bagasje.

Haml:

html .container% side side Til side 3 kolonner | fill-parent% artikkel Artikkel 5 kolonner | fylle-foreldre

Sass:

"css kroppsfarge: hvit bakgrunnsfarge: hvit

.container + ytre beholdermargin-topp: 10px bakgrunnsfarge: # f5f5f5

til side, artikkel margin-bunn: 5px høyde: 200px

bortsett fra + span-kolonner (3) + fill-parent bakgrunnsfarge: # 81d4fa

artikkel + span-kolonner (5) + fill-parent bakgrunnsfarge: # e64a19 "

Husk at elementene bruker fylle-foreldre ignorerer andre elementer i samme rad, og tar sikte på å spenne foreldrenes fullbredde uten å vurdere sine naboer. Jeg antar at denne er rettferdig nok, la oss gå videre!

retning-kontekst

Hvert element i ditt ryddige rutenett har en $ Default-layout-retning som er satt til LTR (venstre til høyre) i innstillinger / _grid.scss. Dette betyr at bak kulissene Neat alltid bruker en retning-kontekst med venstre til høyre.

Under hetten gjør denne blandingen ingenting annet enn å endre flattretningen til det påførte elementet. Hva er ryddig er det innen noen retningskontekst, la oss si venstre til høyre, du kan samle en haug med gitterelementer og endre retningen til høyre til venstre-alt på en gang, under en kodeblokk. Igjen gjør denne løsningen ting kompaktere og lesbare for deg selv, så vel som lettere å forstå for noen som ikke er kjent med et bestemt prosjekt.

Haml:

html .container% til side 3 kolonner% artikkel 9 kolonner

Sass:

"css kroppsfarge: hvit bakgrunnsfarge: hvit

.container + ytre beholdermargin-topp: 10px bakgrunnsfarge: # f5f5f5

til side, artikkel margin-bunn: 5px høyde: 200px

+retningskontekst (høyre til venstre) til side + span-kolonner (3) bakgrunnsfarge: # 81d4fa

artikkel + span-kolonner (9) bakgrunnsfarge: # e64a19 "

Her er den samme demonstrasjonen uten retning-kontekst:

Her er et annet eksempel. Ingenting nytt for nå, det er bare at kolonnene er like store og også flyter fra høyre til venstre.

Haml:

html. container% til side 3 kolonner% artikkel 3 kolonner

Sass:

"css kroppsfarge: hvit bakgrunnsfarge: hvit

.container + ytre beholdermargin-topp: 10px bakgrunnsfarge: # f5f5f5

til side, artikkel margin-bunn: 5px høyde: 200px

+retningskontekst (høyre til venstre) til side + span-kolonner (3) bakgrunnsfarge: # 81d4fa

artikkel + span-kolonner (3) bakgrunnsfarge: # e64a19 "

Følgende lille tweak har bare en av disse tre kolonneelementene, bruk mixin, og derfor flyter de til motsatte sider av beholderen. Ingenting er for magisk, men dette kan være nyttig å ha i posen med triks.

Sass:

"css kroppsfarge: hvit bakgrunnsfarge: hvit

.container + ytre beholdermargin-topp: 10px bakgrunnsfarge: # f5f5f5

til side, artikkel margin-bunn: 5px høyde: 200px

bortsett fra + span-kolonner (3) bakgrunnsfarge: # 81d4fa

+retning-kontekst (høyre til venstre) artikkel + span-kolonner (3) bakgrunnsfarge: # e64a19 "

Siste Mile

Denne siste delen av opplæringen dekker et par mixins jeg ønsket å nevne for fullstendig skyld, men som jeg personlig prøver å unngå siden de ikke alltid har gitt meg de resultatene jeg forventet. Hvis du har en bedre opplevelse med å bruke dem, vennligst gi meg beskjed. Dessuten blir tre av dem snart avskrevet:

  • reset-skjerm
  • reset-layout-retningen
  • Tilbakestill alt

reset-layout-retningen

Det er ikke mye å si om dette. Tenk deg at du har endret layoutretningen uansett grunn og vil bytte tilbake til $ Default-layout-retning (venstre til høyre)? Her går du, standardkonteksten blir gjenopprettet! Ingen argument nødvendig.

Sass:

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

.rad reset-layout-retning "

Når kan dette være nyttig? Godt spørsmål! Dokumentasjonen sier det meste når du må endre retning i en enkelt rad. Personlig ville jeg ikke bry meg for mye. Først av alt er det slated å bli avskrevet til fordel for a retning mixin, og det ga meg en overraskende hodepine da jeg ønsket å få det til å fungere med medieforespørsler.

skjerm-kontekst

For å opprette en kodeblokk som endrer visningsegenskapene som brukes av mixins i seg selv, har du to alternativer du kan sende til denne mixin: blokkere og bord. Den første er åpenbar og bord legger display: tabell-celle for deg. Tabellen-celle- tvinger et element til å oppføre seg som a td element.

Sass:

css + vise-kontekst (tabell) .some-celle + span-kolonner (2)

reset-skjerm

La oss si at du har endret den aktive skjermen til bord som i eksemplet ovenfor, reset-skjerm hjelper deg enkelt å bytte tilbake til blokkere. Det tar heller ikke noe argument. Dokumentasjonen sier at den er mest nyttig hvis den brukes på enkeltrader som har endret visningsverdiene.

Sass:

"css .row + row (table)

.rad + reset-display "

Tilbakestill alt

Hvis du vil kombinere reset-skjerm og reset-layout-retningen på en gang, det er det du får med deg Tilbakestill alt-ingen argumenter kreves. La oss si på en rad du endret skjermen til bord og $ Default-layout-retning til RTL og ønsker å bytte tilbake.

Sass:

"css .row + row (tabell, RTL)

.rad + reset-all "

Siste tanker

Vel, det var en lang en. Takk for at du har gjort det, og jeg håper du fant det å være en interessant reise inn i Neat mixin territorium. Det er enda en ting å diskutere om; nemlig alle variablene du har til rådighet for å tilpasse rammen for dine behov. Den neste opplæringen er en kortere, men bryter opp vår dekning av Neat. Ser deg der!