Wiem więc, że możemy wyśrodkować element div w poziomie, jeśli użyjemy margin:0 auto;
. Powinien margin:auto auto;
działać tak, jak myślę, że powinien działać? Centrowanie również w pionie?
Dlaczego też nie vertical-align:middle;
działa?
.black {
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
background:rgba(0,0,0,.5);
}
.message {
background:yellow;
width:200px;
margin:auto auto;
padding:10px;
}
<div class="black">
<div class="message">
This is a popup message.
</div>
</div>
Odpowiedzi:
Zaktualizuj sierpień 2020 r
Chociaż poniżej warto przeczytać przydatne informacje, od jakiegoś czasu mamy Flexbox, więc po prostu użyj go, zgodnie z tą odpowiedzią .
Nie możesz użyć:
vertical-align:middle
ponieważ nie ma zastosowania do elementów blokowychmargin-top:auto
imargin-bottom:auto
ponieważ ich używane wartości byłyby obliczane jako zeromargin-top:-50%
ponieważ procentowe wartości marginesów są obliczane w odniesieniu do szerokości bloku zawierającegoW rzeczywistości charakter przepływu dokumentów i algorytmy obliczania wysokości elementu uniemożliwiają użycie marginesów do wyśrodkowania elementu w pionie wewnątrz jego elementu nadrzędnego. Za każdym razem, gdy wartość marginesu pionowego zostanie zmieniona, spowoduje to ponowne obliczenie wysokości elementu nadrzędnego (ponowne przepływ), co z kolei spowoduje ponowne wyśrodkowanie oryginalnego elementu ... czyniąc go nieskończoną pętlą.
Możesz użyć:
Kilka podobnych obejść, które działają w Twoim scenariuszu; trzy elementy muszą być zagnieżdżone w następujący sposób:
Według Browsershot JSFiddle działa dobrze.
źródło
#
to sztuczka polegająca na tym, że reguła poprzedzona jest prefiksem, interpretowana tylko przez IE7 i poniżej. Możesz zamiast tego zawrzeć te reguły w arkuszu stylów specyficznym dla IE, używając komentarzy warunkowych itp.position: absolute; top: 50%; transform: translateY(-50%);
jest również wykonalne i dość popularne ... (w przeciwieństwietop:50%;margin: - $halfHeight
do tego, że nie musisz znać wysokości z góry ...)Ponieważ to pytanie zostało zadane w 2012 roku i przeszliśmy długą drogę dzięki obsłudze flexboxów przez przeglądarki, czułem, że ta odpowiedź jest obowiązkowa.
Jeśli wyświetlanie kontenera nadrzędnego to
flex
, to tak ,margin: auto auto
(znanego również jakomargin: auto
) będzie działać, aby wyśrodkować go zarówno w poziomie, jak iw pionie, niezależnie od tego, czy jest to elementinline
czyblock
.Zauważ, że szerokość / wysokość nie muszą być określane absolutnie, jak w tym przykładzie jfiddle, który używa rozmiaru w stosunku do widocznego obszaru.
Chociaż wsparcie przeglądarek dla flexboxów jest na najwyższym poziomie w momencie publikowania, wiele przeglądarek nadal nie obsługuje tego lub wymaga prefiksów dostawców. Odwiedź http://caniuse.com/flexbox, aby uzyskać aktualne informacje o obsłudze przeglądarek.
Aktualizacja
Ponieważ ta odpowiedź zwróciła trochę uwagi, chciałbym również zwrócić uwagę, że nie musisz
margin
w ogóle określać, czy używaszdisplay: flex
i chcesz wyśrodkować wszystkie elementy w kontenerze:źródło
Oto najlepsze rozwiązanie, jakie znalazłem: http://jsfiddle.net/yWnZ2/446/ Działa w Chrome, Firefox, Safari, IE8-11 i Edge.
Jeśli zadeklarowana
height
(height: 1em
,height: 50%
, itd.), Albo jest to element, w którym przeglądarka zna wysokość (img
,svg
lubcanvas
na przykład), to wszystko, czego potrzebujesz do centrowania pionowego jest to:Zwykle będziesz chciał określić
width
lubmax-width
tak, aby zawartość nie rozciągała się na całej długości ekranu / kontenera.Jeśli używasz tego dla modalu, który ma być zawsze wyśrodkowany w widocznym obszarze, nakładając się na inną zawartość, użyj
position: fixed;
dla obu elementów zamiastposition: absolute
. http://jsfiddle.net/yWnZ2/445/Oto bardziej kompletny opis: http://codepen.io/shshaw/pen/gEiDt
źródło
position: relative
do rodzica, a element zostanie wyśrodkowany w rodzicu. Napisałem dużo więcej w Smashing Magazine na temat tej techniki, jeśli chcesz przeczytać więcej: coding.smashingmagazine.com/2013/08/09/…parent
- rozumiem . Dzięki wielkie!display: table
do treści o zmiennej wysokości. W przeciwnym razie ta metoda powinna działać zgodnie z oczekiwaniami. Przeczytaj opis, aby uzyskać więcej informacji. Powinieneś także móc przetestować pełny widok w IE8 / 9, aby sprawdzić, czy są jakieś problemy.Edycja: jest rok 2020, zamiast tego użyłbym flex box.
Oryginalna odpowiedź:
HTML
CSS
źródło
Wiem, że pytanie pochodzi z 2012 roku, ale znalazłem najłatwiejszą drogę i chciałem się nim podzielić.
HTML:
i CSS:
źródło
Jeśli znasz wysokość elementu div, który chcesz wyśrodkować , możesz ustawić go absolutnie wewnątrz jego elementu nadrzędnego, a następnie ustawić
top
wartość na50%
. Spowoduje to, że górna część elementu podrzędnego div będzie o 50% niższa od elementu nadrzędnego, czyli będzie za nisko. Pociągnij go z powrotem, ustawiając gomargin-top
na połowę jego wysokości. Więc teraz masz pionowy punkt środkowy elementu div dziecka znajdujący się w pionowym punkcie środkowym rodzica - wyśrodkowany w pionie!Przykład:
http://jsfiddle.net/yWnZ2/2/
źródło
margin-top
nie można ustawić w% w stosunku do wysokości elementu, więc otrzymasz poprawkę zależną od wymiarówmargin-top
.Te dwa rozwiązania wymagają tylko dwóch zagnieżdżonych elementów.
Po pierwsze - pozycjonowanie względne i bezwzględne, jeśli treść jest statyczna (wyśrodkowanie ręczne).
https://jsfiddle.net/GlupiJas/5mv3j171/
lub do projektowania płynnego - zamiast tego użyj poniższego przykładu dla dokładnego centrum treści:
https://jsfiddle.net/GlupiJas/w3jnjuv0/
Musisz ustawić minimalną wysokość na wypadek, gdyby zawartość przekroczyła 50% wysokości okna. Możesz również manipulować tą wysokością za pomocą zapytania o media dla urządzeń mobilnych i tabletów. Ale tylko jeśli bawisz się responsywnym designem.
Myślę, że możesz pójść dalej i użyć prostego skryptu JavaScript / JQuery do manipulowania minimalną lub stałą wysokością, jeśli z jakiegoś powodu jest taka potrzeba.
Po drugie - jeśli zawartość jest płynna, możesz również użyć właściwości CSS tabeli i komórki tabeli z wyrównaniem w pionie i wyśrodkowaniem tekstu:
i
Doskonale działa i skaluje się, często używane jako elastyczne rozwiązanie do projektowania witryn internetowych z układami siatki i zapytaniami o media, które manipulują szerokością obiektu.
https://jsfiddle.net/GlupiJas/4daf2v36/
Preferuję rozwiązanie tabelaryczne do dokładnego wyśrodkowania treści, ale w niektórych przypadkach względne pozycjonowanie bezwzględne będzie lepsze, zwłaszcza jeśli nie chcemy zachować dokładnej proporcji wyrównania treści.
źródło
źródło
Nie ma jednego prostego sposobu wyśrodkowania elementu div w pionie, który wystarczyłby w każdej sytuacji.
Jest jednak na to wiele sposobów w zależności od sytuacji.
Oto kilka z nich:
Możesz także wyszukać w Google hasło „wyśrodkowanie w pionie css”
źródło
zmienna wysokość, automatyczne górne i dolne marginesy
zmienna wysokość, automatyczne górne i dolne marginesy
źródło
Korzystanie z Flexbox:
HTML:
CSS:
Zobaczyć wynik
źródło
źródło