Homepage » Coding » CSS - marginauto; - Come funziona

    CSS - marginauto; - Come funziona

    utilizzando margin: auto centrare un elemento di blocco orizzontalmente è una tecnica ben nota. Ma ti sei mai chiesto perché o come funziona? Per rispondere a questo, dobbiamo prima dare un'occhiata a come margine: funziona automaticamente. Anche nel mix è cosa auto si può fare nei margini, se funziona per il centraggio verticale, e qualche altro problema.

    Ma prima, cosa fa auto davvero?

    La definizione di auto varia con elementi, tipi di elemento e contesto. Ai margini, auto può significare una delle due cose: occupare lo spazio disponibile o 0 px. Queste due volontà definire diversi layout per un elemento.

    "auto" occupando lo spazio disponibile

    Questo è l'uso più comune del margine auto ci imbattiamo spesso. Assegnando auto ai margini sinistro e destro di un elemento, occupano allo stesso modo lo spazio orizzontale disponibile nel contenitore dell'elemento - e quindi l'elemento viene centrato.

    Tuttavia, questo funzionerà solo per i margini orizzontali (maggiori informazioni su perché più tardi), e anche non funzionerà con floated e elementi in linea e da solo, anche questo non può funzionare nel assoluto e elementi posizionati fissi (vedremo comunque come fare in modo che funzionino).

    Faux Float prendendo spazio disponibile

    Da auto in entrambi i margini destro e sinistro occupano lo spazio "disponibile" allo stesso modo, cosa pensi che succederà quando il valore auto è dato solo a uno di quelli?

    Un margine sinistro o destro con auto occuperà tutto lo spazio "disponibile" facendo apparire l'elemento come se fosse stato lavato a destra oa sinistra.

    “auto” Calcolato a 0 px

    Come menzionato prima, auto non funzionerà in elementi flottati, in linea e assoluti. Tutti questi elementi hanno già deciso sul loro layout, quindi non serve usarlo auto per i margini e aspettandomi di centrarsi proprio così.

    Quello sconfiggerà lo scopo iniziale di usare qualcosa come galleggiante. Quindi auto avrà un valore di 0px in quegli elementi.

    auto non funzionerà anche su un elemento di blocco tipico se non ha una larghezza. Tutti gli esempi che ti ho mostrato finora hanno larghezze.

    Una larghezza di valore auto avrà 0px margini. La larghezza di un elemento di blocco in genere copre il suo contenitore quando lo è auto o 100% e quindi un margine auto sarà calcolato a 0px in tal caso.

    Cosa succede ai margini verticali con il valore auto?

    auto in entrambi i margini superiore e inferiore viene sempre calcolato su 0px (tranne che per gli elementi assoluti). Le specifiche W3C lo dicono così:

    “Se “margin-top” o “margin-bottom” è “auto”, il loro valore usato è 0 "

    Il perché, beh, è ​​così lontano, un mistero. Potrebbe essere a causa del tipico flusso di pagine verticali, dove la dimensione della pagina aumenta in altezza. Quindi, centrare un elemento verticalmente nel suo contenitore non lo farà apparire centrato rispetto alla pagina stessa, a differenza di quando è fatto orizzontalmente (nella maggior parte dei casi).

    E forse a causa di questo stesso motivo, hanno deciso di aggiungere un'eccezione per gli elementi assoluti che possono essere centrati verticalmente lungo l'intera altezza della pagina.

    Potrebbe anche essere a causa dell'effetto collasso margine (un collasso di elementi adiacenti” margini) che costituisce un'altra eccezione per i margini verticali.

    Tuttavia, quest'ultimo sembra essere un caso improbabile - dal momento che elementi che non collassano i loro margini - come Floats e elementi con straripamento diverso da visibile, ancora assegnare 0px margini verticali per auto.

    Centraggio di elementi assolutamente posizionati

    Dal momento che sembra esserci un'eccezione per elementi posizionati in modo assoluto, noi”Io uso auto valore per centrare uno verticalmente e orizzontalmente. Ma prima, dobbiamo scoprire quando lo faranno margin: auto funziona davvero come lo vogliamo in un elemento assolutamente posizionato.

    Qui è dove arriva un'altra specifica W3C:

    "Se tutti e tre di “sinistra”, “larghezza”, e “destra” siamo “auto”: Prima di tutto “auto” valori per “margin-left” e “margin-right” a 0 ... "

    "Se nessuno dei tre è “auto”: Se entrambi “margin-left” e “margin-right” siamo “auto”, risolvere l'equazione sotto il vincolo extra che i due margini ottengono valori uguali "

    Questo praticamente lo dice per orizzontale auto margini per prendere gli spazi uguali, il valori per sinistra, larghezza e destra non dovrebbe essere auto , il loro valore predefinito. Quindi tutto ciò che dobbiamo fare è dare loro un valore in un elemento assolutamente posizionato. sinistra e destra avrebbe dovuto valori uguali per un centraggio perfetto.

    La specifica menziona anche qualcosa di simile per i margini verticali.

    “Se tutti e tre di “superiore”, “altezza”, e “parte inferiore” sono auto, impostare “superiore” alla posizione statica ... ”

    “Se nessuno dei tre lo è “auto”: Se entrambi “margin-top” e “margin-bottom” siamo “auto”, risolve l'equazione sotto il vincolo extra che i due margini ottengono valori uguali ... ”

    Quindi, per essere un elemento assoluto centrato verticalmente, suo superiore, altezza, e parte inferiore i valori non dovrebbero essere auto.

    Ora combinando tutti questi, questo è ciò che noi”Otterremo:

    Conclusione

    Se vuoi scaricare un elemento della tua pagina a destra o a sinistra senza i seguenti elementi che lo avvolgono (come quello che succede con float), ricorda che c'è l'opzione da usare auto per i margini.

    Convertire un elemento in assoluto solo per poterlo centrare verticalmente potrebbe non essere una grande idea. Ci sono altre opzioni come flexbox e CSS transform che sono più adatte a quelle.