Crashcursus YUI Grids CSS

De Yahoo User Interface Library is een tamelijk uitgebreide set JavaScript-tools voor ontwikkelaars. Vaak worden ongemerkt een paar andere nuttige onderdelen van de bibliotheek achtergelaten die uw codering versnellen: sommige CSS-bibliotheken. Vandaag wil ik je een rondleiding geven in de YUI Grids CSS-bibliotheek.


Waarom?

Waarom zou u overwegen om de YUI Grids CSS-bibliotheek te gebruiken (hierna "YUI-rasters" genoemd)? Wat onderscheidt het? Ik heb niet uitgebreid naar andere rastersbibliotheken gekeken, maar ik vind deze zaken interessant:

  • Goede naamgevingsconventies

    YUI-rasters maken gebruik van gemakkelijk te onthouden id's en klassen, en schone opmaak; Zodra je het eenmaal hebt geleerd, kun je binnen een maand teruggaan naar je code en weten welke onderdelen van YUI zijn en wat elk stuk doet.

  • Gratis bestandshosting

    Dit vermindert uw belasting twee keer: u hoeft het bestand niet op uw server te hosten en de pagina wordt sneller geladen als de client het bestand in de cache heeft opgeslagen.

  • Compatibiliteit met veelgebruikte advertentieformaten

    Yahoo heeft in zijbalkbreedten gebakken die overeenkomen met de advertentierichtlijnen van het Interactive Advertising Bureau.

  • Veel indelingsopties

    Met meerdere sjablonen en de mogelijkheid om paginagebieden te nesten, claimt Yahoo meer dan 1000 lay-outcombinaties te bieden ... alles in minder dan 5 kb.

Natuurlijk is YUI-rasters niet perfect. Het is een beetje beperkend als het gaat om de voorgebakken breedte van de zijbalk; Als ze echter aan uw behoeften voldoen, bespaart u veel tijd, codering en hoofdpijn tijdens het opmaken van uw site.


Middelen

Als we beginnen, volgen hier een paar hulpmiddelen die van pas zullen komen.

  • De startpagina van YUI Grids CSS: de plaats waar u naartoe gaat nadat u dit artikel hebt gelezen
  • De Grids Builder: een tool waarmee je je pagina kunt bouwen met een paar klikken - geweldige hulp bij het snel onder de knie krijgen van YUI-rasters!
  • De spiekbrief: een PDF van één pagina met alle conventies van de YUI-roosters

Bouw blokken

Voordat we ingaan op de nitty griddy, laten we eens kijken naar de bouwstenen van YUI-grids. Er zijn vijf verschillende structuren waarmee u werkt om uw lay-out te ontwikkelen; elk van deze structuren wordt gedefinieerd door een id of een klasse (meestal een klasse). Ze zijn als volgt:

  1. Document
  2. Sjabloon
  3. Blocks
  4. grids
  5. eenheden

Document

Uiteraard is je hele HTML-bestand het document, maar in ons geval is het ook de div direct in het lichaam - de div die alles bevat. Dit is waar u de breedte van uw site definieert. YUI-rasters geeft je 4 opties voor de breedte: 750px, 950px, 100% of 974px. Deze breedtes zijn eigenlijk geen hard gecodeerde pixels; Het zijn ems, dus de pagina zal vloeiend worden aangepast wanneer uw gebruiker de lettergrootte aanpast. Als deze niet knippen, heeft Yahoo het definiëren van een aangepaste breedte als een koud kunstje gemaakt. Hier is de code om een ​​document 800px breed te maken:

# custom-doc margin: auto; / * deze twee waarden zijn vereist, zoals * / text-align: left; / * ze helpen YUI-rasters de pagina centreren * / width: 61.54em; / * 800px / 13 = em-waarde voor de meeste browsers * / * width: 60.00em; / * 800px / 13.333 = em-waarde voor IE * / min-width: 800px; / * optioneel, maar aanbevolen * /

Gebruik de ID van doc, doc2, doc3 of doc4 om de breedte in te stellen, afhankelijk van de hierboven gegeven waarden.


Sjabloon

Er zijn zeven sjablonen waaruit u kunt kiezen. De eerste zes definiëren een lay-out met twee kolommen; Elke balk heeft een andere breedte of richting voor de zijbalk, waarbij de kolom Hoofdinhoud de rest van de breedte van het document weergeeft. De sjablonen zijn 1) 160 px links, 2) 180 px links, 3) 300 px links, 4) 180 px rechts, 5) 240 px rechts, en 6) 300 px rechts. Om de sjabloon van je wens te krijgen, voeg je eenvoudig een klasse van yui-t # toe aan dezelfde div die je hebt gedefinieerd (vervang de # door de bovenstaande nummers). Zoals ik hierboven al zei, zijn deze zijbalken standaard web-advertentie breedten, dus elke advertentie moet comfortabel binnenin passen.

De zevende template - yui-t7 - is niet zo goed gedocumenteerd (vreemd genoeg staat het niet op de spiekbrief waarnaar ik hierboven heb gelinkt, maar het is op deze oudere versie). Het trekt de zijbalk van elkaar af, u krijgt gewoon een kolom met de volledige breedte (die later in kolommen kan worden verdeeld).


Blocks

De blokken zijn de daadwerkelijke manifestatie van de kolommen die u in de sjabloon hebt gedefinieerd. Het zijn gewoon twee divs binnen de doc div, beide geclassificeerd met yui-b. Gelukkig hoeven ze geen directe kinderen van de hoofdafdeling te zijn; Yahoo geeft dit voorbeeld:

 
<-- Header Content -->
<-- Main Content -->
<-- Sidebar Content -->
<-- Footer Content -->

Je kunt aan het voorbeeld zien dat je de blokken niet direct in de root-div hoeft te plaatsen. Hiermee kunt u een kop- en voettekst over de volledige breedte gebruiken, wat over het algemeen een goed idee is. Je zult opmerken dat het hoofdcontentblok zich binnen een div bevindt met een id van yui-main; Met YUI-rasters krijgt u de mogelijkheid om uw zijbalk of uw hoofdkolom eerst in uw code te plaatsen, wat een voordeel kan zijn wanneer u overweegt SEO of toegankelijkheid te gebruiken.


Grids & eenheden

Ik heb netten en eenheden bij elkaar gegroepeerd omdat ze in werkelijkheid erg op elkaar lijken; beide zijn divs. Een raster (gedefinieerd met klasse yui-g) vertelt feitelijk aan 2 kinderen (meestal eenheden) om de breedte gelijkmatig te verdelen. Een eenheid (klasse yui-u) moet altijd het kind zijn van een raster en de ouder van uw inhoud.

Wat is het verschil tussen een blok en een raster??

  • Blocks
    • Worden alleen gebruikt om algemene paginakolommen te definiëren
    • Worden alleen gebruikt als u sjablonen 1 - 6 gebruikt
    • Worden slechts één keer gebruikt (dus je mag nooit meer dan 2 divs.yui-b op één pagina hebben)
  • grids
    • Worden gebruikt om gebieden (zoals uw hoofdblok of een ander raster) op te delen in kolommen
    • Worden op elke sjabloon gebruikt
    • Zijn nestbaar

Wanneer u meerdere rasters of eenheden in een raster hebt, moet u de eerste eerst classeren. Dit komt omdat niet elke browser de pseudo-klasse biedt: eerste kind.

Maar wat als u een raster ongelijk wilt verdelen? Het leven is niet altijd eerlijk, toch? Gelukkig biedt YUI een aantal alternatieve keuzes voor de yui-g-klasse. Hier is een lijst van de anderen:

  • yui-gb : Neemt 3 eenheden en verdeelt gelijk
  • yui-gc : Neemt 2 eenheden en verdeelt als 2/3 en 1/3
  • yui-gd : Neemt 2 eenheden en verdeelt als 1/3 en 2/3
  • yui-ge : Neemt 2 eenheden en verdeelt als 3/4 en 1/4
  • yui-gf : Neemt 2 eenheden en verdeelt als 1/4 en 3/4

Dat is alles; sla gewoon 2 of 3 eenheden in elk van de bovenstaande rasters en je hebt ongelijke kolommen.


Basis voorbeeld

Nou, nu je de touwen kent, laten we een eenvoudig voorbeeld bespreken. Laten we zeggen dat we de standaard site-indeling willen - u weet wel, de hoofdinhoudskolom met een zijbalk aan de rechterkant - met een beetje een draai: we verdelen de hoofdkolom in twee kleinere en verdelen een van die twee verder in twee.

Zoals ik al zei, biedt Yahoo hosting aan voor dit framework, en het is meestal een goed idee om daar gebruik van te maken. Yahoo adviseert ook de HTML 4.01 strict Doctype, dus dat is wat ik erin heb gestopt. Dit is wat we beginnen:

   Een eenvoudig YUI Grids CSS-voorbeeld      

Stap 1: Documenten en blokken

De eerste stap is om onze document-div en -blokken in te stellen. We kunnen de eerste doc-breedte (750px) behouden en gaan met sjabloon 6, wat ons een rechterzijbalk van 300 pixels geeft.

 

Voor de twee binhoudsloten, moeten we twee divs.yui-b toevoegen. We maken de bovenste kolom de grotere kolom door deze in te pakken met div # yui-main.

MIJN HOOFDDIV. DIV
MIJN SIDEBAR DIV

Super! Dus, hier is wat we tot nu toe hebben: ik ben zo vrij geweest om het een beetje te stylen, zodat je kunt zien wat er aan de hand is.


Stap 2: Rasters en eenheden

Het is nog niet zo indrukwekkend, maar we komen er wel aan. Laten we nu de grotere kolom in twee delen. We kunnen dit bereiken door een div.yui-g (die twee eenheden oud is) erin te plaatsen:

Eerste subkolom
Tweede subkolom

Dit geeft ons twee kolommen aan de linkerkant; niet slecht; laten we de tweede van die kolommen in twee delen. Om dit te doen, moeten we het in een raster veranderen en er twee eenheden in plaatsen.

Eerste subkolom
Eerste sub-subkolom
Tweede sub-subkolom

Dit is een goed voorbeeld van het feit dat roosters en eenheden van gelijke rangorde zijn en naast elkaar kunnen staan: ze verschillen alleen in gebruik.


A Gotcha

Dit brengt me bij een padding-gotcha (die zal uitmonden in een groot voordeel van YUI-grids). Bekijk eerst de code die we tot nu toe hebben geschreven, met een aantal aanvullende tekst:

Uw goede smaak moet het gebrek aan vulling rond de randen van onze kolommen opmerken. Maar dat kan eenvoudig worden opgelost met wat opvulling, zeg, 0.5em-on .yui-u, right?

Yikes! YUI-rasters hebben de breedten voor deze divs ingesteld en omdat opvulling bijdraagt ​​aan de breedte van div, hebben we een overloopprobleem. Een eenvoudige oplossing hiervoor is om de opvulling toe te voegen aan de directe kinderen van de .yui-u.

Om onze kolommen op één lijn te houden en gemakkelijk leesbaar te houden, plaatsen we de opvulling van de alinea's in de .yui-u. Maar ik hoef je daar geen beeld van te laten zien, om erachter te komen dat onze smalle kolommen smaller zijn geworden. Dit is waar we kunnen profiteren van een sterk punt van YUI-netwerken. Laten we de ID op onze root-div veranderen van doc in doc2. Dit is een voor en na:

Door één teken aan onze HTML toe te voegen, kunnen we eenvoudig experimenteren met een bredere lay-out; dat is het mooie van YUI-netwerken. # doc2 is 200 px breder dan #doc, dus nu hebben onze smalle alinea's een comfortabele breedte.


Complex voorbeeld

Dat is een vrij eenvoudig voorbeeld; laten we naar een complexere kijken ... dat is echt niet moeilijker om te maken. We beginnen met de zevende sjabloon - een enkele kolom - met een 750px breed document (#doc) en snijd het anders in meerdere rijen. Dit is waar we beginnen:

   Een complex YUI Grids CSS-voorbeeld    

Omdat we geen sjablonen 1 - 6 gebruiken (die sidebars hebben), hoeven we geen divs.yui-b te hebben. We kunnen meteen beginnen met een paar divs.yui-g; we voegen er 4 toe:


Rij 1

Laten we het bovenste raster verdelen in drie delen; om dit te bereiken, moeten we de klasse veranderen in .yui-gb. Vervolgens plaatsen we gewoon drie divs.yui-u erin en geven de eerste de eerste klas.

       

Een snelle preview van wat we tot nu toe hebben gekregen (nogmaals, ik heb minimale styling toegepast voor duidelijkheid en een vullere tekst ingeslagen):


Rij 2

Voor de tweede rij kunnen we de .yui-gc proberen, die ons twee kolommen geeft; de ene neemt 2/3 en de andere 1/3 in beslag.

     

De minimale styling hiervan vertoont een kleine tekortkoming in het systeem: de tweede rij komt niet perfect overeen met de eerste rij; Naar mijn mening is dit een waardevolle wisselwerking, omdat een verkeerde uitlijning van dit kleine relatief gemakkelijk te maskeren zou zijn.


Rij 3

Voor grid 3 doen we iets geavanceerder: vier kolommen. Hiervoor moeten twee rasters in een raster worden genest, zoals:

Merk op dat we nog steeds de "eerste tot de eerste" regel volgen, zowel op het tweede niveau als op het derde niveau. Dat is echt de enige regel die je moet onthouden; zelfs dit "geavanceerde" werk is vrij eenvoudig. Dit is wat we tot nu toe hebben gekregen.

Voor het laatste raster doen we een eenvoudige splitsing: twee kolommen.

En dat is het! Voor de laatste opname zal ik een beetje marge tussen de rijen toevoegen.

Het is duidelijk dat dit niet helemaal mooi is, maar het potentieel ervan zou net zo voor de hand liggend moeten zijn: ik hoefde geen layout-styling te schrijven. Met het YUI Grids CSS-framework kunt u eenvoudig uw websites snel inrichten en kunt u erop vertrouwen dat deze consistent zijn in alle belangrijke browsers..

Gebruikt u YUI-netten in een project en hebt u er een mening over? Liever een andere roostersbibliotheek? Laat het me weten in de reactie!

Dit artikel is oorspronkelijk geplaatst op de ThemeForest-blog. Momenteel porteren we enkele van de meer populaire artikelen naar Nettuts+.

Code