Bouw een Twitter Clone From Scratch The Design

Dit artikel vertegenwoordigt de eerste in een nieuwe groepsinspanning van de Nettuts + -medewerkers, die het hele proces van het ontwerpen en bouwen van een web-app vanaf nul dekken - in meerdere talen! We zullen een fictieve Twitter-kloon, Ribbit, gebruiken als basis voor deze serie.

In deze zelfstudie moeten we ons richten op de gebruikersinterface. We zullen gebruik maken van de populaire LESS Preprocessor om onze CSS zo beheersbaar mogelijk te maken.


Invoering

Download de items voor deze zelfstudie als u meewerkt.

Deze tutorial is verdeeld in vijf grote delen, waarin wordt uitgelegd hoe verschillende pagina's van de Ribbit-lay-out moeten worden vormgegeven. Ik zal verwijzen naar HTML-elementen met behulp van CSS-kiezers om het gemakkelijker te begrijpen te maken. Maar voordat je in de lay-out duikt, zullen we het kort bespreken over nesten.

nesting

In CSS kan het verwijzen naar een genest element resulteren in lange selectors. Bijvoorbeeld:

 someId / * ... * / someId div.someClass / * ... * / someId div.someClass p.someOtherClass / * ... * / someId div.someClass p.someOtherClass target / * ... * /

En het kan nog groter worden! Met MINDER kun je het ene element in het andere nesten, waardoor het gemakkelijker te lezen is:

 someId / * ... * / div.someClass / * ... * / p.someOtherClass / * ... * / target / * ... * /

Variabelen en mixins

Maak een nieuw bestand en noem het, style.less. Bij het gebruik van een preprocessor in stijl, is het een goed idee om belangrijke kleuren en groottes op te slaan in variabelen; u kunt hun waarden eenvoudig aanpassen zonder het bestand te doorzoeken, op zoek naar eigenschapswaarden die u moet wijzigen. We zullen een handvol variabelen gebruiken voor de tekstkleur, randkleur en inhoudsbreedte:

 @ tekstkleur: # 3F3E3D; @ border-colour: # D2D2D2; @ content-width: 860px;

Laten we nu twee mixins maken. De eerste zal de illusie van anti-aliased tekst creëren en de tweede zal cross-browser gradiënten mogelijk maken. De eerste is vrij eenvoudig:

 .anti-aliasing (@color) color: @color; text-shadow: @color 0 0 1px; 

De kunst is om een ​​schaduw onder de tekst te maken met dezelfde kleur en een spread van één pixel, waardoor de browser een mooie schaduw rondom de tekst weergeeft.

Nu voor het verloop; dit is ingewikkelder dan de anti-aliased tekst, omdat elke browser gradaties anders implementeert. Zodra we de verschillende voorvoegsels van leveranciers hebben gecompenseerd, is hier de code:

 .gradient4f (@ p1, @ c1, @ p2, @ c2, @ p3, @ c3, @ p4, @ c4) background: @ c1; achtergrond: -moz-lineaire gradiënt (top, @ c1 @ p1, @ c2 @ p2, @ c3 @ p3, @ c4 @ p4); achtergrond: -webkit-gradiënt (lineair, linksboven, linksonder, kleur-stop (@ p1, @ c1), kleur-stop (@ p2, @ c2), kleur-stop (@ p3, @ c3), kleur- stop (@ p4, @ c4)); achtergrond: -webkit-lineaire gradiënt (boven, @ c1 @ p1, @ c2 @ p2, @ c3 @ p3, @ c4 @ p4); achtergrond: -o-lineaire gradiënt (top, @ c1 @ p1, @ c2 @ p2, @ c3 @ p3, @ c4 @ p4); achtergrond: -ms-lineaire gradiënt (top, @ c1 @ p1, @ c2 @ p2, @ c3 @ p3, @ c4 @ p4); achtergrond: lineaire gradiënt (naar beneden, @ c1 @ p1, @ c2 @ p2, @ c3 @ p3, @ c4 @ p4); 

Elke browser heeft een voorvoegsel: -moz- voor Firefox, -webkit- voor Chrome, etc. De laatste regel gebruikt de door W3C aanbevolen versie voor verlopen. Als een browser dit ondersteunt, heeft dit voorrang boven de vorige eigenschappen, omdat dit de laatste is achtergrond eigendomsverklaring in de regel. De lineaire gradiënt functie accepteert acht parameters: vier paren percentagekleurwaarden. Het maakt het verloop met vier kleurstappen.


Wereldwijde stijlen

Laten we hierna een aantal globale elementen stylen, zoals voor knoppen en links. We willen dat alle elementen de Helvetica of Arial lettertypen met de eerder gedefinieerde tekstkleur:

 * font-family: sans-serif; kleur: @ tekstkleur; 

Lichaam

Het lichaam is vrij eenvoudig; we hebben een witte achtergrond met een op afbeeldingen gebaseerd patroon nodig. Er zijn geen marges en opvulling:

 body background: white url (gfx / bg.png); marge: 0; opvulling: 0; 

ingangen

We bieden ook een standaardstijl voor iedereen elementen op de pagina:

 invoer breedte: 236px; hoogte: 38 px; rand: 1px solid @ border-kleur; opvulling: 0 10px; overzicht: geen; lettergrootte: 17px; &: focus background: # FFFDF2; 

We hebben de standaardgrootte en opvulling ingesteld en we gebruiken de @rand kleur variabele om de vervelende blauwe omtrek te verwijderen wanneer het element is scherpgesteld. Je zou een ander beetje MINDER suiker moeten opmerken: we kunnen CSS pseudo-klassen (en ook normale klassen) toevoegen met behulp van de & teken (bovenliggende verwijzing), zoals hier getoond:

 &: focus background: # FFFDF2; 

Dit zorgt ervoor dat de invoer een lichtgele achtergrond heeft, wanneer deze is scherpgesteld.

onderwerpt

Als u knoppen indient, gebruikt u zowel de eerder gedefinieerde mixin als de border-radius om een ​​mooi effect te creëren:

 invoer [type = "submit"] height: 36px; rand: 1px vast # 7BC574; grensradius: 2px; kleur wit; lettergrootte: 12px; lettertype: vet; opvulling: 0 20px; cursor: pointer; .gradient4f (0%, # 8CD585, 23%, # 82CD7A, 86%, # 55AD4C, 100%, # 4FA945); 

Links

De links moeten een andere kleur hebben dan de normale tekst. We zullen ze ook onderstrepen met de muisaanwijzer:

 een text-decoration: none; .antialiased (# 58B84E); &: hover text-decoration: onderstrepen; 

Basis sjabloon

We beginnen met het gedeelte van de lay-out dat op elke pagina hetzelfde blijft. Hier is de HTML-code, die ik hieronder zal toelichten:

         
Twitter Clone

Ribbit - een Twitter-klonen-zelfstudie

We beginnen met een normaal doctype definitie en document hoofd. U kunt de less.js bibliotheek en neem de style.less in de ontwikkelingsfase (zoals ik deed in deze code). Later kunt u het LESS-bestand compileren in CSS, als u dit niet wilt gebruiken less.js. Zoals je waarschijnlijk al hebt opgemerkt, is de lay-out verdeeld in drie delen: hoofd, #inhoud, en footer. Je moet deze HTML opslaan om te zien of je alles op de juiste manier vormgeeft.

hoofd

Laten we het aanpakken hoofd. Het bevat het logo van Ribbit en de twee woorden: 'Twitter Clone'. Het is verpakt in een wikkel, waarvan de breedte wordt geregeld door de @ Inhoud breedte variabel. Er zijn verschillende wrappers in de lay-out, en dat zijn ze allemaal @ Inhoud breedte breed met auto marge:

 .wrapper width: @ content-width; marge: automatisch; 

De kop zelf is 85px hoog en pagina breed:

 header background: url (gfx / bg-header.png); hoogte: 85 px; breedte: 100%; 

Na de breedte, toevoegen div.wrapperDe stijl met verticale opvulling:

 div.wrapper opvulling: 11 px 0; 

Dus de kop moet er als volgt uitzien:

 header background: url (gfx / bg-header.png); hoogte: 85 px; breedte: 100%; div.wrapper opvulling: 11 px 0; 

Afbeeldingen in de verpakking moeten zijn 10px lager, om mooi gecentreerd te zijn:

 img positie: relatief; top: 10px; marge: 0 15px 0 0; 

Ook het lettertype in elementen moeten groter zijn dan de standaardgrootte:

 span font-size: 18px; marge: 0 42px 0 0; 

Dit is hoe ons ontwerp er op dit punt uit moet zien.

Inhoud

Er is niet veel waarmee we kunnen doen #inhoud momenteel. We voegen wat marge toe aan de onderkant en een minimale hoogte; de lay-out ziet er funky uit als het niet lang genoeg is:

 #content margin-bottom: 15px; minimale hoogte: 560 px; 

Binnen moet de verpakking een verticale marge hebben met een automatische horizontale marge:

 div.wrapper margin: 38px auto; 

footer

Net als de koptekst, is de voettekst voor alle pagina's hetzelfde. We gebruiken een achtergrondafbeelding en een kleinere lettergrootte. We zullen het ook moeten doen beiden opschonen, omdat we drijvers in de inhoud gebruiken. Zonder duidelijking, zal de voettekst niet worden aangepast in overeenstemming met de inhoud:

 footer background: url (gfx / bg-footer.png); hoogte: 251px; lettergrootte: 14 px; beiden opschonen; 

Laten we nu wat opvulling toevoegen aan de verpakking en de afbeeldingen erin moeten naar rechts zweven:

 div.wrapper opvulling: 15px; img float: right; 

Dit is onze voettekst:


De startpagina

Deze pagina wordt weergegeven voor gebruikers die niet bij Ribbit zijn aangemeld. Daarom moet het het inlogformulier in de koptekst en een registerformulier met een grote kikkerafbeelding in de inhoud presenteren. Laten we beginnen met een basissjabloon.

Login Boxes

Voeg dit inlogformulier toe aan de div.wrapper van de hoofd, na de element:

 

Deze ingangen zijn al gestileerd, maar we moeten wel de marges toevoegen en het formulier maken tonen zoals in lijn. Voeg dit daarna toe span in div.wrapper van hoofd:

 vorm display: inline; input margin: 0 0 0 14px; 

Registreer het formulier

Hier is de HTML voor het registratieformulier:

  

Nieuw bij Ribbit?

Voeg deze HTML toe binnen div.wrapper van #inhoud. We willen dat de afbeelding afgeronde hoeken heeft en naar links wordt verplaatst (voeg deze toe na de marge in) div.wrapper van #inhoud):

 img border-radius: 6px; zweven: links; 

Nu kunnen we het registratieformulier opmaken. Het zal ook een paneel zijn dat we later zullen gebruiken; dat is waarom we het zullen stylen .paneel:

 div.panel border: 1px solid @ border-colour; achtergrond: wit; marge: 0; margin-bottom: 29px; grensradius: 6px; lettergrootte: 14 px; 

Voor nu, echter, zullen we alleen het rechts paneel. Het is smaller en blijft aan de rechterkant van het paneel. Voer natuurlijk het volgende in div.panel:

 & .recht width: 303px; hoogte: 313 px; zweven: rechts; 

We moeten ook zorgen voor de koptekst en inhoud van het panel. We gebruiken

elementen voor de koptekst en

elementen voor inhoud. Merk op dat je de * wildcard binnenkant van een ander element:

 * margin: 6px 0;  vorm opvulling: 0 23px;  h1 border-bottom: 1px solid @ border-color; marge: 5px 0; font-gewicht: normaal; lettergrootte: 18px; opvulling: 13px 23px; hoogte: 23 px;  p opvulling: 0 24px; marge: 18px 0; 

Hier is hoe div.panelDe stijl moet er uit zien:

 div.panel border: 1px solid @ border-colour; achtergrond: wit; marge: 0; margin-bottom: 29px; grensradius: 6px; lettergrootte: 14 px; & .recht width: 303px; hoogte: 313 px; zweven: rechts;  * marge: 6px 0;  h1 border-bottom: 1px solid @ border-color; marge: 5px 0; font-gewicht: normaal; lettergrootte: 18px; opvulling: 13px 23px; hoogte: 23 px;  p opvulling: 0 24px; marge: 18px 0; 

En hier is een screenshot van hoe deze pagina eruit zou moeten zien, tot nu toe (klik om de volledige grootte te zien):


Buddy's pagina

De Buddies-pagina moet worden weergegeven wanneer een gebruiker zich aanmeldt. Er wordt een lijst met de laatste "Ribbits" weergegeven, samen met enkele statistieken van uw account. Nogmaals, begin met de basissjabloon. Deze pagina, samen met andere pagina's, toont een uitlogknop in plaats van het inlogformulier in de hoofd:

 

De knoppen zijn al gestileerd, dus we hoeven alleen maar aan de rechterkant van de container vast te spelden en een paar marges toe te voegen:

 #btnLogOut float: right; marge: 14 px 0 0 0; 

Omdat de selector van deze regel de ID van een element is, kunt u deze plaatsen buiten elk element of binnen de koptekst div.wrapper. Het is jouw keuze, maar onthoud dat, als je ervoor kiest om het in een ander element te plaatsen, de gecompileerde CSS een langere selector zal hebben (header div.wrapper #btnLogOut).

"Create a Ribbit" Box

Voeg eerst de code van dit paneel toe aan div.wrapper van #inhoud:

 

Maak een Ribbit

De .rechts klasse was eerder gestileerd, maar we moeten wat styling toevoegen voor de