Jaki jest najlepszy sposób na wyśrodkowanie zawartości elementu div w pionie, gdy wysokość zawartości jest zmienna. W moim przypadku wysokość elementu div kontenera jest stała, ale byłoby świetnie, gdyby istniało rozwiązanie, które sprawdzi się w przypadkach, gdy kontener ma również zmienną wysokość. Chciałbym również rozwiązania bez lub z niewielkim wykorzystaniem hacków CSS i / lub nieemantycznych znaczników.
css
vertical-alignment
jessegavin
źródło
źródło
Odpowiedzi:
Poprostu dodaj
do wewnętrznego div.
To, co robi, to przesunięcie górnej granicy wewnętrznego elementu div na połowę wysokości elementu div zewnętrznego (
top: 50%;
), a następnie elementu div w górę o połowę jego wysokości (transform: translateY(-50%)
). To zadziała zposition: absolute
lubrelative
.Należy o tym pamiętać
transform
itranslate
mieć przedrostki dostawców, które nie zostały uwzględnione dla uproszczenia.Codepen: http://codepen.io/anon/pen/ZYprdb
źródło
transform
powiązanych rzeczy ma-webkit-
prefiks i teraz działa. A więc dla przypomnienia: nie zapomnij dodać również-webkit-
przedrostka.position: absolute
, prawda?translate
wszystko będzie zamazane, gdy spróbuje obsłużyć wysokość .5px na wszystkim.Wydaje się, że jest to najlepsze rozwiązanie tego problemu, jakie znalazłem, o ile Twoja przeglądarka obsługuje
::before
pseudoelement: CSS-Tricks: Centering in the Unknown .Nie wymaga żadnych dodatkowych znaczników i wydaje się działać wyjątkowo dobrze. Nie mogłem użyć tej
display: table
metody, ponieważtable
elementy nie są zgodne zmax-height
właściwością.źródło
.block { white-space: nowrap; font-size: 0; line-height: 0; }
i pozostawić ujemny prawy margines na pseudoelemencie, po prostu musisz zresetować fs i lh on .centrered ... w ten sposób upewniasz się, że element zostanie poprawnie umieszczony, nawet jeśli jest szerszy niż widok (i nie nie muszę używać imo trochę niechlujnego ujemnego marginesu).To jest coś, co musiałem zrobić wiele razy, a spójne rozwiązanie nadal wymaga dodania niewielkiego niesemantycznego znacznika i kilku hacków specyficznych dla przeglądarki. Kiedy otrzymamy obsługę CSS 3 przez przeglądarkę, uzyskasz wyśrodkowanie w pionie bez grzechu.
Aby lepiej wyjaśnić tę technikę, możesz zajrzeć do artykułu, z którego ją zaadaptowałem , ale w zasadzie obejmuje to dodanie dodatkowego elementu i zastosowanie różnych stylów w IE i przeglądarkach, które obsługują
position:table\table-cell
elementy inne niż tabele.Istnieje wiele sposobów (hacków) stosowania stylów w określonych zestawach przeglądarek. Użyłem komentarzy warunkowych, ale spójrz na powyższy artykuł, aby zobaczyć dwie inne techniki.
Uwaga: wyśrodkowanie w pionie można uzyskać w prosty sposób, jeśli znasz jakieś wysokości z wyprzedzeniem, próbujesz wyśrodkować pojedynczy wiersz tekstu lub w kilku innych przypadkach. Jeśli masz więcej szczegółów, wrzuć je, ponieważ może istnieć metoda, która nie wymaga hacków przeglądarki ani nie-semantycznych znaczników.
Aktualizacja: Zaczynamy otrzymywać lepszą obsługę przeglądarki CSS3, wprowadzając zarówno flex-box, jak i transformacje jako alternatywne metody uzyskiwania wyśrodkowania w pionie (między innymi). Zobacz to drugie pytanie, aby uzyskać więcej informacji o nowoczesnych metodach, ale pamiętaj, że obsługa przeglądarek jest nadal szkicowa dla CSS3.
źródło
Korzystając z selektora dziecka, wziąłem powyżej niesamowitą odpowiedź Fadiego i sprowadziłem ją do jednej reguły CSS, którą mogę zastosować. Teraz wszystko, co muszę zrobić, to dodać
contentCentered
nazwę klasy do elementów, które chcę wyśrodkować:Forked CodePen: http://codepen.io/dougli/pen/Eeysg
źródło
*
selektor będzie działał gorzej niż zaakceptowana odpowiedź. To może nie być problem, ale warto zwrócić uwagę. stevesouders.com/blog/2009/06/18/simplifying-css-selectors> div
zamiast tego. calendar.perfplanet.com/2011/…Jak dotąd najlepszy wynik dla mnie:
div do wyśrodkowania:
źródło
Możesz użyć automatycznego marginesu. W przypadku flex, element div wydaje się być również wyśrodkowany w pionie.
źródło
Dla mnie najlepszym sposobem na to jest:
Zaletą jest brak konieczności wyraźnego określania wysokości
źródło
To jest moje niesamowite rozwiązanie dla
div
z dynamiczną (procentową) wysokością.CSS
HTML
Spróbuj sam.
źródło
możesz użyć wyświetlacza flex, takiego jak poniższy kod:
źródło