Jeśli jest to jeden wiersz tekstu i / lub obrazu, łatwo to zrobić. Po prostu użyj:
text-align: center;
vertical-align: middle;
line-height: 90px; /* The same as your div height */
Otóż to. Jeśli może to być wiele linii, jest to nieco bardziej skomplikowane. Ale są rozwiązania na http://pmob.co.uk/ . Poszukaj „wyrównania w pionie”.
Ponieważ są to zwykle hacki lub dodawanie skomplikowanych div ... Zwykle używam do tego tabeli z pojedynczą komórką ... aby uczynić to tak prostym, jak to możliwe.
Aktualizacja na 2020 r .:
Jeśli nie potrzebujesz, aby działał we wcześniejszych przeglądarkach, takich jak Internet Explorer 10, możesz używać Flexboksa. Jest szeroko obsługiwany przez wszystkie obecne główne przeglądarki . Zasadniczo kontener należy określić jako kontener elastyczny wraz z centrowaniem wzdłuż jego osi głównej i poprzecznej:
#container {
display: flex;
justify-content: center;
align-items: center;
}
Aby określić stałą szerokość dla dziecka, która nazywa się „elementem elastycznym”:
#content {
flex: 0 0 120px;
}
Przykład: http://jsfiddle.net/2woqsef1/1/
Aby zawinąć zawartość, jest to jeszcze prostsze: wystarczy usunąć flex: ...
linię z elementu elastycznego i zostanie ona automatycznie owinięta.
Przykład: http://jsfiddle.net/2woqsef1/2/
Powyższe przykłady zostały przetestowane w głównych przeglądarkach, w tym MS Edge i Internet Explorer 11.
Jedna uwaga techniczna, jeśli chcesz go dostosować: wewnątrz elementu elastycznego, ponieważ ten element elastyczny nie jest sam w sobie elastycznym kontenerem, stary sposób CSS inny niż Flexbox działa zgodnie z oczekiwaniami. Jeśli jednak dodasz dodatkowy element elastyczny do bieżącego kontenera elastycznego, dwa elementy elastyczne zostaną umieszczone poziomo. Aby ustawić je pionowo, dodaj flex-direction: column;
do elastycznego pojemnika. Tak to działa między kontenerem elastycznym a jego bezpośrednimi elementami potomnymi.
Istnieje alternatywna metoda centrowania: nie określając center
rozkładu na osi głównej i poprzecznej dla pojemnika elastycznego, ale zamiast tego określ margin: auto
na elemencie elastycznym, aby zajmował całą dodatkową przestrzeń we wszystkich czterech kierunkach i równomiernie rozmieszczone marginesy sprawi, że element flex zostanie wyśrodkowany we wszystkich kierunkach. Działa to z wyjątkiem sytuacji, gdy istnieje wiele elementów Flex. Ta technika działa również w MS Edge, ale nie w Internet Explorerze 11.
Aktualizacja na rok 2016/2017:
Można to zrobić częściej transform
i działa dobrze nawet w starszych przeglądarkach, takich jak Internet Explorer 10 i Internet Explorer 11. Może obsługiwać wiele wierszy tekstu:
position: relative;
top: 50%;
transform: translateY(-50%);
Przykład: https://jsfiddle.net/wb8u02kL/1/
Aby zawinąć szerokość:
W powyższym rozwiązaniu zastosowano stałą szerokość dla obszaru zawartości. Aby użyć szerokości owiniętej w folię termokurczliwą, użyj
position: relative;
float: left;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
Przykład: https://jsfiddle.net/wb8u02kL/2/
Jeśli potrzebna jest obsługa programu Internet Explorer 10, wówczas Flexbox nie będzie działać, a powyższa metoda i line-height
metoda będzie działać. W przeciwnym razie Flexbox wykonałby zadanie.
text-align:center
że nie robi „części pionowej”?