Mam div
ustawione na display:block
( 90px
height
i width
) i mam w środku trochę tekstu.
Potrzebuję wyrównania tekstu w środku, zarówno pionowo, jak i poziomo.
Próbowałem text-align:center
, ale nie robi części poziomej, więc próbowałem vertical-align:middle
, ale to nie zadziałało.
Jakieś pomysły?
text-align:center
że nie robi „części pionowej”?Odpowiedzi:
Jeśli jest to jeden wiersz tekstu i / lub obrazu, łatwo to zrobić. Po prostu użyj:
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:
Aby określić stałą szerokość dla dziecka, która nazywa się „elementem elastycznym”:
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ślmargin: 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: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
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.źródło
display: table-cell
do tego właściwość, FYI. Użycie tego powoduje, że element zachowuje się jak komórka stołowa i pozwalavertical-align: middle;
font:
z nich, upewnij się, że umieściłeś go powyżejline-
wysokości`.Typowe techniki od 2014 r .:
Podejście 1 -
transform
translateX
/translateY
:Przykład tutaj / przykład pełnego ekranu
W obsługiwanych przeglądarkach (większość z nich) możesz użyć
top: 50%
/left: 50%
w połączeniu z,translateX(-50%) translateY(-50%)
aby dynamicznie pionowo / poziomo wyśrodkować element.Podejście 2 - metoda Flexbox:
Przykład tutaj / przykład pełnego ekranu
W obsługiwanych przeglądarkach ustaw
display
element docelowy naflex
i użyj goalign-items: center
do centrowania w pionie ijustify-content: center
do centrowania w poziomie. Po prostu nie zapomnij dodać prefiksów dostawców w celu dodatkowego wsparcia przeglądarki ( patrz przykład ).Podejście 3 -
table-cell
/vertical-align: middle
:Przykład tutaj / przykład pełnego ekranu
W niektórych przypadkach należy upewnić się, że wysokość elementu
html
/body
jest ustawiona na100%
.Aby wyrównać w pionie, ustaw element nadrzędny
width
/height
do100%
i dodajdisplay: table
. Następnie do elementu podrzędnego, zmieńdisplay
siętable-cell
i dodaćvertical-align: middle
.Aby wyśrodkować w poziomie, możesz dodać,
text-align: center
aby wyśrodkować tekst i inneinline
elementy potomne. Alternatywnie możesz użyćmargin: 0 auto
założenia, że element jestblock
równy.Podejście 4 - absolutnie ustawione
50%
od góry z przesunięciem:Przykład tutaj / przykład pełnego ekranu
Takie podejście zakłada, że tekst ma znanej wysokości - w tym przypadku
18px
. Wystarczy bezwzględnie ustawić element50%
od góry względem elementu nadrzędnego. Użyjmargin-top
wartości ujemnej stanowiącej połowę znanej wysokości elementu, w tym przypadku --9px
.Podejście 5 -
line-height
metoda (najmniej elastyczna - nie sugerowana):Przykład tutaj
W niektórych przypadkach element nadrzędny będzie miał stałą wysokość. Aby wyśrodkować w pionie, wystarczy ustawić
line-height
wartość elementu podrzędnego równą stałej wysokości elementu nadrzędnego.Chociaż to rozwiązanie będzie działać w niektórych przypadkach, warto zauważyć, że nie będzie działać, gdy jest wiele wierszy tekstu - takich jak ten .
Metody 4 i 5 nie są najbardziej niezawodne. Idź z jednym z pierwszych 3.
źródło
table-cell
jak najwięcej.Za pomocą Flexbox / CSS:
CSS:
Zaczerpnięte z szybkiej porady: najprostszy sposób na wyśrodkowanie elementów w pionie i poziomie
źródło
display: -ms-flexbox; -ms-flex-align: center; -ms-flex-pack: center
.text-align:center
dlainline-
elementów .. takich jak tekst.Dodaj wiersz
display: table-cell;
do treści CSS dla tego div.Obsługują tylko komórki tabeli
vertical-align: middle;
, ale możesz nadać tej definicji [komórka tabeli] div ...Żywy przykład jest tutaj: http://jsfiddle.net/tH2cc/
źródło
position
jest absolutne lub naprawione. Zobacz: jsfiddle.net/tH2cc/1636Zawsze używam następującego CSS dla kontenera, aby wyśrodkować jego zawartość w poziomie i w pionie.
Zobacz to w akcji tutaj: https://jsfiddle.net/yp1gusn7/
źródło
Możesz wypróbować bardzo prosty kod:
Link do Codepen: http://codepen.io/santoshkhalse/pen/xRmZwr
źródło
Daj tę klasę CSS docelowemu <div>:
źródło
Możesz użyć
flex
właściwości u rodzicadiv
i dodaćmargin:auto
właściwość do elementów potomnych:Możesz zobaczyć więcej opcji
flex
tutaj: https://css-tricks.com/snippets/css/a-guide-to-flexbox/źródło
Podejście 1
Podejście 2
Podejście 3
źródło
źródło
źródło
źródło
źródło
To działa dla mnie (testowane OK!):
HTML:
CSS:
Możesz wybrać inne wartości niż 50%. Na przykład 25% do centrum na 25% rodzica.
źródło
źródło
Możesz wypróbować następujące metody:
Jeśli masz jedno słowo lub jedno zdanie liniowe, poniższy kod może załatwić sprawę.
Umieść tekst w znaczniku div i podaj mu identyfikator. Zdefiniuj następujące właściwości dla tego identyfikatora.
Uwaga: Upewnij się, że właściwość line-height jest taka sama jak wysokość podziału.
Wizerunek
Ale jeśli treść zawiera więcej niż jedno słowo lub wiersz, to nie działa. Będą też chwile, gdy nie będzie można określić rozmiaru podziału w pikselach lub% (gdy podział jest naprawdę mały i chcesz, aby zawartość była dokładnie pośrodku).
Aby rozwiązać ten problem, możemy wypróbować następującą kombinację właściwości.
Wizerunek
Te 3 wiersze kodu ustawiają zawartość dokładnie w środku podziału (niezależnie od wielkości wyświetlacza). „Align-pozycje: center” pomaga w pionie podczas centrowania „usprawiedliwić-content: center” pozwoli poziomo wycentrowany.
Uwaga: Flex nie działa we wszystkich przeglądarkach. Upewnij się, że dodałeś odpowiednie prefiksy dostawcy dla dodatkowej obsługi przeglądarki.
źródło
KRATA
Pokaż fragment kodu
źródło
Dostosowywanie wysokości linii w celu uzyskania wyrównania pionowego.
źródło
To powinna być właściwa odpowiedź. Najczystszy i najprostszy:
źródło
Zastosuj styl:
Twój tekst byłby wyśrodkowany niezależnie od jego długości.
źródło
To działało dla mnie:
źródło
Dla mnie było to najlepsze rozwiązanie:
HTML:
CSS:
źródło
źródło
Naprawdę prosty kod, który działa dla mnie! Tylko jedna linia, a tekst zostanie wyśrodkowany poziomo.
Dane wyjściowe wyglądają następująco:
Proszę głosować na tę odpowiedź, jeśli działa ona tylko po to, aby poświęcić trochę czasu deweloperom szukającym łatwych rozwiązań. Dzięki! :)
źródło
Wypróbuj następujący przykład. Dodałem przykłady dla każdej kategorii: poziomej i pionowej
źródło