2011-12-23 12 views
12

Widziałem, że podczas tworzenia stron internetowych, pionowe wycentrowanie kontenera (o ustalonej wysokości) wewnątrz kontenera o losowej wysokości zawsze jest koszmarem dla programisty stron internetowych (przynajmniej mnie), podczas gdy horyzontalne wyśrodkowanie kontenera (o stałej szerokości) w pojemniku o losowej szerokości, margin:0px auto; ma tendencję do łatwego wyjścia w standardowym modelu.
Kiedy wszystko może być tak proste, dlaczego CSS nie pracuje z margin:auto 0px;, jeśli chodzi o wyśrodkowanie kontenera o stałej wysokości wewnątrz pojemnika o losowej wysokości? Czy jest jakiś konkretny powód, aby to zrobić? Dzięki za twoje spostrzeżenia z góry.Dlaczego atrybut automatyczny dla marginesu nie działa pionowo, gdy działa on w poziomie?

+3

http://phrogz.net/css/vertical-align/index.html oferuje kilka wglądów: "Układ HTML tradycyjnie nie został zaprojektowany do określenia zachowania pionowego. Ze swej natury przeskalowuje on szerokość, a zawartość przepływa do odpowiedniej wysokości w oparciu o dostępną szerokość. Tradycyjnie, poziomy rozmiar i układ jest łatwy; pionowy rozmiar i układ wywodzi się z tego. " – justis

+0

prawda, ale nadal mam przeczucie, że można go znacznie poprawić, po prostu nie można użyć pionowego wyrównania: środkowego, chyba że pojemnik jest wyświetlany jako tabela komórka: – ptriek

+2

@jblasco: Przeczytałem już stronę, o której wspomniałeś, ale wydaje mi się, że odpowiedź nie była zadowalająca. Powód: HTML był tradycyjnie przeznaczony tylko do pokazywania/udostępniania prostych danych tekstowych, kiedy został opracowany w CERN, ale to było tak wiele zmian, gdy porównasz tradycyjny HTML z HTML5, czy to nie najwyższy czas, aby dostosować to, co promuje łatwość dostępu? – ikartik90

Odpowiedz

13

To naprawdę mniej koszmar niż myślisz, po prostu nie używaj marginesów. vertical-align jest naprawdę tym, na co powinieneś polegać w pionowym centrowaniu na wysokości cieczy. Rzuciłem razem szybki pokaz, aby zademonstrować swój punkt:

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; } 

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

+1

OK, masz punkt. wyrównanie w pionie niekoniecznie jest koszmarem, IE7 jest, podobnie jak IE6. – ptriek

+0

Użyłem funkcji wyrównania w pionie, ale w większości miejsc nie jest to satysfakcjonujące rozwiązanie. Powód: Problem z 'vertical-align' polega na tym, że nie jest on dobrze kompatybilny ze wszystkimi przeglądarkami. Dla odniesienia [sprawdź ten link] (http://reference.sitepoint.com/css/vertical-align#compatibilitysection). Brak punktów. :( – ikartik90

+1

[Istnieją narzędzia, które mogą sprawdzić, czy coś działa w innych przeglądarkach] (https://browserlab.adobe.com/en-us/index.html), więc nie musisz polegać na wykresach, które dowolnie oznaczaj rzeczy jako błędne ... Jestem prawie pewien, że działa to we wszystkich głównych przeglądarkach, a jeśli szukasz rozszerzonej kompatybilności, powinieneś sprawdzić [ten artykuł] (http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block /). – Wex

6

Prawidłowa odpowiedź na Twoje pytanie jest to, że margin: auto 0 robi działa tak samo, jak margin: 0 auto działa, ponieważ width: auto nie działa w ten sam sposób, co height: auto es.

Pionowy automatyczny margines działa dla elementów pozycjonowanych absolutnie o znanej wysokości.

.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>

uwaga ----------- ta klasa css działa z prawie wszystkimi przeglądarkami

Powiązane problemy