2011-12-23 9 views
12

Ho visto che durante lo sviluppo di siti Web, centrare verticalmente un container (di altezza fissa) all'interno di un contenitore di altezza casuale rappresenta sempre un incubo per lo sviluppatore web (almeno io) mentre quando si tratta di centrare orizzontalmente un container (di larghezza fissa) all'interno di un contenitore di larghezza casuale, il margin:0px auto; tende a servire una facile via d'uscita nel modello standard.

Quando le cose possono essere così semplici perché il CSS non risolve il problema con lo margin:auto 0px; quando si tratta di centrare un contenitore di altezza fissa all'interno di un contenitore di altezza casuale? C'è qualche ragione specifica per farlo? Grazie per le tue informazioni in anticipo.Perché l'attributo automatico per margine non funziona in verticale mentre funziona in orizzontale?

+3

http://phrogz.net/css/vertical-align/index.html offre alcune informazioni: "Layout HTML tradizionalmente non era progettato per specificare il comportamento verticale. Per sua natura, scala in larghezza e il contenuto scorre all'altezza appropriata in base alla larghezza disponibile. Tradizionalmente, il dimensionamento orizzontale e il layout sono facili; il dimensionamento verticale e il layout sono stati ricavati da quello. " – justis

+0

true, ma comunque, ho l'impressione che potrebbe essere molto migliorato, ma è semplicemente imbarazzante che non puoi usare vertical-align: middle, a meno che il container non venga visualizzato come table- cell – ptriek

+2

@jblasco: avevo già letto la pagina a cui mi riferivi, ma sembra che la risposta non sia stata soddisfacente Motivo: l'HTML era tradizionalmente inteso solo a mostrare/condividere semplici dati testuali quando è stato ideato al CERN, ma poi ci sono stati così tanti cambiamenti quando si confronta il tradizionale HTML in HTML5. Allora non è il momento di adattare ciò che promuove la facilità di accesso? – ikartik90

risposta

13

È davvero meno di un incubo di quanto si pensi, basta non usare i margini. vertical-align è davvero quello su cui devi fare affidamento per il centraggio verticale dell'altezza del fluido. Ho gettato insieme un demo veloce per dimostrare il mio punto:

HTML:

<span></span><div id="any-height"></div> 

CSS:

* { margin: 0; padding: 0; } 
html, body { 
    height: 100%; 
    text-align: center; } 
span { 
    height: 100%; 
    vertical-align: middle; 
    display: inline-block; } 
#any-height { 
    background: #000; 
    text-align: left; 
    width: 200px; 
    height: 200px; 
    vertical-align: middle; 
    display: inline-block; } 

Vedi: http://jsfiddle.net/Wexcode/jLXMS/

+1

ok, hai un punto. allineamento verticale non è necessariamente l'incubo, IE7 è, come era IE6. – ptriek

+0

Ho usato l'allineamento verticale, ma non serve una soluzione soddisfacente nella maggior parte dei posti. Motivo: il problema con 'vertical-align' è che non è ben compatibile con tutti i browser. Per riferimento [controllare questo collegamento] (http://reference.sitepoint.com/css/vertical-align#compatibilitysection). Quindi niente punti. :( – ikartik90

+1

[Ci sono strumenti là fuori che possono verificare se qualcosa funziona su altri browser] (https://browserlab.adobe.com/en-us/index.html), quindi non devi fare affidamento su grafici che etichettare arbitrariamente le cose come buggy ... Sono abbastanza sicuro che funzioni in tutti i principali browser e, se stai cercando compatibilità estesa, dovresti controllare [questo articolo] (http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block /). – Wex

6

La risposta giusta per la tua domanda è che margin: auto 0 doesn funziona allo stesso modo di margin: 0 auto perché width: auto non funziona nello stesso modo height: auto do es.

Il margine automatico verticale funziona per elementi posizionati in modo assoluto con un'altezza nota.

.parent { 
    position: relative; 
} 

.child { 
    position: absolute; 
    top: 0; right: 0; bottom: 0; left: 0; 
    width: 150px; 
    height: 150px; 
    margin: auto; 
} 
2

css ----------------

.aligncenter{ 
     display: -webkit-box; 
     display: -moz-box; 
     display: box; 
     -webkit-box-align: center; 
     -moz-box-align: center; 
     flex-align: center; 
     -webkit-box-pack: center; 
     -moz-box-pack: center; 
     flex-pack: center; 
} 

html ------------------ -------

<div class="aligncenter">

---your content appear at the middle of the parent div----

</div>

note ----------- questa classe CSS funziona con quasi tutti i browser

Problemi correlati