Construiți o clonă Twitter de la zero Designul

Acest articol reprezintă primul dintr-un nou efort de grup al personalului Nettuts +, care acoperă procesul de proiectare și construire a unei aplicații web de la zero - în mai multe limbi! Vom utiliza o clonă fictivă Twitter, numită Ribbit, ca bază pentru această serie.

În acest tutorial, trebuie să ne concentrăm pe interfața utilizator. Vom folosi metoda populară LESS PREprocessor pentru a face ca CSS să fie cât mai ușor de gestionat.


Introducere

Asigurați-vă că descărcați materialele pentru acest tutorial, dacă lucrați împreună.

Acest tutorial este împărțit în cinci părți majore, care explică modul de a modela diverse pagini ale aspectului lui Ribbit. Voi trimite elemente HTML folosind selectori CSS pentru a fi mai ușor de înțeles. Dar, înainte de a vă scufunda în aspect, să discutăm pe scurt cuiburile.

Nesting

În CSS, referința unui element imbricat poate avea ca rezultat selectori de lungă durată. De exemplu:

  

Și poate crește și mai mult! Cu mai puțin, puteți cuibări un element în altul, ceea ce face mai ușor de citit:

  

Variabile și amestecuri

Creați un fișier nou și denumiți-l, style.less. Atunci când utilizați orice preprocesor de stil, este o idee bună să stocați culori și dimensiuni importante în interiorul variabilelor; puteți ajusta cu ușurință valorile fără a căuta fișierul, căutând valori de proprietate pe care trebuie să le schimbați. Vom folosi o mulțime de variabile pentru culoarea textului, culoarea frontală și lățimea conținutului:

 @ text-color: # 3F3E3D; @ border-color: # D2D2D2; @ content-width: 860px;

Acum, să creăm două mixuri. Primul va crea iluzia de text anti-alias, iar al doilea va permite gradienti încrucișați în browser. Prima este destul de simplă:

 .antialiased (@color) culoare: @color; text-shadow: @color 0 0 1px; 

Trucul este de a crea o umbră sub textul cu aceeași culoare și o răspândire cu un singur pixel, făcând browserul să afișeze o nuanță frumoasă în jurul textului.

Acum pentru gradient; acest lucru este mult mai complicat decât textul anti-alias, deoarece fiecare browser implementează în mod diferit gradienti. Odată ce am compensat diferiții prefixe pentru furnizori, iată codul:

 .gradient4f (@ p1, c1, p2, c2, p3, c3, p4, c4) fond: @ c1; fundal: -moz-linear-gradient (top, @ c1 @ p1, @ c2 @ p2, @ c3 @ p3, @ c4 @ p4); fundal: -webkit-gradient (liniar, stânga sus, jos stânga, oprire culori (@ p1, @ c1), stop color (@ p2, oprire (@ p4, @ c4)); fundal: -webkit-gradient linear (top, @ c1 @ p1, @ c2 @ p2, @ c3 @ p3, @ c4 @ p4); fundal: - un gradient linear (top, @ c1 @ p1, @ c2 @ p2, @ c3 @ p3, @ c4 @ p4); fundal: -ms-gradient linear (top, @ c1 @ p1, @ c2 @ p2, @ c3 @ p3, @ c4 @ p4); fundal: gradient liniar (la fund, @ c1 @ p1, @ c2 @ p2, @ c3 @ p3, @ c4 @ p4); 

Fiecare browser are un prefix: -Moz- pentru Firefox, -WebKit- pentru Chrome, etc. Ultima linie utilizează versiunea recomandată W3C pentru pante. Dacă un browser o acceptă, va suprascrie proprietățile anterioare deoarece este ultima fundal declarația de proprietate în regulă. liniar gradient funcția acceptă opt parametri: patru perechi de valori procentuale de culoare. Creează gradientul cu patru pași de culoare.


Stiluri globale

Să urmăm stilul unor elemente globale, cum ar fi butoanele și legăturile. Vrem toate elementele să folosească Helvetica sau Arial fonturi cu culoarea textului definită mai devreme:

 * font-family: sans-serif; culoare: @ text-color; 

Corp

Corpul este destul de ușor; avem nevoie de un fundal alb cu un model bazat pe imagine. Nu există margini și umplutură:

 corp fundal: url alb (gfx / bg.png); marja: 0; umplutura: 0; 

Intrări

De asemenea, vom oferi un stil implicit pentru toți elemente în pagină:

 intrare width: 236px; înălțime: 38px; frontieră: 1px solid @ border-color; umplutură: 0 10px; contur: nici unul; font-size: 17px; &: focalizare background: # FFFDF2; 

Am setat dimensiunea implicită și umplutura, iar noi folosim @ Border-color pentru a elimina conturul albastru enervant atunci când elementul este focalizat. Ar trebui să observați un alt pic de zahăr LOS: putem adăuga pseudo-clase CSS (și clase normale prea) folosind & caracter (referință mamă), după cum se arată aici:

 &: focalizare background: # FFFDF2; 

Aceasta determină ca intrarea să aibă un fond galben deschis, când este focalizată.

Prezinta

Butoanele de trimitere vor folosi atât mixinul definit anterior, cât și border-radius pentru a crea un efect frumos:

 intrare [tip = "trimite"] height: 36px; frontieră: 1px solid # 7BC574; raza de graniță: 2px; culoare albă; font-size: 12px; font-weight: bold; padding: 0 20px; cursor: pointer; .gradient4f (0%, # 8CD585, 23%, # 82CD7A, 86%, # 55AD4C, 100%, # 4FA945); 

Link-uri

Link-urile ar trebui să aibă o culoare diferită de textul obișnuit. Le vom sublinia, de asemenea, pe hover:

 a text-decoration: none; .antialiased (# 58B84E); &: hover text-decorare: subliniere; 

Șablon de bază

Vom începe cu porțiunea de aspect care rămâne aceeași în fiecare pagină. Iată codul HTML, pe care îl voi explica mai jos:

         
Twitter Clone

Ribbit - Un Tutorial de Clonare Twitter

Începem cu un normal doctype definiție și document cap. Puteți utiliza funcția less.js bibliotecă și să includă style.less în stadiul de dezvoltare (așa cum am făcut în acest cod). Mai târziu, puteți compila fișierul LESS în CSS, dacă nu doriți să îl utilizați less.js. După cum probabil ați observat până acum, aspectul este împărțit în trei părți: antet, #conţinut, și subsol. Ar trebui să salvați acest HTML pentru a vedea dacă stilul este corect.

Antet

Să abordăm problema antet. Acesta conține sigla lui Ribbit și cele două cuvinte: "Twitter Clone". Este înfășurat într - un ambalaj, a cărui lățime este controlată de @ Conținut lățime variabil. Există mai multe împachetări în aspect, și toate sunt @ Conținut lățime larg cu auto Marja:

 .wrapper width: @ content-width; marja: auto; 

Antetul în sine este 85px înălțime și pagină largă:

 header fundal: url (gfx / bg-header.png); înălțime: 85px; lățime: 100%; 

După lățime, adăugați div.wrapper's stil cu padding verticale:

 div.wrapper padding: 11px 0; 

Deci, antetul trebuie să arate ca:

 header fundal: url (gfx / bg-header.png); înălțime: 85px; lățime: 100%; div.wrapper padding: 11px 0; 

Imaginile din ambalaj trebuie să fie 10px inferior, pentru a fi bine centrat:

 img poziție: relativă; top: 10px; marcă: 0 15px 0 0; 

De asemenea, fontul în elementele trebuie să fie mai mari decât dimensiunea implicită:

 span font-size: 18px; marcă: 0 42px 0 0; 

Iată cum ar trebui să ne uităm designul în acest moment.

Conţinut

Nu avem de-a face cu nimic #conţinut Momentan. Vom adăuga o marjă în partea de jos și o înălțime minimă; aspectul va arata funky daca nu este destul de inalt:

 #content margin-bottom: 15px; min-înălțime: 560px; 

În interior, ambalajul trebuie să aibă o margine verticală cu o marjă orizontală automată:

 div.wrapper margine: 38px auto; 

Subsol

Ca și antetul, subsolul este același pentru toate paginile. Vom folosi o imagine de fundal și o dimensiune a fontului mai mică. De asemenea, va trebui clar: ambele, deoarece vom folosi flotoare în conținut. Fără clar, subsolul nu se va ajusta în funcție de conținut:

 footer fundal: url (gfx / bg-footer.png); înălțime: 251px; font-size: 14px; clar: ambele; 

Să adăugăm acum un strat de umplutură la înveliș, iar imaginile din interiorul ei ar trebui să plutească la dreapta:

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

Iată subsolul nostru:


Pagina de pornire

Această pagină se afișează pentru utilizatorii care nu sunt conectați la Ribbit. Prin urmare, va trebui să prezinte formularul de autentificare în antet și o formă de înregistrare, cu o imagine de broască mare în conținut. Să începem cu un șablon de bază.

Casute de conectare

Adăugați acest formular de conectare la div.wrapper din antet, după element:

 

Aceste intrări sunt deja în stil, dar trebuie să adăugăm marginile și să facem formularul afişa la fel de in linie. Adăugați acest după deschidere în div.wrapper de antet:

 forma display: inline; intrare marja: 0 0 0 14px; 

Inregistrare formular

Iată formularul HTML pentru formularul de înregistrare:

  

Nou pentru Ribbit?

Adăugați acest cod HTML div.wrapper de #conţinut. Vrem ca imaginea să aibă colțuri rotunjite și să plutească spre stânga (adăugați această marjă după div.wrapper de #conţinut):

 img border-radius: 6px; plutește la stânga; 

Acum, putem modela formularul de înregistrare. Acesta va fi, de asemenea, un panou pe care îl vom folosi ulterior; de aceea vom face stilul .panou:

 div.panel graniță: 1px solid @ border-color; fundal: alb; marja: 0; margin-bottom: 29px; raza de graniță: 6px; font-size: 14px; 

Pentru moment, totuși, vom doar stilul dreapta panou. Este mai îngust și se lipeste de partea dreaptă a panoului. Bineînțeles, introduceți următoarele în div.panel:

 & .right width: 303px; înălțime: 313px; float: dreapta; 

De asemenea, trebuie să avem grijă de antetul și conținutul panoului. Folosim

elemente pentru antet și

elemente pentru conținut. Observați că puteți utiliza funcția * wildcard în interiorul unui alt element:

 * margine: 6px 0;  forma padding: 0 23px;  h1 margin-bottom: 1px solid @ border-color; margine: 5px 0; font-weight: normal; font-size: 18px; padding: 13px 23px; înălțime: 23px;  p padding: 0 24px; marja: 18px 0; 

Iată cum div.panelstil ar trebui să arate:

 div.panel graniță: 1px solid @ border-color; fundal: alb; marja: 0; margin-bottom: 29px; raza de graniță: 6px; font-size: 14px; & .right width: 303px; înălțime: 313px; float: dreapta;  * margin: 6px 0;  h1 margin-bottom: 1px solid @ border-color; margine: 5px 0; font-weight: normal; font-size: 18px; padding: 13px 23px; înălțime: 23px;  p padding: 0 24px; marja: 18px 0; 

Și aici este o captură de ecran a modului în care ar trebui să arate această pagină, până acum (faceți clic pentru a vedea dimensiunea completă):


Amicii din

Pagina "Buddies" trebuie afișată atunci când un utilizator se conectează. Acesta va afișa o listă cu ultimele "Ribbits", împreună cu unele statistici ale contului dvs. Încă o dată, începeți cu șablonul de bază. Această pagină, alături de alte pagini, va afișa un buton de deconectare în locul formularului de autentificare din antet:

 

Butoanele au fost deja șablon, așa că trebuie doar să-l prindem în partea dreaptă a containerului și să adăugăm niște margini:

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

Deoarece selectorul acestei reguli este ID-ul elementului, îl puteți plasa fie în afara oricărui element sau în interiorul antetului div.wrapper. Este alegerea dvs., dar rețineți că, dacă alegeți să o plasați în alt element, CSS compilat va avea un selector mai lung (header div.wrapper #btnLogOut).

Caseta "Creați un Ribbit"

Mai întâi, adăugați codul acestui panou la div.wrapper de #conţinut:

 

Creați un Ribbit

.dreapta clasa a fost stilată mai devreme, dar trebuie să adăugăm ceva stil pentru