Câteodată, prima bucată de HTML pe care o scriem într-un document nou este un element care înfășoară toate celelalte elemente din pagină. Termenul „wrapper” este obișnuit pentru acest lucru. Îi dăm o clasă, iar acea clasă este responsabilă pentru încapsularea tuturor elementelor vizuale din pagină.
Întotdeauna m-am luptat cu cel mai bun mod de a o implementa. Am găsit un fir de discuție înrudit pe StackOverflow care are mai mult de 250.000 de vizualizări, așa că, evident, nu sunt singurul care se întreabă! Voi rezuma cele mai recente gânduri ale mele în acest articol.
Înainte de a intra în subiect, să examinăm mai întâi diferența dintre „wrapper” și „container”.
„Wrapper” vs „Container”
Cred că există o diferență între elementele wrapper și container.
În limbajele de programare, cuvântul container este în general folosit pentru structurile care pot conține mai multe elemente. Un wrapper, pe de altă parte, este ceva care se înfășoară în jurul unui singur obiect pentru a-i oferi mai multă funcționalitate și interfață.
Așa că, în opinia mea, are sens să aibă două denumiri diferite, deoarece acestea își propun funcții diferite.
Printre altele, vorbind de wrapper, este obișnuit să ne gândim la un <div>
care conține tot restul HTML-ului din document. Sunt convins că mulți dintre noi am trăit o perioadă în care am setat-o la 960px în lățime și am aliniat central tot conținutul principal. Wrapperii sunt, de asemenea, utilizați pentru lucruri precum aplicarea unui footer lipicios.
Contenitorul, pe de altă parte, intenționează de obicei un alt tip de conținere. Unul care uneori este necesar pentru a implementa un comportament sau o stilizare a mai multor componente. Acesta servește scopului de a grupa elementele atât din punct de vedere semantic, cât și vizual. Ca exemplu, Bootstrap are „clase container” care găzduiesc sistemul lor de grilă sau conțin diverse alte componente.
Termenii wrapper și container pot însemna, de asemenea, același lucru, în funcție de dezvoltator și de ceea ce intenționează. Pot exista și alte convenții, așa că cel mai bun sfat este, de obicei, să implementați ceea ce are cel mai mult sens pentru dumneavoastră. Dar nu uitați, denumirea este una dintre cele mai fundamentale și importante părți ale activităților dezvoltatorilor. Convențiile de denumire fac codul nostru mai ușor de citit și mai previzibil. Alegeți cu atenție!
Iată un exemplu de înveliș general de pagină:
/** * 1. Centers the content. Yes, it's a bit opinionated. * 2. See the "width vs max-width" section * 3. See the "Additional Padding" section */.wrapper { margin-right: auto; /* 1 */ margin-left: auto; /* 1 */ max-width: 960px; /* 2 */ padding-right: 10px; /* 3 */ padding-left: 10px; /* 3 */}
width vs max-width
Stabilirea width
unui element la nivel de bloc îl va împiedica să se întindă până la marginile containerului său (bun pentru lucruri precum lungimi de linie lizibile). Prin urmare, elementul wrapper va ocupa lățimea specificată. Problema apare atunci când fereastra browserului este mai îngustă decât lățimea specifică a wrapper-ului. Aceasta va declanșa o bară de defilare orizontală, ceea ce este aproape întotdeauna nedorit.
Utilizarea în schimb a lui max-width
, în această situație, este mai bună pentru ferestre de browser mai înguste. Acest lucru este important atunci când se face un site utilizabil pe dispozitive mici. Iată un exemplu bun care prezintă problema.
Vezi Pen CSS-Tricks: The Best Way to Implement a CSS Wrapper de Kaloyan Kosev (@superKalo) pe CodePen.
În ceea ce privește capacitatea de răspuns, max-width
este cea mai bună alegere!
Additional Padding
Am văzut o mulțime de dezvoltatori care uită un anumit caz limită. Să spunem că avem un wrapper cu max-width
setat la 980px. Cazul limită apare atunci când lățimea ecranului dispozitivului utilizatorului este exact 980px. Conținutul se va lipi atunci exact de marginile ecranului, fără a mai rămâne spațiu de respirație.