Praktische tips voor minder gebruik

Nog niet zo lang geleden hadden we een blik op The Basics of LESS en, hoewel dit een solide referentie is voor beginners, is er veel meer dat je kunt doen met MINDER! Het doel van deze tutorial is om de kennis uit het vorige artikel verder uit te diepen en enkele praktische tips te geven over het gebruik van alle geweldige dingen over MINDER.

De concepten in het vorige artikel zijn essentieel om deze niet te kunnen lezen. Variabelen, mixins, functies en het nesting in MINDER moeten allemaal bekend zijn en je moet op zijn minst enige kennis hebben van MINDER.

Notitie: er is een behoorlijk aantal subjectieve adviezen in dit artikel. Veel dingen die we zullen bespreken hebben te maken met methodologie in tegenstelling tot regels en voorschriften van een taal. Ik zal je laten zien hoe ik bestanden orden en mixins maak, maar er kunnen andere, betere manieren zijn om dingen te doen. Als je denkt dat je een betere structuur gebruikt, of als je zelf wat tips en trics hebt, laat het dan los in de comments.


Bestandsorganisatie

Het organiseren van uw bestanden is altijd uiterst belangrijk, zeker ook voor MINDER. Ik maak meestal een map 'styles' in mijn hoofdprojectdirectory waarin ik alle stijlen opsla die voor dat project zijn vereist. Dus wat gebeurt er als uw project vereist dat u css-bestanden opneemt van meerdere locaties?

De beste manier om uw leven gemakkelijk te maken, is door een tool als Winless of CodeKit te gebruiken. Met deze hulpmiddelen kunt u verschillende bestanden naar verschillende locaties compileren. Op deze manier kunt u al uw stijlbestanden op één locatie bewaren terwijl u ze naar verschillende mappen in uw projecten compileert.

Zoals u kunt zien, is in dit WordPress-project het gemarkeerde 'style.less'-bestand opgenomen in de map' styles '. Omdat WordPress een 'style.css'-bestand in de hoofddirectory nodig heeft, moeten we het daar compileren. CodeKit of een vergelijkbare tool maakt dit gemakkelijk, omdat je het maar één keer hoeft in te stellen en dan kun je het vergeten tot het einde van het project.


Externe bibliotheken

Een ander probleem dat zich kan voordoen met CSS-bestanden is hoe om te gaan met bestanden van derden. Rastersystemen, stijlen voor JavaScript-schuifregelaars, resets en meer vereisen het gebruik van (soms meerdere) CSS-bestanden. Er zijn meestal twee methoden om dit te laten gebeuren. Ofwel koppelt u de bestanden afzonderlijk aan uw webpagina, of plaatst u alle code in één bestand en minimaliseert u deze voor prestatiedoeleinden. Met een LESS-compiler-tool wordt dit weer gemakkelijker!

Met behulp van importregels kunt u alle bestanden naar uw belangrijkste LESS-stylesheet slepen. U kunt ook minder bestanden importeren, waardoor hun regels, mixins en andere elementen bruikbaar zijn in alle volgende bestanden.

Notitie: Hoewel deze methode nuttig is, is het geen universele oplossing. In sommige gevallen moet u mogelijk alle bestanden afzonderlijk opnemen, in andere gevallen kan het best alles in één bestand opnemen.


Consistentie

Het grootste probleem met CSS is het extreme gebrek aan consistentie in bijna alle projecten. Deze situatie komt meestal voort uit de aard van de taal zelf, niet noodzakelijk uit de onbekwaamheid van de programmeur. CSS is een zeer losse en vergevingsgezinde taal, wat betekent dat het configuratie via conventie bevordert, terwijl andersom de voorkeur heeft. Bovendien wordt CSS nog meer procedureel dan normaal gecodeerd, wat betekent dat wereldwijde patronen niet altijd zo eenvoudig worden opgemerkt en geïmplementeerd als ze zouden kunnen zijn..

Hoewel LESS geen cureall is, kun je veel consistenter zijn door je tools zoals functies en nesten te geven. Laten we een paar voorbeelden bekijken waarin u betere consistentie kunt bereiken met MINDER tools.

.radius (@radius: 5px) -webkit-border-radius (@radius); -khtml-border-radius (@radius); -moz-border-radius (@radius); -ie-border-radius (@radius); -o-border-radius (@radius); grensradius (@radius); 

Zonder MINDER zou je deze regels moeten kopiëren als dat nodig is. Veel mensen schrijven gewoon wanneer ze gaan, dus het is veel waarschijnlijker dat u een van de voorvoegsels zou vergeten of ze in een andere volgorde zou schrijven. Hoewel dit geen dealbreakers voor uw website zijn, voegt elke kleine inconsistentie onnodige ruis toe aan uw code.

Het nestbare karakter van regels geeft je ook de kans om je code aan te vullen. Ik probeer zo min mogelijk divs en andere containerelementen te gebruiken en probeer elk element zo specifiek mogelijk te targeten

.commentaarlijst .comment .comment-date .comment-time color: # 888; 

Dit lijkt in eerste instantie een beetje overbodig en ik ben het ermee eens, in zekere zin is het dat wel. Het maakt alles echter super duidelijk.

  • De locatie van elk element kan in een oogopslag worden bepaald
  • Algemene regels voor elk element kunnen nog steeds buiten deze structuur worden opgegeven
  • Het overschrijven van stijlen is veel eenvoudiger
  • Het handhaven van regels en het vinden van fouten is veel eenvoudiger

Het nut hiervan zal alleen duidelijk zijn als je het in een groter project gebruikt, maar hier is een snel fragment dat laat zien hoe een reactie responsief is gemaakt. Onder een specifieke breedte is het tijdsgedeelte van de reactiedatum verborgen om ruimte te besparen.

@media-scherm en (max. breedte: 600px) .commentlist .comment-container .comment-main .comment-header .comment-date . time display: none; 

Ik ben het ermee eens dat dit er vreselijk uitziet. Er is echter niet nagedacht over het creëren van de regel. Geen nadenken betekent eenvoudig terugreizen, omdat je geen slimme trucs hoeft uit te vinden die je onderweg hebt toegevoegd. Ook kun je vertellen wat deze regel doet door ernaar te kijken.

Mijn laatste argument voor consistentie is een complexere, maar ik denk dat het de moeite waard is om ernaar te kijken. Ik bouw WordPress-thema's te koop op ThemeForest en een functie is dat je elke kleur voor je thema kunt kiezen. Elementen worden opnieuw gekozen naar keuze. De manier waarop dit wordt gedaan, is dat telkens wanneer een 'primaire kleur' ​​wordt gedefinieerd, deze wordt overschreven met dynamische CSS-code die we met PHP uitvoeren. Dit ziet er ongeveer zo uit:

Inhoud van ons LESS-bestand:

@ color-primary: red; .button background: @ color-primary; opvulling: 8px 20px; 

Inhoud van een PHP aan het einde van de HTML-header:

 

Kortom, wanneer er een verwijzing is naar '@ color-primary' in het LESS-bestand, moeten we een PHP-regel maken om ervoor te zorgen dat de door de gebruiker gekozen kleuren worden weergegeven op de site. Dit kan een tijdje duren en wat nog belangrijker is uiterst saai. Om de verveling te bestrijden, maken we een script dat ons LESS-bestand parseert en de PHP-code maakt die we in één keer kunnen kopiëren en plakken. Dit is een beetje moeilijk omdat er enkele dynamische regels zijn met functies en zo niet, maar om dit te voorkomen moet ons LESS-bestand goed gestructureerd en consistent zijn.


Bibliotheken met regels maken

Een geweldige tijdwinst en een manier om de consistentie tussen projecten te vergroten, is door een gemeenschappelijke bibliotheek met regels te gebruiken. Eerder vroeg ik; waarom schrijf je alle grensstraalregels uit wanneer we een mixin kunnen gebruiken? Nu kunnen we een niveau hoger springen. Waarom de grensradiusmixin voor elk project herschrijven wanneer u dezelfde kunt gebruiken?

Er zijn een aantal mixins (vooral degene die leverancierspecificaties aanpakken) die voor alle projecten hetzelfde zullen zijn. Deze kunnen worden gescheiden in een 'mixins.less'-bestand dat u overal kunt gebruiken. Hier zijn enkele voorbeelden van mixins die altijd handig zijn om rond te hebben.

ondoorzichtigheid

.opacity (@opacity: 0.8) @ieopacity: @opacity * 100; filter: ~ "alpha (opacity = @ ieopacity)"; -khtml-dekking: @opacity; -moz-opacity: @opacity; dekking: @opacity; 

Verlopen

.gradient (@start, @end) background: @start; filter: ~ "progid: DXImageTransform.Microsoft.gradient (startColorstr =" @ start ", endColorstr =" @ end ", GradientType = 0)"; achtergrond: -webkit-gradiënt (lineair, linker boven, links onder, kleur-stop (0%, @ start), kleur-stop (100%, @ einde)); achtergrond: -webkit-lineaire gradiënt (boven, @start 0%, @end 100%); achtergrond: -moz-linear-gradient (boven, @start 0%, @end 100%); achtergrond: -ms-lineaire gradiënt (boven, @start 0%, @end 100%); achtergrond: -o-lineaire gradiënt (bovenkant, @start 0%, @end 100%); achtergrond: lineair verloop (boven, @ start 0%, @end 100%); 

Dynamische kleuren

.element-kleur (@color) wanneer (lichtheid (@color)> = 60%) color: @color - # 888;  .element-color (@color) when (lichtheid (@color) < 60% )  color: #fff; 

Deze laatste is vooral cool. Als de achtergrondkleur licht is, is de tekstkleur een erg donkere versie van dezelfde kleur.


Projectspecifieke regels

Ik stel voor om altijd na te denken over de plaatsing van de regel die u schrijft. Weet je zeker dat het wereldwijd wordt gebruikt voor alle projecten? Het is misschien verleidelijk om daar heel wat regels in te zetten, maar in werkelijkheid kan het beter zijn om ook een projectspecifiek bestand aan te maken.

Weet je nog eerder het plaatje van de opmerking? De container van dat element heeft een specifiek formaat. Het heeft een witte rand en een grijze omtrek. Veel andere elementen in dit thema delen dit patroon. Dit kan worden gemaakt met een regel zoals:

 .box border: 1px solid #fff; outline: 1px solid #dedede;  .comment .box; achtergrond: #eeeeee; 

Terwijl dit is hier overal gebruikt, zal het niet hetzelfde zijn voor meerdere projecten. Daarom zou het beter zijn om een ​​bestand aan te maken als 'mytheme.less' dat deze veel gebruikte, maar themaspecifieke regels bevat. Als je echt iets als in het globale bestand wilt gebruiken, zou je het als volgt kunnen uitbreiden:

.box-bounded (@ border-color: #fff, @ outline-color: #dedede) border: 1px solid @ border-colour; outline: 1px solid @ outline-kleur; 

Met deze regel kunt u dezelfde kaderstijl net zo eenvoudig maken, maar u kunt ook parameters toevoegen om doosvakken met verschillend gekleurde randen te maken. Je kunt dit nog een stap verder doen door nog meer dingen te abstraheren en een 'bootstrap.less'-bestand te maken; dit brengt ons mooi bij ons volgende onderwerp, het creëren van een raamwerk voor onszelf.

Gedefinieerd in ons bootstrap-bestand

@ border-box-border-colour: #fff; @ border-box-outline-color: #edede;

In het cross-project 'mixins.less'

.box-bounded (@bc: @ border-box-border-colour, @oc: @ border-box-outline-colour) border: 1px solid @bc; overzicht: 1px solid @oc; 

Roll Your Own Framework

Je eigen framework maken is meestal een no-no, tenzij je erg geavanceerd bent in je hoofdveld (en 5-6 anderen) en daar heb je heel goede redenen voor. Met CSS en LESS is het een beetje anders; je kunt vanaf dag één beginnen met het maken van je eigen frame. Omdat LESS een superset van CSS is, past alles wat je doet netjes in de bestaande code. Omdat CSS vergevingsgezind en trager verloopt, kun je geen permanente schade aanrichten die niet ongedaan kan worden gemaakt.

Ik stel voor om eerst een 'mixins' bestand te maken. Je kunt er altijd dingen uit verwijderen of er waar nodig aan toevoegen. Later kunt u projectspecifieke bestanden, externe bestanden, een bootstrap-bestand enzovoort toevoegen. Dit is hoe mijn framework is georganiseerd.

  • Een bootstrap-bestand wordt gebruikt om variabelen in te stellen die nodig zijn
  • Het hoofdframe-bestand is inbegrepen. Dit bestand importeert verschillende bestanden:
    • Het mixins-bestand
    • Stijlen resetten
    • Grid-systeem
  • Projectspecifieke regels zijn inbegrepen
  • Er zijn stijlen van derden toegevoegd

Conclusie

Zoals met elke taal, bevatten de praktische aspecten van coderen veel verschillende uitdagingen en technieken die niet kunnen worden ontdekt en overwonnen door alleen naar documentatie te kijken. Om LESS volledig te gebruiken, moet je suggesties lezen en de logica proberen op te nemen, maar uiteindelijk zul je ervaring moeten opdoen. Consistentie, logica en eenvoud moeten uw leidende woorden zijn en LESS biedt u alle tools om dit te bereiken.

Tot slot zou ik uw input toejuichen en zou ik graag horen hoe u LESS organiseert en hoe u het in uw projecten implementeert. Bedankt voor het lezen!