Aranjarea elementelor în interiorul div. Elemente de poziționare
Aranjarea elementelor în interiorul div. Elemente de poziționare
11.08.2019Windows 7, XP
Când poziționați un bloc relativ, trebuie să setați proprietatea poziție: relativăși proprietăți de deplasare. Deplasarea în acest caz va avea loc nu relativ la elementul „părinte” (ca și în cazul poziționării absolute), ci relativ la blocul în sine în fluxul normal. Acest lucru va fi mai clar cu un exemplu. Să presupunem că avem o pagină HTML cu trei div-uri:
Poziționare relativă
Să setăm dimensiunile și limitele acestor blocuri în foaia de stil:
Al doilea bloc al nostru s-a deplasat în jos și la dreapta în raport cu locul în care ar fi fost în flux normal. Blocurile rămase au rămas la locul lor. În practică, poziționarea relativă este folosită destul de rar, așa că nu îi vom mai acorda atenție și vom lua în considerare blocurile plutitoare.
Blocuri plutitoare
Aceste blocuri nu pot fi poziționate cu precizie de pixeli, ca în schemele anterioare, dar această schemă de poziționare este foarte comună. Rareori un site web supraviețuiește fără blocuri plutitoare și este complet imposibil să faci un aspect „fluid” de site fără ele.
Astfel de blocuri se pot deplasa liber în jurul paginii imaginile în HTML se comportă într-un mod similar, aliniate folosind parametrul; alinia.
Blocurile plutitoare sunt definite de proprietate pluti, care determină dacă blocul va pluti și în ce direcție se va mișca. Există trei opțiuni:
stânga- blocul este presat pe marginea stângă, elementele rămase curg în jurul lui pe partea dreaptă.
dreapta- blocul este presat pe marginea dreaptă, elementele rămase curg în jurul lui pe partea stângă.
nici unul- blocul nu se misca si este pozitionat conform proprietatii poziţie.
Să ne uităm la un exemplu. Să presupunem că avem o pagină HTML cu următorul cod:
Vă rugăm să rețineți: primul bloc 1 va fi apăsat spre marginea dreaptă, iar apoi blocul 2 va fi apăsat pe acesta.
Dar dacă vrem ca blocurile să fie presate spre marginea dreaptă, dar amplasate unul sub celălalt. Există o proprietate pentru asta clar, care specifică ce laturi ale unui bloc plutitor nu pot fi adiacente altor blocuri plutitoare. Această proprietate poate fi setată la una dintre cele patru valori:
stânga- blocul ar trebui să fie situat sub toate blocurile din stânga.
dreapta- blocul trebuie să fie situat sub toate blocurile din dreapta.
ambii- blocul trebuie să fie situat sub toate blocurile plutitoare.
nici unul- nu există restricții, aceasta este valoarea implicită.
Să setăm această proprietate pentru al doilea bloc din ultimul nostru exemplu:
Acum blocurile noastre sunt situate într-un flux normal, adică. unul sub celălalt. Trebuie să facem blocuri meniulȘi conţinut plutitor și stângaci. Un bloc știri ar trebui să apese pe marginea dreaptă, adică Îl vom transforma într-un bloc plutitor pentru dreapta:
Să ne uităm la blocul nostru de știri, puteți vedea că se află sub textul din bloc conţinut. Dar am vrut ca blocul de știri să fie în dreapta, iar textul să curgă în jurul lui în stânga.
De ce nu ne-a ieșit? Pentru că blocul nostru știriîn codul html se află sub text și numai textul care se află sub acesta va curge în jurul lui. Pentru a remedia acest lucru, trebuie să plasăm div="știri" deasupra textului (adică înainte de cuvântul „conținut”):
Poziţionarea blocurilor
antetul site-ului
bloc de știri
Conţinut
partea de jos a site-ului
Acum blocul nostru de știri este la locul său:
Și pentru a nu apăsa aproape de marginile de sus și din dreapta, vom adăuga o valoare a marjei pentru acest bloc:
Acum am obținut același rezultat ca și cu poziționarea absolută.
Sunteți de acord că folosirea blocurilor plutitoare este mai ușor să aranjați o pagină: nu trebuie să numărați pixelii, iar codul este mai scurt. În plus, cu un aspect „fluid”, nu putem indica locația exactă a blocului pe ecran, iar cu ajutorul blocurilor plutitoare nu avem nevoie de acest lucru, este suficient să indicam doar un reper (în stânga, pe dreapta, dedesubt sau pe aceeași linie).
Blocuri fixe
După cum vă amintiți, cu poziționare fixă, blocul este fix în raport cu zona de vizualizare. În unele privințe, blocurile fixe sunt similare cu cadrele. Defilarea este disponibilă numai în interiorul unui cadru, dar nu în interiorul unui bloc.
Blocurile fixe au un dezavantaj semnificativ: nu sunt acceptate de browserele Internet Explorer. Prin urmare, ele nu ar trebui folosite deocamdată. Prin urmare, aici vom indica doar sintaxa unei astfel de reguli, dacă doriți să o încercați singur (de exemplu, în browserul Opera).
#blok( poziție:fix; stânga:0px; sus:0px; )
Blocul cu identificatorul „blok” va rămâne pe loc atunci când derulați pagina.
Asta e tot pentru azi. În lecția următoare ne vom familiariza cu câteva proprietăți suplimentare ale blocurilor și tipurile acestora.
După cum probabil știți deja, puteți configura un site web folosind tabele, caz în care pagina este împărțită în celule. De asemenea, puteți utiliza blocuri în aceste scopuri atunci când o pagină de site web constă din elemente individuale.
Probabil că nu mă voi înșela dacă spun că o problemă serioasă pentru mulți webmasteri începători este sarcina de a plasa blocuri într-un anumit loc pe o pagină web.
Una dintre principalele dificultăți la aranjarea folosind blocuri este poziționarea (alinierea) acestor blocuri.
Un pic despre straturi
Cred că mulți dintre voi ați auzit despre un strat. Și, de regulă, un strat este înțeles ca un bloc specificat de o etichetă
. De fapt, totul este puțin diferit.
Nu există straturi în HTML. Este doar o metaforă. Când vorbim despre straturi, ele înseamnă un anumit container (element) html care poate fi plasat într-un anumit loc pe o pagină web.
A doua concepție greșită este că numai blocul specificat de etichetă este clasificat ca straturi
. Nici acest lucru nu este adevărat. Acestea pot include, de asemenea, paragrafe (
), liste (
) și alte elemente.
Și acum despre
Oh.
După cum am menționat mai sus, puteți seta locația oricărui element HTML. Nu este nevoie să folosiți întotdeauna eticheta pentru aceasta
. De asemenea, utilizarea acestei etichete nu vă obligă să îi acordați vreo poziție pe pagina web.
Semnificația utilizării unui bloc specificat de o etichetă
se reduce la consolidare. La urma urmei, puteți plasa și alte elemente în interiorul acestuia (paragrafe, imagini etc.). Acest lucru creează un bloc mare cu conținut variat, care este mult mai ușor de poziționat pe o pagină web decât fiecare element separat.
Poziţionarea elementelor.
Există patru tipuri principale de poziționare:
1. Static 2. Absolut 3. Fix 4. Relativ)
Static
Folosit ca locație implicită. În acest caz, browserul se uită la codul HTML, îl împarte în elemente și compune o pagină din acestea. Rezultatul este o succesiune de un număr de elemente. Sunt afișate în ordinea în care sunt indicate în codul html.
Aplicarea parametrilor stânga, sus, dreapta și jos nu duce la niciun rezultat.
Poziționarea statică trebuie avută în vedere atunci când este utilizată poziționarea relativă.
Absolut
Folosind poziționarea absolută, sunt specificate coordonatele colțului din stânga sus al blocului. În acest caz, coordonatele sunt numărate relativ la locația elementului părinte. Dacă elementul părinte este o fereastră de browser, atunci blocul este aliniat în raport cu acesta. Dacă există un alt element în care se află blocul, atunci alinierea are loc în raport cu acest element.
Fix
Deja din nume devine clar că în acest caz elementul este fix. Se află într-un anumit loc de pe pagina web și nu se mișcă nicăieri. Această aliniere este adesea folosită pentru ferestre pop-up, unde sunt centrate și nu se mișcă în timp ce derulați pagina.
Relativ
Acest tip de poziționare poate fi dificil. Numele său nu este pe deplin potrivit. Mulți oameni confundă poziționarea relativă și absolută a elementelor. Poate părea că alinierea este relativă la elementul părinte. Și în cazul poziționării absolute - în raport cu fereastra browserului. Dar asta nu este adevărat.
Este necesar să înțelegem că locația elementului în acest caz are loc relativ la locul său într-o poziție statică. Acesta este ceea ce s-a menționat mai sus.
Mai simplu spus, îi spui browserului să mute un element atât de mulți pixeli față de locul în care se află în mod implicit.
Mai este un punct dificil. Ce se întâmplă dacă elementul părinte are o poziție relativă, dar elementul imbricat are o poziție absolută? În acest caz, coordonatele elementului copil vor fi calculate în raport cu elementul părinte, ținând cont de decalajul acestuia, dacă există.
Rezuma.
Deci, există o proprietate poziţie. Această proprietate poate lua 4 valori Static, absolut, fix și relativ. Valoarea implicită este Static.
Când specificați coordonatele pentru un element, trebuie să spuneți și browserului cum ar trebui să calculeze acele coordonate. Trebuie să-i dăm un punct de plecare.
Nu uitați că dacă nu există proprietate poziţie coordonatele nu vor fi luate in calcul, blocul va ramane in acelasi loc, in pozitia sa statica.
Acum să vedem cum sunt setate coordonatele.
În aceste scopuri, sunt utilizate patru tipuri de proprietăți:
1. Sus 2.Stânga 3. Corect 4. De jos
Top- o valoare pozitivă (de exemplu, 20px) mută blocul cu 20 pixeli în jos. O valoare negativă (-20px) mută elementul cu 20 de pixeli în sus. Toate acestea se întâmplă relativ la colțul din stânga sus.
Stânga- deplasare la stânga sau la dreapta, în funcție de semn. Relativ la colțul din stânga sus.
Dreapta- deplasare la dreapta si la stanga, in functie de semn. Relativ la colțul din dreapta sus.
Fund- schimbați în sus sau în jos, depinde de semn. Apare relativ la colțul din stânga jos.
Iată codul HTML:
Și acesta este CSS-ul:
#1 { poziție:relativă; sus:100px; stânga: 100px; lățime: 500px; înălțime: 500px; culoare de fundal:#CCCCCC; }
#11 { culoare de fundal:#003399; poziție: absolut; jos: -30px; dreapta: -50px; lățime: 100px; înălțime: 100px; }
#2 { culoare de fundal:#990066; lățime: 200px; înălțime: 300px }
Practică.
În timp ce scriam, mi-am dat seama.
Locație neobișnuită!
Decideți ce element să afișați în față!
Elementele se pot suprapune!
Poziționare
Proprietățile de poziționare CSS vă permit să poziționați un element. De asemenea, pot poziționa un element în spatele altuia și pot specifica ce ar trebui să se întâmple atunci când conținutul elementului este prea mare.
Elementele pot fi poziționate folosind proprietățile de sus, jos, stânga și dreapta. Cu toate acestea, aceste proprietăți nu vor funcționa decât dacă proprietatea poziției este setată. De asemenea, funcționează diferit în funcție de metoda de poziționare.
Există patru metode diferite de poziționare.
Poziționare statică
Elementele HTML sunt poziționate static în mod implicit. Un element poziționat static este întotdeauna poziționat conform fluxului standard de elemente de pe pagină.
Elementele poziționate static nu sunt afectate de proprietățile de sus, jos, stânga și dreapta.
Poziționare fixă
Un element cu poziție fixă este poziționat în raport cu fereastra browserului.
Nu se va mișca chiar dacă fereastra este derulată:
Cometariu: IE7 și IE8 acceptă valoarea fixă numai dacă este specificat tipul de document!DOCTYPE.
Elementele fixe sunt îndepărtate din fluxul normal. Documentul și alte elemente se comportă ca și cum elementul fix nu ar exista.
Elementele fixe se pot suprapune cu alte elemente.
Poziționare relativă
Un element poziționat relativ este poziționat în raport cu poziția sa normală.
Elementele poziționate relativ sunt adesea folosite ca containere pentru elementele poziționate absolut.
Poziționare absolută
Un element poziționat absolut este poziționat în raport cu primul element părinte care este poziționat altfel decât static. Dacă nu se găsește un astfel de element, elementul părinte este luat ca :
Elementele poziționate absolut sunt îndepărtate din fluxul de elemente standard. Documentul și alte elemente se comportă ca și cum elementul poziționat absolut nu ar exista.
Elementele poziționate absolut se pot suprapune cu alte elemente.
Elemente suprapuse
Când elementele sunt situate în afara fluxului standard, ele se pot suprapune cu alte elemente.
Proprietatea z-index specifică ordinea verticală a unui element (care ar trebui să fie plasat în fața sau în spatele altor elemente).
Un element poate avea o ordine verticală pozitivă sau negativă:
Un element cu o ordine verticală mai mare se află întotdeauna în fața elementelor cu o ordine verticală mai mică.
Cometariu: Dacă două elemente poziționate se suprapun și nu este specificată nicio ordine verticală, elementul situat mai târziu în codul HTML va fi afișat în partea de sus.
Mai multe exemple
Setarea formei elementului Acest exemplu demonstrează cum se definește forma unui element. Elementul este tăiat la această formă și apoi afișat.
Cum să afișați un element depășit folosind derularea Acest exemplu demonstrează cum să setați proprietatea overflow pentru a crea o bară de defilare atunci când conținutul elementului este prea mare pentru a se potrivi în zona specificată.
Cum să forțați browserul să gestioneze automat overflow Acest exemplu demonstrează cum să forțezi browserul să gestioneze automat overflow.
Schimbarea cursorului Acest exemplu demonstrează cum se schimbă cursorul.
Toate proprietățile de poziționare CSS
Numărul din coloana „CSS” indică în ce versiune de CSS este definită proprietatea (CSS1 sau CSS2).
Proprietate
Descriere
Valori
CSS
În zilele noastre, dezvoltatorii web pot construi machete complexe de pagini web folosind diferite tehnici CSS. Unele dintre aceste tehnici au o istorie lungă (float), altele (flexbox) au câștigat popularitate în ultimii ani.
În acest articol, vom arunca o privire mai atentă asupra unor lucruri puțin cunoscute despre poziționarea CSS.
Înainte de a începe, să trecem în revistă pe scurt elementele de bază ale diferitelor tipuri de poziționare.
Prezentare generală a metodelor de poziționare disponibile
Proprietatea de poziție CSS determină tipul de poziționare a unui element.
Opțiuni de poziționare
static este valoarea implicită a proprietății de poziționare. Vă sfătuim că acest element nu folosește poziționarea - poziționarea se aplică numai dacă specificați un alt tip de poziționare decât cel implicit.
Pentru a face acest lucru, trebuie să setați proprietatea poziției la una dintre următoarele valori:
relativ
absolut
fix
lipicios
Și numai după setarea poziționării, puteți utiliza proprietăți care compensează elementul:
dreapta
fund
Valoarea inițială a acestor proprietăți este cuvântul cheie auto.
Trebuie luat în considerare faptul că, dacă un element are proprietatea de poziție setată la absolute sau fixed , atunci este un element poziționat absolut. De asemenea, proprietatea z-index începe să funcționeze pentru elementele poziționate, ceea ce determină ordinea de stivuire.
Diferențele dintre principalele metode de poziționare
Acum să ne uităm rapid la trei diferențe de bază între tipurile de poziționare disponibile:
elementele poziționate în mod absolut (absolut) sunt îndepărtate complet din pârâu, locul lor este luat de cei mai apropiați vecini.
relativ poziționate (relative) și lipite (lipicioase) își păstrează locul în flux și vecinii lor cei mai apropiați nu îl ocupă. Cu toate acestea, umplutura acestor elemente nu ocupă spațiu, ci este complet ignorată de alte elemente și acest lucru poate duce la suprapunerea elementelor.
elementele fixe (iar poziționarea fixă este un tip de absolut) sunt întotdeauna poziționate relativ la zona de vizibilitate (ignorând prezența poziționării în strămoși), în timp ce elementele lipicioase sunt poziționate față de cel mai apropiat strămoș cu derulare (overflow: auto). Și numai în absența unor astfel de strămoși sunt poziționați în raport cu zona de vizibilitate.
Puteți vedea acest lucru mai detaliat în demo:
Notă: poziționarea elementului lipicios este încă o tehnologie experimentală cu suport limitat în browsere. Desigur, dacă doriți, puteți utiliza un polyfill pentru a adăuga această funcționalitate în browser, dar având în vedere prevalența sa scăzută, această proprietate nu va fi discutată în articol.
Elemente de poziționare cu tip de poziționare absolută
Sunt sigur că majoritatea oamenilor știu cum funcționează poziționarea absolută. Cu toate acestea, multe lucruri despre acesta îi pot deruta pe începători.
Prin urmare, am decis să încep cu el atunci când descriu caracteristicile puțin cunoscute ale poziționării.
Deci, un element poziționat absolut este compensat față de strămoșul său poziționat cel mai apropiat. Desigur, acest lucru funcționează dacă oricare dintre strămoși are o poziție diferită de statică - dacă elementul nu are strămoși poziționați, este decalat în raport cu zona de vizibilitate.
Acest lucru este demonstrat de următorul exemplu:
În această demonstrație, blocul verde este poziționat inițial absolut cu zero padding bottom:0 și left:0, strămoșul său (blocul roșu) nu a fost poziționat deloc.
Totuși, am poziționat relativ învelișul exterior (un element cu clasa jumbotron). Observați cum se schimbă poziționarea blocului verde când se schimbă tipul de poziționare al strămoșilor săi.
Dacă aplicăm poziționare absolută sau fixă unui element plutit, proprietatea float va fi setată la none . Pe de altă parte, dacă setăm poziționarea relativă, elementul va rămâne plutitor.
Aruncă o privire la demonstrația corespunzătoare:
În acest exemplu, definim două elemente diferite care plutesc spre dreapta. Rețineți că atunci când un bloc roșu devine poziționat absolut, acesta ignoră valoarea proprietății float, în timp ce un bloc verde poziționat relativ păstrează valoarea float.
Elementele inline poziționate absolut devin elemente bloc
Un element inline cu poziționare absolută sau fixă preia proprietățile unui element bloc. Conversia elementelor inline în elemente bloc este descrisă mai detaliat în tabel.
În acest caz, am creat două elemente diferite. Primul (blocul verde) este un element bloc, iar al doilea (blocul roșu) este un element în linie. Inițial, doar blocul verde este vizibil.
Caseta roșie nu este vizibilă deoarece proprietățile sale de lățime și înălțime funcționează doar cu elemente de bloc și bloc inline și, deoarece nu are conținut, nu are nicio dimensiune.
Când atribuiți o poziție absolută sau fixă unui bloc roșu, acesta devine un bloc bloc și dimensiunile blocului specificate în acesta intră în vigoare.
Elementele poziționate absolut nu au colaps de căptușeală
În mod implicit, când două margini verticale se ating, acestea sunt combinate într-una egală cu maximul dintre ele. Aceasta se numește colapsul marginii.
Comportamentul elementelor poziționate absolut aici este similar cu elementele plutitoare - căptușeala lor nu este combinată cu vecinii săi.
În această demonstrație, elementului i se oferă o umplutură de 20 de pixeli. Căptușeala sa se prăbușește cu umplutura elementului părinte, care este, de asemenea, de 20 de pixeli. După cum puteți vedea, doar cu poziționarea absolută nu există colaps.
Dar cum putem preveni prăbușirea marjelor? Trebuie să punem un fel de separator între ei.
Aceasta poate fi umplutură sau chenar și poate fi aplicată atât elementelor părinte, cât și elementelor secundare. O altă opțiune este să adăugați un clearfix elementului părinte.
Poziționarea elementelor cu pixeli și procente
Ați folosit vreodată procente în loc de pixeli pentru a poziționa elementele? Dacă răspunsul este da, atunci știi că offset-ul unui element depinde de unitățile alese (pixeli sau procente).
E puțin confuz, nu-i așa? Deci, mai întâi, să vedem ce spune specificația despre compensarea procentuală:
Offset ca procent din lățimea (pentru stânga și dreapta) sau înălțimea (sus sau jos) blocului părinte. Pentru elementele lipite, decalajul este calculat ca procent din lățimea (pentru stânga și dreapta) sau înălțimea (sus sau jos) a fluxului. Valorile negative sunt acceptabile.
După cum sa menționat, atunci când setați offset-ul ca procent, poziția elementului depinde de lățimea și înălțimea părintelui său.
Demo-ul arată această diferență:
Acest exemplu folosește pixeli și procente pentru offset. Desigur, atunci când specificați un offset în pixeli, elementul este mutat acolo unde este necesar.
Și dacă alegem un procent pentru offset, rezultatul va depinde de dimensiunea elementului părinte. Iată o vizualizare care arată cum este calculată noua poziție:
Notă: După cum probabil știți, proprietatea de transformare (împreună cu diferitele funcții de traducere) vă permite, de asemenea, să schimbați poziția unui element. Dar în acest caz, atunci când se utilizează procente, calculul se va baza pe dimensiunea elementului în sine, și nu pe părintele său.
Concluzie
Sper că acest articol v-a ajutat să înțelegeți mai bine poziționarea în CSS și a clarificat unele dintre provocări.
Unul dintre cele mai bune lucruri despre CSS este că stilurile ne oferă capacitatea de a poziționa conținutul și elementele pe o pagină în aproape orice mod imaginabil. Acest lucru adaugă structură designului nostru și ajută la creșterea vizuală a conținutului.
Există mai multe tipuri diferite de poziționare în CSS, fiecare dintre aceste tipuri având propriul său domeniu de aplicare. În acest capitol, vom analiza câteva cazuri de utilizare diferite — crearea de aspecte reutilizabile și poziționarea unică a elementelor de unică folosință — și vom descrie câteva metode pentru a face acest lucru.
Poziționare prin plutitor
O modalitate de a poziționa elementele pe o pagină este prin proprietatea float. Această proprietate este destul de versatilă și poate fi utilizată în multe moduri diferite.
În esență, proprietatea float preia un element, îl elimină din fluxul normal al paginii și îl poziționează la stânga sau la dreapta elementului său părinte. Toate celelalte elemente de pe pagină se vor înfăşura în jurul unui astfel de element. De exemplu, paragrafele se vor înfăşura în jurul unei imagini dacă elementul proprietatea float este setată.
Când proprietatea float este aplicată la mai multe elemente simultan, face posibilă crearea unui aspect cu elemente flotante lângă sau vizavi unul de celălalt, așa cum se arată într-un aspect cu mai multe coloane.
Proprietatea float ia mai multe valori, cele două cele mai populare fiind stânga și dreapta, care permit elementului să plutească la stânga sau la dreapta părintelui său.
Imag (float: stânga; )
plutește în practică
Să creăm un aspect general al paginii cu un antet în partea de sus, două coloane în centru și un subsol în partea de jos. În mod ideal, această pagină ar trebui să fie marcată cu elemente
,
,
Pentru referință, elementele plutitoare sunt poziționate de-a lungul marginii elementului părinte. Dacă nu există niciun părinte, elementul plutit va fi poziționat de-a lungul marginii paginii.
Când setăm un element să plutească, îl eliminăm din fluxul normal al documentului HTML. Acest lucru face ca lățimea implicită a acelui element să devină lățimea conținutului său. Uneori, cum ar fi atunci când creăm coloane pentru un aspect reutilizabil, acest comportament este nedorit. Acest lucru poate fi remediat prin adăugarea unei proprietăți de lățime cu o valoare fixă pentru fiecare coloană. În plus, pentru a preveni atingerea elementelor plutitoare între ele, determinând conținutul unui element să stea lângă altul, putem folosi proprietatea margine pentru a seta spațiul dintre elemente.
Mai jos extindem blocul anterior de cod adăugând o marjă și lățime pentru fiecare coloană pentru a modela mai bine rezultatul dorit.
float poate modifica valoarea de afișare a elementului
Pentru un element flotant, este de asemenea important să înțelegeți că elementul este eliminat din fluxul normal al paginii și că valoarea de afișare implicită a elementului se poate modifica. Proprietatea float se bazează pe valoarea de afișare a elementului care este setată la bloc și poate modifica valoarea de afișare implicită a elementului dacă nu este deja redată ca element bloc.
De exemplu, un element a cărui afișare este specificată ca inline , cum ar fi inline , ignoră orice proprietăți de înălțime sau lățime. Cu toate acestea, dacă specificați un float pentru un element inline, valoarea afișată se va schimba în bloc și apoi elementul poate prelua deja proprietățile de înălțime sau lățime.
Când plutim un element, trebuie să fim atenți la modul în care acesta afectează valoarea proprietății de afișare.
Pentru două coloane puteți seta float, o coloană la stânga și cealaltă la dreapta, dar pentru mai multe coloane va trebui să ne schimbăm abordarea. Să presupunem, de exemplu, că am dori să avem un rând de trei coloane între elementele noastre Și
......
...
...
Pentru a aranja aceste trei elemente într-un rând cu trei coloane, trebuie să setăm float pentru toate elementele ca la stânga. De asemenea, trebuie să reglam lățimea luând în considerare coloanele suplimentare și așezându-le unul lângă celălalt.
Aici avem trei coloane, toate cu lățime și valoare de marjă egale și float setat la stânga .
Demonstrarea unui aspect cu trei coloane cu float
Curățarea și flotarea conținutului
Proprietatea float a fost concepută inițial pentru a permite conținutului să circule în jurul imaginilor. O imagine poate primi un float și tot conținutul din jurul acelei imagini curge în mod natural în jurul ei. Deși acest lucru funcționează excelent pentru imagini, proprietatea float nu a fost cu adevărat destinată să fie utilizată în scopuri de layout și poziționare și, prin urmare, vine cu câteva capcane.
Unul dintre aceste capcane este că, uneori, stilurile adecvate nu apar pe un element care este adiacent sau este părintele unui element plutit. Când un element este setat să plutească, acesta este eliminat din fluxul normal al paginii și, ca urmare, stilurile elementelor din jurul acelui element flotant pot fi afectate negativ.
Adesea, valorile proprietăților de marjă și de umplutură sunt interpretate incorect, determinându-le să se amestece în elementul plutit. Alte proprietăți pot fi, de asemenea, afectate.
O altă eroare este că uneori conținutul nedorit începe să se înfășoare în jurul elementului float. Eliminarea unui element din fluxul documentului permite tuturor elementelor din jurul elementului plutit să-l ocolească și să ocupe orice spațiu disponibil în jurul elementului plutit, ceea ce este adesea nedorit.
În exemplul nostru anterior cu două coloane, după ce am adăugat un float elementelor Și
Demonstrație de aspect fără curățare plutitoare
Pentru a împiedica conținutul să se înfășoare în jurul elementelor flotante, trebuie să ștergem float-ul și să readucem pagina la fluxul normal. Ne vom uita la cum să curățăm flotoarele și apoi vom arunca o privire asupra conținutului lor.
Curățarea plutitoarelor
Ștergerea unui float are loc folosind proprietatea clear, care ia mai multe valori diferite: cele mai frecvent utilizate valori sunt stânga , dreapta și ambele .
Div (clar: stânga; )
Valoarea din stânga șterge flotoarele din stânga, în timp ce valoarea din dreapta șterge flotoarele din dreapta. Valoarea ambelor , totuși, va șterge flotoarele stânga și dreapta și este adesea cea mai ideală opțiune.
Revenind la exemplul nostru anterior, dacă folosim proprietatea clear cu o valoare a ambelor pe un element
Subsol ( clar: ambele; )
Demonstrație de aspect cu curățare flotantă
Conținutul plutește
În loc să ștergeți float , o altă opțiune este să setați conținutul să float . Rezultatul va fi aproape același, dar conținutul float asigură într-adevăr că toate stilurile noastre se vor afișa corect.
Pentru a seta conținutul flotant, elementele flotante trebuie să fie în interiorul elementului părinte, acesta va acționa ca un container, lăsând fluxul documentului complet normal în afara acestuia. Stilul pentru acest element părinte este reprezentat de o clasă de grup, așa cum se arată aici:
Nu se întâmplă multe aici, dar, în esență, tot ce face CSS este să șterge toate elementele plutitoare din interiorul elementului de grup și să readucă documentul la fluxul normal.
Mai precis, pseudoelementele ::before și ::after, așa cum sa discutat în Lecția 4, generează dinamic elemente deasupra și dedesubtul unui element cu grup de clasă . Aceste elemente nu includ niciun conținut și sunt redate ca elemente de tabel, similar elementelor bloc. Un element generat dinamic după ce un element de grup șterge float în interiorul elementului de grup, la fel cum a făcut clear înainte. În cele din urmă, elementul de grup șterge și orice float care poate apărea înaintea lui în cazul în care există un float cu valoarea left sau right . De asemenea, este inclus un mic truc care face ca browserele mai vechi să se joace frumos.
Există mai mult cod aici decât clar: ambele comenzi, dar poate fi destul de util.
Având în vedere aspectul paginii noastre pe două coloane, am putea încheia Și
Tehnica prezentată aici este cunoscută ca „clearfix” și este adesea văzută pe alte site-uri cu numele de clasă clearfix sau cf. Am ales să folosim grupul de nume de clasă deoarece reprezintă un grup de elemente și exprimă mai bine conținutul.
Când elementele sunt setate pentru a flota, este important să monitorizați modul în care acestea afectează fluxul paginii și să vă asigurați că fluxul paginii este resetat prin ștergere sau prin conținut flotant, așa cum este prevăzut. În caz contrar, ținerea evidenței floaturilor poate provoca o mulțime de bătăi de cap, mai ales pe paginile care conțin mai multe rânduri, fiecare cu mai multe coloane.
La practică
Să ne întoarcem la site-ul Styles Conference și să încercăm să adăugăm floats la anumite conținuturi.
În primul rând, înainte de a aplica float oricărui element, să oferim conținut acelor elemente flotate adăugând clearfix la CSS-ul nostru. În fișierul main.css, chiar sub stilurile noastre de grilă, vom adăuga clearfix sub numele clasei de grup, la fel ca înainte. /* ================================================== ====== Clearfix ======= ====================================* / .grup::înainte, .grup::după (conținut: " "; afișare: tabel; ) .grup::după (clar: ambele; ) .grup (clar: ambele; *zoom: 1; )
Acum că putem folosi float, să-l definim pentru principal
element interior la stânga și lăsați restul conținutului din antet să curgă spre dreapta.
Pentru a face acest lucru, adăugați clasa logo la element
. Apoi, în interiorul CSS-ului nostru, vom adăuga o nouă secțiune de stil pentru antetul principal. În această secțiune vom selecta elementul
În timp ce suntem aici, haideți să adăugăm puțin mai multe detalii logo-ului nostru. Să începem prin a plasa elementul sau o întrerupere de linie între cuvintele „Stiluri” și „Conferință” pentru a forța textul logo-ului nostru să apară pe două rânduri.
În CSS, vom adăuga o chenar în partea de sus a siglei noastre și niște căptușeală verticală, astfel încât logo-ul să poată „respira” liber.
simplificat, dorim să setăm conținutul să plutească . Părinte imediat pentru
este un element așa că îi vom adăuga o clasă de grup. Acest lucru va aplica stilurile clearfix pe care le-am setat mai devreme.
...
Element prinde contur, așa că haideți să aruncăm o privire asupra elementului
Spre deosebire de element cu toate acestea, nu vom aplica clasa direct elementului flotant. De data aceasta, vom adăuga o clasă la părintele elementului float și vom folosi un selector CSS unic pentru a selecta elementul și apoi îi vom da un float .
Să începem prin adăugarea clasei primary-footer la element
Acum că clasa primar-footer este setată pe element
/* ========================================= Subsol principal ====== ==================================== */ .primary-footer small ( float: left; )
Pentru a verifica - aici selectăm elementul , care ar trebui să fie în interiorul unui element cu o valoare a atributului de clasă primar-footer, cum ar fi elementul nostru
În cele din urmă, vom adăuga puțină căptușeală în partea de sus și de jos a elementului.
Subsol principal (padding-bottom: 44px; padding-top: 44px; )
Luând în considerare toate aceste modificări ale elementelor Și
Orez. 5.01. Folosind mai multe elemente flotante Și
Poziționare prin bloc inline
Pe lângă utilizarea float, un alt mod în care putem poziționa conținutul este folosirea proprietății afișare în combinație cu valoarea blocului inline. Metoda blocului inline, așa cum vom discuta mai târziu, este utilă în primul rând pentru aranjarea paginilor sau pentru a plasa elemente într-o linie unul lângă celălalt.
Amintiți-vă că valoarea blocului în linie pentru proprietatea de afișare afișează elemente într-o linie și le permite să preia toate proprietățile modelului casetei, inclusiv înălțimea , lățimea , padding , chenarul și marginea . Folosirea blocului inline ne permite să profităm din plin de modelul blocului fără a fi nevoie să ne facem griji cu privire la eliminarea oricăror flotări.
inline-block în practică
Să aruncăm o privire la exemplul nostru cu trei coloane de la început. Vom începe prin a salva codul HTML astfel:
......
...
...
Acum, în loc să plutesc pentru cele trei elemente ale noastre le vom schimba valoarea de afișare la inline-block , lăsând proprietățile marginii și lățimii așa cum erau anterior. Ca rezultat, CSS-ul nostru va arăta astfel:
Din păcate, acest cod în sine nu este suficient pentru a face trucul și ultimul element este împins la o nouă linie. Amintiți-vă, deoarece elementele de bloc inline apar pe o linie unul lângă celălalt, ele includ un singur spațiu între ele. Când dimensiunea fiecărui spațiu individual este adăugată la valoarea lățimii și a marjei orizontale a tuturor elementelor dintr-un rând, lățimea totală devine prea mare, împingând ultimul element în afară. la o nouă linie. Pentru a afișa toate elementele pe o linie, ar trebui să eliminați spațiul alb dintre fiecare
.
Demonstrarea elementelor inline-block cu spațiu
Eliminarea spațiului dintre elementele blocului în linie
Există mai multe metode pentru eliminarea spațiului dintre elementele blocului în linie, iar unele sunt mai complexe decât altele. Ne vom concentra asupra celor mai simple două metode, ambele apar în HTML.
Prima soluție este să puneți fiecare etichetă nouă de element de deschidere pe aceeași linie cu eticheta de închidere a elementului anterior . În loc să folosim o linie nouă pentru fiecare element, ajungem să începem elementele pe aceeași linie. HTML-ul nostru ar putea arăta astfel:
...
...
...
...
Scrierea elementelor inline-block în acest fel asigură că nu există spațiu între astfel de elemente în HTML. Prin urmare, spațiul nu va apărea când pagina este afișată.
Demonstrarea elementelor inline-block fără spații
O altă metodă pentru eliminarea spațiului dintre elementele blocului inline este deschiderea unui comentariu HTML imediat după eticheta de închidere a elementului. Apoi închideți comentariul chiar înainte de eticheta de deschidere a următorului element. Acest lucru permite elementelor inline-block să înceapă și să se termine pe linii separate în HTML și va „comenta” orice spațiu potențial dintre elemente. Codul rezultat va arăta astfel:
...
...
...
...
Niciuna dintre aceste opțiuni nu este perfectă, dar sunt utile. Tind să prefer folosirea comentariilor pentru o mai bună organizare, dar opțiunea pe care o alegeți depinde în întregime de dvs.
Creați machete reutilizabile
Când construiți un site, este întotdeauna cel mai bine să scrieți stiluri modulare care pot fi reutilizate în altă parte, iar aspectele reutilizabile se află în partea de sus a listei de coduri reutilizabile. Aspectele pot fi create folosind elemente flotante sau blocuri inline, dar care funcționează cel mai bine și de ce?
Întrebarea dacă elementele flotante sau în bloc sunt mai bune pentru structura paginii este deschisă dezbaterii. Abordarea mea este de a folosi elemente inline-block pentru a crea o grilă sau un aspect de pagină și apoi să folosesc un float atunci când vreau ca conținutul să curgă în jurul elementului (care este pentru care au fost concepute floats atunci când lucrez cu imagini). În general, mi se pare mai ușor de lucrat cu elementele inline-block.
Cu toate acestea, folosește ceea ce funcționează cel mai bine pentru tine. Dacă ești mai familiarizat cu o abordare decât cu alta, atunci folosește-o.
Sunt noi specificații CSS în lucru - în special proprietăți flexibile și grid - care vă vor ajuta să decideți cum să vă aranjați cel mai bine paginile. Fii cu ochii pe aceste metode atunci când încep să apară.
La practică
Având o înțelegere fermă a machetelor reutilizabile, este timpul să implementăm unul pe site-ul nostru Styles Conference.
Pentru site-ul web Styles Conference vom crea un aspect cu trei coloane folosind elemente de bloc inline. Vom face acest lucru astfel încât să obținem trei coloane de aceeași lățime, sau două coloane cu lățimea totală împărțită între ele ca 2/3 pentru una și 1/3 pentru cealaltă.
Mai întâi, vom crea clase care definesc lățimea acestor coloane. Vom numi aceste două clase col-1-3 pentru o treime și col-2-3 pentru două treimi. În secțiunea Grid a fișierului nostru main.css, să mergem mai departe și să definim aceste clase și lățimile lor corespunzătoare.
Dorim ca ambele coloane să apară ca elemente de bloc inline. De asemenea, trebuie să ne asigurăm că alinierea lor verticală este setată în partea de sus a fiecărei coloane.
Să creăm doi selectoare noi care partajează afișarea și alinierea verticală .
Aruncă o privire din nou la CSS. Am creat două selectoare de clasă col-1-3 și col-2-3 separate prin virgulă. O virgulă la sfârșitul primului selector înseamnă că este urmată de un alt selector. După al doilea selector există o acoladă deschisă, care indică faptul că începe descrierea stilului. Folosind o virgulă pentru a separa selectoarele, putem lega un stil la mai mulți selectori în același timp.
Vrem să punem puțin spațiu între coloane pentru a ajuta la spargerea conținutului. Acest lucru se poate face prin adăugarea de umplutură orizontală la fiecare coloană.
Acest lucru funcționează bine, totuși, atunci când două coloane sunt plasate una lângă alta, lățimea spațiului dintre ele va fi de două ori mai mare decât spațiul de la marginea exterioară. Pentru a echilibra acest lucru, vom pune toate coloanele noastre într-o grilă și vom adăuga aceeași umplutură.
Să folosim clasa grid pentru a ne defini grila și apoi să dăm aceeași umplutură orizontală claselor grid, col-1-3 și col-2-3. Cu virgule care separă din nou selectoarele noastre, CSS-ul nostru arată astfel:
Când setăm căptușeală orizontală, trebuie să fim atenți. Amintiți-vă, în ultima lecție am creat un container cu clasa container pentru a centra tot conținutul nostru pe pagina cu o lățime de 960 de pixeli. În prezent, dacă ar fi să punem un element grilă în interiorul unui element container, căptușeala lor orizontală s-ar prăbuși împreună și coloanele noastre nu ar apărea proporționale cu lățimea restului paginii.
Vom face acest lucru prin descompunerea vechiului set de reguli container în următoarele:
Acum orice element cu clasa container sau grid va avea o lățime de 960 de pixeli și va fi situat în centrul paginii. În plus, am păstrat umplutura orizontală existentă pentru orice element cu clasa container, mutându-l într-un set de reguli nou, separat.
Bine, toată partea grea a instalării rețelei este finalizată. Acum este timpul să lucrăm cu HTML-ul nostru și să vedem cum funcționează aceste clase.
Vom începe cu teaser-urile de pe pagina de start, în fișierul index.html, aliniate pe trei coloane. În prezent, tease-urile sunt împachetate în element cu clasa container. Vrem să schimbăm clasa containerului în grid, astfel încât să putem începe să plasăm coloane în interior.
...
...
...
...
Și, în sfârșit, deoarece fiecare dintre coloanele noastre este un element de bloc inline, trebuie să ne asigurăm că eliminăm orice spațiu alb dintre ele. Pentru a face acest lucru, vom folosi comentarii și vom adăuga documentație în fiecare secțiune pentru a ne organiza mai bine codul.
...
...
...
Pentru a verifica, am lăsat un comentariu pe rândul 3 care identifică secțiunea „Speakers” care o urmează. La sfârșitul rândului 7, deschidem un comentariu imediat după eticheta de închidere. În cadrul acestui comentariu, pe linia 9 definim următoarea secțiune „Program”. Apoi, închideți comentariul la începutul rândului 11, chiar înainte de eticheta de deschidere . O structură de comentarii similară apare pe rândurile 13 până la 17 între cele două elemente , chiar înainte de secțiunea Locație. În general, am comentat orice spațiu alb potențial între coloane, utilizând simultan aceleași comentarii pentru a identifica secțiunile noastre.
Acum avem o grilă reutilizabilă cu trei coloane care acceptă diferite aspecte, folosind lățimi de coloane de 1/3 și 2/3. Pagina noastră de pornire conține acum trei coloane, care separă toate teaser-urile.
Orez. 5.02. Pagina de pornire Styles Conference include acum un aspect cu trei coloane
Demo și cod sursă
Mai jos puteți vizualiza site-ul web Styles Conference în starea sa actuală, precum și descărca codul sursă curent al site-ului.
Poziționare unică a elementelor
Mai devreme sau mai târziu, toată lumea va dori să poziționeze un element cu precizie, dar elementele float sau inline-block nu permit un astfel de truc. Elementele flotante care elimină un element din fluxul paginii produc adesea rezultate nedorite, deoarece elementele din jur se înfășoară în jurul elementului flotant. Elementele de bloc inline, cu excepția cazului în care creăm coloane, pot fi destul de complicate când vine vorba de poziționarea corectă. Pentru situații ca aceasta, putem folosi proprietatea de poziție în combinație cu proprietățile de offset ale blocului.
Proprietatea de poziție determină modul în care elementul este poziționat pe pagină și dacă va fi afișat în fluxul normal de documente. Este folosit împreună cu proprietățile de offset ale blocului sus , dreapta , jos și stânga , care determină exact unde va fi poziționat elementul prin mișcarea elementului în direcții diferite.
În mod implicit, valoarea poziției fiecărui element este setată la static , ceea ce înseamnă că elementul există în fluxul normal al documentului și nu necesită nicio proprietate pentru a-l poziționa. Valoarea static este cel mai adesea suprascrisă de valoarea relativă sau absolută, pe care o vom analiza în continuare.
Poziționare relativă
Setarea proprietății de poziție la relativă permite elementelor să apară în fluxul normal al paginii, rezervând spațiu pentru element așa cum este intenționat și împiedicând alte elemente să curgă în jurul acestuia. Cu toate acestea, vă permite, de asemenea, să modificați poziția unui element folosind proprietățile offset. De exemplu, luați în considerare următoarele HTML și CSS:
cu clasa offset valoarea poziției este setată la relativă, precum și două proprietăți offset - stânga și sus. Acest lucru menține poziția inițială a elementului și altor elemente nu li se permite să se deplaseze în acea zonă. În plus, proprietățile offset mută elementul împingându-l cu 20 de pixeli din stânga și 20 de pixeli din partea de sus a locației originale.
Pentru elementele relativ poziționate, este important de știut că proprietățile de offset ale blocului determină unde va fi mutat elementul, având în vedere poziția sa inițială. Deci, o proprietate din stânga cu o valoare de 20 de pixeli împinge de fapt elementul la dreapta 20 de pixeli. O proprietate de sus cu o valoare de 20px va împinge apoi elementul în jos cu 20px.
Când poziționăm un element utilizând proprietățile de offset, elementul se suprapune pe elementul de sub el, în loc să-l împingă în jos, așa cum o fac marja sau proprietățile de umplutură.
Poziționare absolută
Valoarea absolută pentru proprietatea de poziție diferă de valoarea relativă prin aceea că elementul poziționat absolut nu apare în fluxul normal al documentului, iar spațiul și poziția originală a elementului poziționat absolut nu sunt rezervate.
În plus, elementele poziționate absolut se deplasează în raport cu elementul părinte poziționat relativ cel mai apropiat. Dacă nu există un părinte poziționat relativ, atunci elementul poziționat absolut va fi poziționat în raport cu elementul
. Aceasta este o mică informație; să aruncăm o privire la cum funcționează în interiorul unui cod:
În acest exemplu, elementul este poziționat relativ la, dar nu include nicio proprietate de offset. Prin urmare, poziția sa nu se schimbă. Element
cu clasa offset include valoarea poziției ca absolută . Din moment ce elementul este elementul părinte poziționat relativ cel mai apropiat de
, apoi elementul
va fi pozitionat relativ la element
.
Pentru elementele relativ poziționate, proprietățile offset determină în ce direcție va fi mutat elementul în raport cu el însuși. Pentru elementele poziționate absolut, proprietățile offset determină în ce direcție va fi mutat elementul în raport cu cel mai apropiat părinte poziționat relativ.
Ca urmare a proprietăților din dreapta și de sus, elementul
va apărea la 20 de pixeli din dreapta și 20 de pixeli din partea de sus în interior
.
Din moment ce elementul
pozitionat absolut, nu este pozitionat in fluxul normal al paginii si se va suprapune oricarei elemente din jurul acesteia. Mai mult, poziția de pornire
nu este salvat și alte elemente pot ocupa acest loc. În general, majoritatea poziționării se pot întâmpla fără a utiliza proprietățile de poziție și proprietățile offset, dar în unele cazuri pot fi extrem de utile.
rezumat
Învățarea cum să poziționați conținutul în HTML și CSS este un pas uriaș către stăpânirea acestor limbi. Adăugați la aceasta modelul bloc și suntem pe drumul nostru spre a deveni dezvoltatori front-end.