Posizionamento del blocco in css. Posizionamento dei contenuti
Posizionamento del blocco in css. Posizionamento dei contenuti
22.08.2019Programmi
posizionamento blocchi CSS una delle fasi più importanti del layout, perché è ciò che influisce sull'adattabilità del sito o sulla possibilità di una sua implementazione in futuro (se al momento non è richiesto), e ha anche un impatto significativo sull'ulteriore ridimensionamento il sito. Non è raro che gli "sfortunati layout designer" realizzino un layout del genere che alla fine è più facile buttarlo via che cambiare qualcosa, ma allo stesso tempo può sembrare completamente conforme al layout. Questa situazione nasce dal non capire dove e quando utilizzare l'uno o l'altro tipo di posizionamento. Oggi cercheremo di capire questo problema. E così, in css c'è una proprietà posizione. Questa proprietà può assumere 5 valori, ma ne considereremo 4 principali:
assoluto
statico
parente
fisso
Posizionamento assoluto del blocco (assoluto)
Il primo, nella nostra lista, il metodo di posizionamento è assoluto. Quando viene assegnata questa proprietà, il blocco diventa un'unità a sé stante e il resto degli elementi della pagina non influisce sulla sua posizione, né su altri elementi. La dimensione del blocco è determinata dalle proprietà di larghezza e altezza e la posizione nella pagina è determinata dalle proprietà superiori. a sinistra, a destra e in basso questi parametri impostano il riempimento dai bordi superiore, sinistro, destro e inferiore. Se il blocco non ha un elemento genitore, ed anche se il posizionamento dell'elemento genitore è diverso da statico, allora le proprietà top, left, bottom, right impostano i rientri dall'inizio della pagina, altrimenti dai bordi del elemento padre.
Molto spesso, questo tipo di posizionamento viene utilizzato quando il blocco deve essere premuto sul bordo destro o inferiore. Considera questo layout.
Per comodità, i blocchi sono stati evidenziati con una cornice multicolore. Il markup sarà simile a questo:
XHTML
Relazione ( posizione: relativa; ) .giallo ( posizione: assoluta; a destra: 10px; in basso: 10px; )
relazione
posizione: relativa;
Giallo
posizione: assoluta;
a destra: 10px;
in basso: 10px
In questo esempio, abbiamo utilizzato le proprietà right e bottom per impostare il rientro dai bordi destro e inferiore. Questi valori di proprietà sono equivalenti a top: L'altezza dell'elemento è 10px ea sinistra: la larghezza dell'elemento è 10px.
Il posizionamento assoluto viene talvolta utilizzato anche quando è necessario "saltare" un elemento sull'altro.
Posizionamento statico (statico)
Il tipo più comune di posizionamento che si verifica in ogni pagina e di solito è impostato per la maggior parte degli elementi è statico, in CSS è scritto come statico. Per la maggior parte dei tag HTML, questo valore è determinato per impostazione predefinita. se la posizione non è impostata in modo esplicito, il valore sarà statico. Con questa disposizione gli elementi si allineano uno sotto l'altro e le coordinate nella finestra di ogni elemento dipendono dagli elementi più vicini con posizione: statica o posizione: relativa. Le proprietà in alto, a sinistra, a destra e in basso non funzioneranno con questo posizionamento, la posizione viene modificata a causa della proprietà del margine.
Posizionamento relativo (relativo)
Questo tipo di posizionamento è molto simile al posizionamento statico, tranne per il fatto che la posizione dell'elemento può essere modificata con le proprietà top, left, right, bottom e margin.
Posizionamento fisso (fisso)
Il posizionamento fisso per le peculiarità dell'impostazione delle coordinate è simile all'assoluto, ma la posizione viene calcolata non rispetto alla pagina HTML, ma rispetto alla finestra del browser, ad es. con la proprietà top: 10px, imposterai il riempimento superiore su 10px DALLA FINESTRA DEL BROWSER e indipendentemente dal livello di scorrimento della pagina in cui ti trovi, questo elemento seguirà sempre il tuo schermo.
Solitamente utilizzato per elementi di navigazione in modo che l'utente abbia sempre in vista informazioni importanti o collegamenti a pagine interessanti.
Proprietà posizione ha i seguenti significati statico parente assoluto fisso Le proprietà vengono applicate solo in combinazione con esso (escl. posizione: statico;) superiore parte inferiore Giusto sinistra può essere presente contemporaneamente margine trasformare float (escl. posizione: assoluta; e posizione: fissa;)
Aggiungi un tag vuoto prima del div con class="primer" - .
introduzione
Gli elementi di una pagina web occupano una certa quantità di spazio. Per analogia con le barche nel gioco "Battleship". Tra le navi dovrebbero esserci celle vuote - margine.
Per posizionare un elemento sopra un altro, devi impostare un valore negativo per il margine. Ma poi i contenuti dei tag si sovrapporranno. Con l'aiuto della posizione e delle proprietà, salgono al livello 2.
In un ordine naturale, i tag inferiori nel codice sono mostrati sopra quelli superiori. Grazie allo z-index al livello 2, puoi determinare tu stesso l'elemento visibile.
Posizionamento statico - posizione: statico;
position: static è l'impostazione predefinita e sovrascrive relative , absolute e fixed . I valori delle proprietà superiore, inferiore, destra, sinistra vengono ignorati. In assenza di trasformazione, non viene nemmeno preso in considerazione lo z-index.
MA
B
A
Posizionamento relativo - posizione: relativa;
Verrà data priorità al blocco a cui assegniamo posizione: relativo. Il contenuto dell'elemento inferiore è nascosto.
MA
B
A
Per posizionare il blocco B sopra C, ma sotto A, non basta assegnare la posizione: rispetto ad esso, poiché nel codice è sotto il blocco A, il che significa che si sovrapporrà ad esso.
MA
B
A
È inoltre necessario impostare l'indice z per l'elemento B in modo che sia inferiore a quello del blocco A.
MA
B
A
Invece del margine nel posizionamento relativo, a volte è meglio usare le proprietà alto, basso, destra, sinistra. Il punto di partenza per loro è la posizione iniziale dell'elemento. Allo stesso tempo, il blocco B continua a essere posizionato come se il blocco A si trovasse nello stesso posto - lascia spazio vuoto per esso. Pertanto, non puoi evocare con un div () vuoto.
MA
B
A
Piena analogia con una proprietà
MA
B
A
Per elementi in linea
Gli elementi di margine incorporati non si spostano su e giù (). Solo in alto, in basso
BMAB
o
BMAB
B A B
Posizionamento assoluto e fisso
Sembrerebbe che il blocco con posizione: assoluto debba essere sopra posizione: relativo, ma non è così, qui si applica l'ordine naturale. Ciò significa che z-index ti consentirà di scegliere un elemento prioritario tra di loro.
MA
B
A
Il blocco C ignora la posizione iniziale del blocco B, perché con position: absolute e position: fixed, l'elemento smette di influenzare i tag adiacenti o attraverso la sua larghezza/altezza o float: left.
MA
B
A
Tavolo finale
proprietà distintive
posizione: statica;
posizione: relativa; trasformare: translate();
posizione: assoluta;
posizione: fissa;
sovrapposizione
gli elementi non devono essere posizionati uno sopra l'altro
gli elementi hanno la precedenza sulla visibilità su statico. Altri valori sono equivalenti. Quello che si trova al di sotto del codice sarà visibile o avrà un valore z-index elevato
punto di riferimento in alto, a destra, in basso e a sinistra
ignorato
la posizione iniziale dell'elemento
bordo dell'elemento padre
bordo della finestra del browser
elementi intorno
tenere conto della posizione attuale dell'elemento
tenere conto della posizione iniziale dell'elemento
ignora la posizione dell'elemento
larghezza: 100% è la larghezza
elemento (per inline)/elemento padre (per blocco)
elemento padre con posizione non impostata su statico
finestra del browser
sull'elemento di scorrimento della pagina
si sposta
"si attacca" alla posizione specificata nella finestra del browser
E ora, per consolidare il materiale, fai clic sui pulsanti all'inizio dell'articolo, pensa al motivo per cui si sono verificati tali cambiamenti.
Ultimo aggiornamento: 28/04/2016
CSS fornisce funzionalità di posizionamento degli elementi, il che significa che possiamo posizionare un elemento in una posizione specifica della pagina.
La proprietà principale che controlla il posizionamento nei CSS è la proprietà position. Questa proprietà può assumere uno dei seguenti valori:
statico: posizionamento dell'elemento standard, valore di default
assoluto : l'elemento è posizionato rispetto ai limiti dell'elemento contenitore, a meno che la sua proprietà position non sia uguale a static
relativo : l'elemento è posizionato rispetto alla sua posizione predefinita. In genere, lo scopo principale del posizionamento relativo non è quello di spostare un elemento, ma di impostare un nuovo punto di ancoraggio per il posizionamento assoluto degli elementi nidificati.
fisso : l'elemento è posizionato rispetto alla finestra del browser, questo permette di creare elementi fissi che non cambiano posizione durante lo scorrimento
Non dovresti applicare contemporaneamente la proprietà float e qualsiasi tipo di posizionamento diverso da statico (ovvero il tipo predefinito) a un elemento.
Posizionamento assoluto
La finestra del browser ha i bordi superiore, inferiore, destro e sinistro. Per ciascuno di questi quattro bordi, esiste una proprietà CSS corrispondente: sinistra (margine sinistro), destra (margine destro), superiore (margine superiore del contenitore) e inferiore (margine inferiore). I valori di queste proprietà sono specificati in pixel, ems o percentuali. Non è necessario impostare valori per tutti e quattro i lati. Di norma, vengono impostati solo due valori: il rientro dal bordo superiore della parte superiore e il rientro dal bordo sinistro di sinistra.
Layout a blocchi in HTML5
CIAO MONDO
Qui, il div posizionato in modo assoluto sarà 100px a sinistra del bordo della vista e 50px dal basso.
Non è così importante che dopo questo elemento div ci siano altri elementi. Questo blocco div sarà comunque posizionato rispetto ai confini del viewport del browser.
Se un elemento posizionato in modo assoluto si trova in un altro contenitore, che a sua volta ha un valore della proprietà position diverso da static , l'elemento viene posizionato rispetto ai limiti del contenitore:
Posizionamento in HTML5
Posizionamento relativo
Anche il posizionamento relativo viene impostato utilizzando il valore relativo. Per specificare la posizione specifica in cui l'elemento viene spostato, vengono applicate le stesse proprietà in alto, a sinistra, a destra e in basso:
Posizionamento in HTML5
proprietà z-index
Per impostazione predefinita, quando due elementi di bordo corrispondono, l'ultimo elemento definito nel markup html viene visualizzato sopra l'altro. Tuttavia, la proprietà z-index consente di modificare l'ordine degli elementi quando si sovrappongono. La proprietà prende un numero come valore. Gli elementi con un valore più alto per questa proprietà appariranno sopra gli elementi con un valore z-index più basso.
Per esempio:
Posizionamento in HTML5
Ora aggiungiamo una nuova regola allo stile del blocco redBlock:
RedBlock( z-index: 100; posizione: assoluta; in alto: 20px; sinistra:50px; larghezza: 80px; altezza: 80px; colore di sfondo: rosso; )
Qui lo z-index è 100. Ma non deve essere 100. Poiché il secondo blocco non ha z-index ed è in realtà zero, possiamo impostare la proprietà z-index del redBlock su qualsiasi valore maggiore di zero.
E ora il primo blocco sarà sovrapposto al secondo, e non viceversa, come all'inizio.
Una delle cose migliori dei CSS è che gli stili ci danno la possibilità di posizionare contenuti ed elementi su una pagina in quasi tutti i modi immaginabili. Questo dà struttura al nostro design e aiuta a rendere il contenuto più visivo.
Esistono diversi tipi di posizionamento nei CSS, ognuno dei quali ha il proprio ambito. In questo capitolo daremo un'occhiata ad alcuni casi d'uso diversi: creare layout riutilizzabili e posizionare in modo univoco elementi usa e getta, oltre a descrivere diverse tecniche per farlo.
Posizionamento tramite galleggiante
Un modo per posizionare gli elementi in una pagina è tramite la proprietà float. Questa proprietà è abbastanza versatile e può essere applicata in molti modi.
In sostanza, la proprietà float prende un elemento, lo rimuove dal flusso normale della pagina e lo posiziona a sinistra oa destra dell'elemento padre. Tutti gli altri elementi della pagina si avvolgeranno attorno a tale elemento. Ad esempio, i paragrafi si avvolgeranno attorno a un'immagine se l'elemento lo ha la proprietà float è impostata.
Quando la proprietà float viene applicata a più elementi contemporaneamente, consente di creare un layout con elementi float uno accanto o di fronte all'altro, come mostrato in un layout a più colonne.
La proprietà float accetta diversi valori, i due più popolari sono left e right , che consentono a un elemento di essere posizionato a sinistra oa destra del suo genitore.
Img ( float: sinistra; )
galleggiare in pratica
Creiamo un layout di pagina generale con un'intestazione in alto, due colonne al centro e un piè di pagina in basso. Idealmente, questa pagina dovrebbe essere contrassegnata con elementi
,
,
Per riferimento, gli elementi mobili sono posizionati sul bordo dell'elemento padre. Se non è presente alcun genitore, l'elemento mobile verrà posizionato sul bordo della pagina.
Quando facciamo fluttuare un elemento, lo rimuoviamo dal flusso normale del documento HTML. Ciò fa sì che la larghezza di quell'elemento venga impostata per impostazione predefinita sulla larghezza del suo contenuto. A volte, ad esempio quando creiamo colonne per un layout riutilizzabile, questo comportamento non è desiderato. Questo problema può essere risolto aggiungendo una proprietà di larghezza del valore fisso per ciascuna colonna. Inoltre, per evitare che gli elementi flottanti si tocchino tra loro, con il risultato che il contenuto di un elemento è accanto a un altro, possiamo usare la proprietà margin per impostare lo spazio tra gli elementi.
Di seguito espandiamo il blocco di codice precedente aggiungendo un margine e una larghezza per ciascuna colonna per modellare meglio il risultato desiderato.
float possono modificare il valore di visualizzazione di un elemento
Per un elemento mobile, è anche importante comprendere che l'elemento viene rimosso dal normale flusso della pagina e che il valore di visualizzazione predefinito dell'elemento potrebbe cambiare. La proprietà float si basa sul valore di visualizzazione dell'elemento impostato su block e può modificare il valore di visualizzazione predefinito dell'elemento se non è già visualizzato come elemento di blocco.
Ad esempio, un elemento la cui visualizzazione è impostata su inline , come inline , ignora qualsiasi proprietà di altezza o larghezza. Tuttavia, se si specifica un float per un elemento inline, il valore visualizzato cambierà in block e quindi l'elemento può già assumere le proprietà height o width.
Quando facciamo fluttuare un elemento, dobbiamo essere consapevoli di come influisce sul valore della proprietà display.
Per due colonne puoi float , una colonna come sinistra e l'altra come destra , ma per più colonne dovremo cambiare il nostro approccio. Supponiamo, ad esempio, di voler avere una riga di tre colonne tra i nostri elementi e
......
...
...
Per organizzare questi tre elementi in una riga di tre colonne, dobbiamo flottare tutti gli elementi come a sinistra. Dobbiamo anche regolare la larghezza prendere in considerazione colonne aggiuntive e posizionarle una accanto all'altra.
Qui abbiamo tre colonne, tutte con lo stesso valore di larghezza e margine e con un float impostato su left .
Demo di layout a tre colonne con float
Pulizia e contenuto mobile
La proprietà float è stata originariamente progettata per consentire al contenuto di fluire attorno alle immagini. Un'immagine può essere spostata e tutto il contenuto attorno a quell'immagine si avvolge naturalmente attorno ad essa. Sebbene funzioni alla grande per le immagini, la proprietà float non è stata pensata per essere utilizzata per scopi di layout e posizionamento e quindi presenta alcune insidie.
Una di queste insidie è che a volte gli stili appropriati non vengono visualizzati su un elemento che si trova accanto o padre dell'elemento float. Quando un elemento viene spostato, viene rimosso dal normale flusso della pagina e, di conseguenza, gli stili degli elementi attorno a quell'elemento mobile possono essere influenzati negativamente.
Spesso i valori delle proprietà del margine e del riempimento vengono interpretati erroneamente, facendoli fondere nell'elemento mobile. Potrebbero essere interessate anche altre proprietà.
Un altro errore è che a volte il contenuto indesiderato avvolgerà l'elemento float. La rimozione di un elemento dal flusso del documento consente a tutti gli elementi attorno all'elemento mobile di ignorarlo e utilizzare lo spazio disponibile attorno all'elemento mobile, cosa spesso indesiderabile.
Nel nostro precedente esempio a due colonne, dopo aver flottato gli elementi e
Layout demo senza cancellare il float
Per evitare che il contenuto si avvolga attorno agli elementi float, è necessario cancellare il float e riportare la pagina al suo flusso normale. Vedremo come cancellare i float e poi daremo un'occhiata al loro contenuto.
Cancellare un galleggiante
La cancellazione di un float viene eseguita con la proprietà clear, che assume diversi valori: i valori più comunemente usati sono left, right ed entrambi.
Div (chiaro: sinistro; )
Il valore di sinistra cancella i float di sinistra, mentre il valore di destra cancella i float di destra. Un valore di entrambi , tuttavia, cancella i float sinistro e destro ed è spesso la scelta più ideale.
Tornando al nostro esempio precedente, se utilizziamo la proprietà clear con un valore di entrambi su un elemento
Piè di pagina (chiaro: entrambi; )
Demo del layout con cancellazione del float
contenuto galleggiante
Invece di cancellare il float, un'altra opzione consiste nell'impostare il contenuto del float. Il risultato è praticamente lo stesso, ma il contenuto float assicura davvero che tutti i nostri stili vengano visualizzati correttamente.
Per impostare il contenuto su float , gli elementi float devono trovarsi all'interno di un elemento padre, esso fungerà da contenitore, lasciando il flusso del documento completamente normale al di fuori di esso. Gli stili per questo elemento genitore presentano la classe gruppo, come mostrato qui:
Non c'è molto da fare qui, ma fondamentalmente tutto ciò che fa CSS è cancellare tutti gli elementi mobili all'interno dell'elemento gruppo e riportare il documento al flusso normale.
Più specificamente, gli pseudo-elementi ::before e ::after, come discusso nella Lezione 4, generano dinamicamente elementi sopra e sotto un elemento con class group . Questi elementi non includono alcun contenuto e vengono visualizzati come elementi di tabella, simili agli elementi di blocco. L'elemento generato dinamicamente dopo l'elemento gruppo cancella il float all'interno dell'elemento gruppo, proprio come clear prima. Infine, l'elemento group cancella anche eventuali float che potrebbero apparire prima di esso, nel caso in cui sia presente un float sinistro o destro. Qui è incluso anche un piccolo trucco che fa funzionare bene i browser più vecchi.
C'è più codice qui rispetto al singolo clear: entrambi i comandi, ma può essere abbastanza utile.
Considerando il nostro layout di pagina a due colonne, potremmo avvolgere e
La tecnica mostrata qui è nota come "clearfix" e si trova spesso su altri siti con il nome di classe clearfix o cfr. Abbiamo scelto di utilizzare il gruppo nome classe perché rappresenta un gruppo di elementi ed esprime meglio il contenuto.
Quando gli elementi sono impostati per essere mobili, è importante osservare come influiscono sul flusso della pagina e assicurarsi che il flusso della pagina venga reimpostato cancellando o tramite il contenuto mobile, a seconda dei casi. In caso contrario, il rilevamento del float può causare molti mal di testa, specialmente su pagine che contengono più righe, ciascuna con più colonne.
In pratica
Torniamo al sito di Styles Conference e proviamo ad aggiungere float ad alcuni contenuti.
Per prima cosa, prima di applicare float a qualsiasi elemento, forniamo contenuto per questi elementi float aggiungendo un clearfix al nostro CSS. Nel file main.css, appena sotto i nostri stili di griglia, aggiungeremo un clearfix sotto il nome della classe del gruppo, come prima. /* ======================================== Clearfix ======================================================== == =============================== */ .group::prima, .group::after ( contenuto: " "; display : tabella; ) .group::after ( cancella: entrambi; ) .group ( cancella: entrambi; *zoom: 1; )
Ora che possiamo usare float , impostiamolo su main
all'interno dell'elemento come a sinistra e lascia che il resto del contenuto nell'intestazione lo avvolga a destra.
Per fare ciò, aggiungi la classe logo all'elemento
. Quindi, all'interno del nostro CSS, aggiungiamo una nuova sezione di stile per l'intestazione principale. In questa sezione selezioneremo un elemento
con la classe logo e imposta il float a sinistra .
/* ======================================== Titolo principale ====== == ================================================= */ .logo ( float: sinistra; )
Già che siamo qui, aggiungiamo qualche dettaglio in più al nostro logo. Iniziamo con il posizionamento degli elementi o un'interruzione di riga tra le parole "Stili" e "Conferenza" per forzare il testo del nostro logo su due righe.
In CSS, aggiungiamo un bordo nella parte superiore del nostro logo e un'imbottitura verticale per far respirare liberamente il logo.
Logo ( bordo superiore: 4px solido # 648880; riempimento: 40px 0 22px 0; float: sinistra; )
Dal momento che abbiamo creato un elemento
floated, vogliamo impostare il contenuto su float . parente prossimo a
è l'elemento , quindi aggiungeremo una classe di gruppo. Questo applicherà gli stili clearfix che abbiamo impostato in precedenza.
...
Elemento prende forma, quindi diamo un'occhiata all'elemento
A differenza dell'elemento , tuttavia, non applicheremo la classe direttamente all'elemento float. Questa volta aggiungeremo una classe al genitore dell'elemento float e useremo un selettore CSS univoco per selezionare l'elemento e quindi float.
Iniziamo aggiungendo la classe primary-footer all'elemento
Ora che la classe primary-footer è impostata sull'elemento
/* ======================================== seminterrato principale ====== == ========================================= */ .primary-footer piccolo ( float: left; )
Per testare - qui selezioniamo un elemento , che deve trovarsi all'interno di un elemento con un valore di attributo class di primary-footer , come il nostro elemento
Infine, aggiungiamo un po' di riempimento nella parte superiore e inferiore dell'elemento.
Oltre a usare float , un altro modo per posizionare il contenuto consiste nell'usare la proprietà display in combinazione con il valore inline-block. Il metodo inline-block, come discuteremo in seguito, è utile principalmente per il layout di pagina o per posizionare elementi in una riga uno accanto all'altro.
Ricordiamo che il valore inline-block per la proprietà display disegna gli elementi in una linea e consente loro di assumere tutte le proprietà del modello box, inclusi height , width , padding , border e margin . L'uso del blocco in linea ci consente di sfruttare appieno il modello box senza doverci preoccupare di ripulire eventuali float.
blocco in linea in pratica
Diamo un'occhiata al nostro esempio a tre colonne dall'inizio. Inizieremo mantenendo il nostro HTML in questo modo:
......
...
...
Ora invece di float per i nostri tre elementi cambieremo il loro valore di visualizzazione in inline-block , lasciando le proprietà margin e width come erano prima. Di conseguenza, il nostro CSS sarà simile a questo:
Sfortunatamente, questo codice da solo non è sufficiente per fare il trucco e l'ultimo elemento spinto su una nuova linea. Ricorda, poiché gli elementi inline-block appaiono sulla stessa riga uno dopo l'altro, includono un singolo spazio tra di loro. Quando la dimensione di ogni singolo spazio viene aggiunta alla larghezza e al valore del margine orizzontale di tutti gli elementi in una riga, la larghezza totale diventa troppo grande, spingendo fuori l'ultimo elemento a una nuova linea. Per visualizzare tutti gli elementi sulla stessa linea, dovresti rimuovere lo spazio bianco tra ciascuno
.
Dimostrazione di elementi inline-block con spazio
Rimozione dello spazio tra gli elementi inline-block
Esistono diversi metodi per rimuovere lo spazio tra gli elementi inline-block e alcuni sono più complessi di altri. Ci concentreremo su due dei metodi più semplici, entrambi all'interno di HTML.
La prima soluzione è inserire ogni nuovo tag di apertura dell'elemento sulla stessa riga del tag di chiusura dell'elemento precedente . Invece di usare una nuova riga per ogni elemento, finiamo per iniziare gli elementi sulla stessa riga. Il nostro HTML potrebbe assomigliare a questo:
...
...
...
...
Scrivere elementi inline-block in questo modo garantisce che non ci sia spazio tra tali elementi in HTML. Pertanto, lo spazio non verrà visualizzato durante il rendering della pagina.
Dimostrazione di elementi inline-block senza spazi
Un altro metodo per rimuovere lo spazio tra gli elementi inline-block consiste nell'aprire un commento HTML subito dopo il tag di chiusura dell'elemento. Quindi chiudi il commento immediatamente prima del tag di apertura dell'elemento successivo. Ciò consente agli elementi inline di iniziare e terminare su righe separate in HTML e "commenterà" qualsiasi potenziale spazio tra gli elementi. Di conseguenza, il codice sarà simile a questo:
...
...
...
...
Nessuna di queste opzioni è perfetta, ma sono utili. Sono propenso a utilizzare i commenti per una migliore organizzazione, ma quale opzione scegliere dipende interamente da te.
Crea layout riutilizzabili
Quando si crea un sito, è sempre meglio scrivere stili modulari che possono essere riutilizzati altrove e i layout riutilizzabili sono in cima all'elenco dei codici riutilizzabili. I layout possono essere creati con elementi float o inline-block, ma quale funziona meglio e perché?
Se gli elementi float o inline-block siano migliori per la struttura della pagina è aperto al dibattito. Il mio approccio consiste nell'utilizzare elementi inline-block per creare una griglia o un layout di pagina, quindi utilizzare i float quando voglio che il contenuto scorra attorno a quell'elemento (che è ciò per cui i float sono stati progettati quando si lavora con le immagini). In generale, trovo anche più facile lavorare con gli elementi inline-block.
Tuttavia, usa ciò che funziona meglio per te. Se hai più familiarità con un approccio rispetto all'altro, usalo.
Sono attualmente in lavorazione nuove specifiche CSS, in particolare le proprietà flex e grid, per aiutarti a decidere come disporre al meglio le tue pagine. Tieni d'occhio questi metodi quando iniziano a comparire.
In pratica
Con una solida conoscenza dei layout riutilizzabili, è ora di presentarne uno al nostro sito Styles Conference.
Per il sito Web di Styles Conference, creeremo un layout a tre colonne utilizzando elementi inline-block. Lo faremo in questo modo per ottenere tre colonne della stessa larghezza o due colonne con una larghezza totale divisa tra loro come 2/3 per una e 1/3 per l'altra.
Per cominciare, creeremo classi che definiscono la larghezza di queste colonne. Chiameremo queste due classi col-1-3 per un terzo e col-2-3 per due terzi. Nella sezione Griglia del nostro file main.css, andiamo avanti e definiamo queste classi e le loro larghezze corrispondenti.
Vogliamo che entrambe le colonne vengano visualizzate come elementi di blocco in linea. Dobbiamo anche assicurarci che siano allineati verticalmente alla parte superiore di ogni colonna.
Creiamo due nuovi selettori che condividono display e vertical-align .
Col-1-3, .col-2-3 ( display: inline-block; vertical-align: in alto; )
Dai un'occhiata di nuovo ai CSS. Abbiamo creato due selettori di classe col-1-3 e col-2-3 separati da una virgola. Una virgola alla fine del primo selettore significa che è seguito da un altro selettore. Il secondo selettore è seguito da una parentesi graffa di apertura, che indica che la dichiarazione di stile sta per iniziare. Con una virgola che separa i selettori, possiamo associare uno stile a più selettori contemporaneamente.
Vogliamo mettere un po' di spazio tra le colonne per aiutare a suddividere il contenuto. Questo può essere fatto aggiungendo un riempimento orizzontale a ciascuna colonna.
Funziona bene, tuttavia, quando due colonne sono una accanto all'altra, la larghezza dello spazio tra loro sarà doppia rispetto allo spazio dal bordo esterno. Per bilanciare questo, metteremo tutte le nostre colonne in una griglia e aggiungeremo lo stesso riempimento.
Usiamo la classe grid per definire la nostra griglia e quindi diamo lo stesso riempimento orizzontale alle classi grid , col-1-3 e col-2-3. Con le virgole che separano nuovamente i nostri selettori, il nostro CSS si presenta così:
Quando impostiamo il riempimento orizzontale dobbiamo fare attenzione. Ricorda, nell'ultimo tutorial, abbiamo creato un contenitore con la classe contenitore centrata su tutto il nostro contenuto nella pagina con una larghezza di 960 pixel. In questo momento, se dovessimo inserire un elemento griglia all'interno di un elemento contenitore, i loro padding orizzontali si accumulerebbero e le nostre colonne non verrebbero visualizzate proporzionalmente alla larghezza del resto della pagina.
Lo faremo suddividendo il vecchio set di regole del contenitore nel seguente:
Ora qualsiasi elemento con contenitore di classe o griglia sarà largo 960 px e centrato sulla pagina. Inoltre, abbiamo mantenuto il riempimento orizzontale esistente per qualsiasi elemento contenitore spostandolo in un nuovo insieme separato di regole.
Ok, tutta la parte difficile necessaria per impostare la griglia è terminata. Ora è il momento di lavorare con il nostro HTML e vedere come funzionano queste classi.
Inizieremo con i teaser nella pagina principale, nel file index.html, allineati in tre colonne. I teaser sono attualmente racchiusi con un elemento con la classe contenitore. Vogliamo cambiare la classe del contenitore in griglia in modo che all'interno possiamo iniziare a posizionare le colonne.
...
...
...
...
E infine, poiché ciascuna delle nostre colonne è un elemento inline-block, dobbiamo assicurarci di rimuovere lo spazio bianco tra di loro. Per fare ciò, utilizzeremo i commenti e aggiungeremo della documentazione a ciascuna sezione per organizzare al meglio il nostro codice.
...
...
...
Per verifica, alla riga 3 abbiamo lasciato un commento che identifica la sezione "Relatori" che la segue. Alla fine della riga 7, apriamo il commento subito dopo il tag di chiusura. All'interno di questo commento, alla riga 9, definiamo la prossima sezione "Programma". Quindi chiudiamo il commento all'inizio della riga 11, appena prima del tag di apertura . Una struttura di commento simile appare alle righe da 13 a 17 tra due elementi , subito prima della sezione Venue. In generale, abbiamo commentato qualsiasi potenziale spazio bianco tra le colonne, utilizzando anche gli stessi commenti per identificare le nostre sezioni.
Ora abbiamo una griglia riutilizzabile a 3 colonne che supporta layout diversi utilizzando larghezze di 1/3 e 2/3 colonne. La nostra pagina principale ora contiene tre colonne, che separano tutti i teaser.
Riso. 5.02. La home page di Styles Conference ora include un layout a tre colonne
Demo e codice sorgente
Di seguito puoi visualizzare il sito di Styles Conference nel suo stato attuale, nonché scaricare il codice sorgente corrente per il sito.
Posizionamento unico degli elementi
Prima o poi tutti vorranno posizionare con precisione un elemento, ma gli elementi float o inline-block non ti permettono di fare questo trucco. Gli elementi mobili, che rimuovono un elemento dal flusso della pagina, producono spesso risultati indesiderati perché gli elementi circostanti fluttuano attorno all'elemento mobile. Gli elementi inline-block, a meno che non stiamo creando colonne, possono essere piuttosto scomodi quando si tratta di un corretto posizionamento. Per situazioni come questa, possiamo usare la proprietà position insieme alle proprietà offset del box.
La proprietà position determina come l'elemento viene posizionato sulla pagina e se verrà visualizzato nel flusso normale del documento. Viene utilizzato insieme alle proprietà di offset del riquadro: top, right, bottom e left, che specificano esattamente dove verrà posizionato l'elemento spostando l'elemento in direzioni diverse.
Per impostazione predefinita, ogni elemento ha il suo valore di posizione impostato su static , il che significa che l'elemento esiste nel normale flusso del documento e non richiede alcuna proprietà per compensarlo. Il valore statico è spesso sovrascritto dal valore relativo o assoluto, che vedremo in seguito.
Posizionamento relativo
Il valore relativo per la proprietà position consente agli elementi di apparire nel normale flusso della pagina, riservando spazio all'elemento come previsto e impedendo ad altri elementi di fluire attorno ad esso. Tuttavia, consente anche di modificare la posizione dell'elemento utilizzando le proprietà di offset. Ad esempio, considera i seguenti HTML e CSS:
...
...
...
Div ( altezza: 100px; larghezza: 100px; ) .offset ( a sinistra: 20px; posizione: relativa; in alto: 20px; )
Dimostrazione di posizionamento relativo
Qui per il secondo elemento
con la classe offset impostata su position come relativa e due proprietà offset, left e top . Ciò mantiene la posizione originale dell'elemento e gli altri elementi non possono spostarsi in quest'area. Inoltre, le proprietà di offset spostano l'elemento, spingendolo a 20 pixel da sinistra e 20 pixel dalla parte superiore della sua posizione originale.
Per elementi posizionati relativamente, è importante sapere che le proprietà di offset del box determinano dove verrà spostato l'elemento, data la sua posizione originale. Quindi una proprietà left di 20 pixel spinge effettivamente l'elemento a destra di 20 pixel. Una proprietà top di 20px spingerà quindi l'elemento verso il basso di 20px.
Quando posizioniamo un elemento utilizzando le proprietà offset, l'elemento si sovrappone all'elemento sottostante invece di spingerlo verso il basso come fanno le proprietà margin o padding.
Posizionamento assoluto
Il valore assoluto per la proprietà position differisce dal valore relativo in quanto un elemento posizionato in modo assoluto non compare nel flusso normale del documento e lo spazio e la posizione originali di un elemento posizionato in modo assoluto non sono riservati.
Inoltre, gli elementi posizionati in modo assoluto vengono spostati rispetto al loro elemento padre posizionato relativamente più vicino. Se non esiste un genitore posizionato relativo, l'elemento posizionato in modo assoluto sarà posizionato rispetto all'elemento
. Questa è una piccola informazione; diamo un'occhiata a come funziona all'interno di alcuni codici:
...
Sezione ( posizione: relativa; ) div ( posizione: assoluta; destra: 20px; in alto: 20px; )
Dimostrazione del posizionamento assoluto
In questo esempio, l'elemento è posizionato relativamente, ma non include alcuna proprietà di offset. Pertanto, la sua posizione non cambia. Elemento
con offset classe include il valore della posizione come assoluto. Dal momento che l'elemento è l'elemento padre relativamente posizionato più vicino a
, quindi l'elemento
sarà posizionato rispetto all'elemento
.
Per elementi posizionati relativamente, le proprietà di offset determinano in quale direzione l'elemento verrà spostato rispetto a se stesso. Per gli elementi posizionati in modo assoluto, le proprietà di offset determinano in quale direzione verrà spostato l'elemento rispetto al suo genitore posizionato relativamente più vicino.
Come risultato delle proprietà destra e superiore, l'elemento
apparirà a 20 pixel da destra e 20 pixel dall'alto all'interno
.
Dal momento che l'elemento
sono posizionati in modo assoluto, non sono posizionati nel normale flusso della pagina e si sovrapporranno a tutti gli elementi circostanti. Inoltre, la posizione di partenza
non viene salvato e altri elementi potrebbero prendere questo posto. In genere, la maggior parte dei posizionamenti può essere eseguita senza applicare le proprietà di posizione e offset, ma in alcuni casi possono essere estremamente utili.
Riepilogo
Imparare a posizionare i contenuti in HTML e CSS è un enorme passo avanti verso la padronanza di questi linguaggi. Aggiungete a ciò il modello box e siamo sulla buona strada per diventare sviluppatori front-end.