Chcę wyśrodkować w div
pionie za pomocą CSS. Nie chcę tabel ani JavaScript, ale tylko czysty CSS. Znalazłem kilka rozwiązań, ale we wszystkich brakuje obsługi Internet Explorera 6.
<body>
<div>Div to be aligned vertically</div>
</body>
Jak mogę wyśrodkować widok div
pionowy we wszystkich głównych przeglądarkach, w tym Internet Explorer 6?
css
cross-browser
alignment
vertical-alignment
centering
Burak Erdem
źródło
źródło
tables
na układy tutaj?Odpowiedzi:
Poniżej znajduje się najlepsze wszechstronne rozwiązanie, jakie udało mi się zbudować, aby wyśrodkować pionowe i poziome pole zawartości o elastycznej wysokości i stałej szerokości . Został przetestowany i działa dla najnowszych wersji Firefox, Opera, Chrome i Safari.
Zobacz przykład roboczy z zawartością dynamiczną
Wbudowałem trochę dynamicznych treści, aby przetestować elastyczność i chciałbym wiedzieć, czy ktoś widzi jakieś problemy. Powinien również dobrze działać dla wyśrodkowanych nakładek - lightbox, pop-up itp.
źródło
.outer {position:absolute;width:100%;height:100%}
nie jest konieczne, są tutaj po prostu do demonstracji. Potrzebujemy tylkodisplay:table
, jeśli ktoś jest zdezorientowany tak jak ja..outer
imiddle
po prostu zignoruj.inner
styl i jego. Nie wiem o co chodzimargin-left
,margin-right
ustaw na auto, ponieważ to nie wyśrodkuje elementu poziomo ?? !!!width: 100%;
i dodawaniemargin: 0 auto
do.outer
umożliwia zmienną szerokość, jak również.top: 0; left 0;
brakuje, przynajmniej w Chrome, który ustawia domyślnie na 1.Jeszcze jedna nie widzę na liście:
height
musi zostać zadeklarowany (patrz Zmienna wysokość )overflow: auto
aby zapobiec rozprzestrzenianiu się treści (patrz Przepełnienie)Źródło: Absolutne centrowanie poziome i pionowe w CSS
źródło
margin: auto;
Najprostszym sposobem byłyby następujące 3 linie CSS:
1) pozycja: względna;
2) góra: 50%;
3) przekształcenie: przetłumacz Y (-50%);
Oto PRZYKŁAD :
źródło
height
zewnętrzny . Wtedy działa tylko z .div
100%
position: absolute;
-webkit-transform
w szczególności o wariancie, który potrzebowałem, aby ta metoda działała w phantomjs ... skończyłem godziny zmagań, więc dziękuję!Właściwie potrzebujesz dwóch div do centrowania w pionie. Div zawierający treść musi mieć szerokość i wysokość.
Oto wynik
źródło
Teraz rozwiązanie Flexbox jest bardzo łatwym sposobem dla nowoczesnych przeglądarek, dlatego polecam to dla Ciebie:
źródło
navbar
, możesz dostosować wysokość, używającheight: calc(100% - 55px)
dowolnej wysokościnavbar
.float
. Dzięki.Edytuj 2020: używaj tego tylko, jeśli potrzebujesz obsługi starych przeglądarek, takich jak IE8 (czego nie powinieneś robić 😉). Jeśli nie, użyj Flexbox.
To najprostsza metoda, którą znalazłem i używam jej przez cały czas ( tutaj demonstracja jsFiddle )
Dziękujemy Chrisowi Coyierowi z CSS Tricks za ten artykuł .
Wsparcie zaczyna się od IE8.
źródło
Po wielu badaniach w końcu znalazłem najlepsze rozwiązanie. Działa nawet w przypadku elementów pływających. Pokaż źródło
źródło
50%
pracował dla mnie (nie-50%
)Rozwiązanie Flexbox
źródło
justify-content: center
wyśrodkuje również przedmioty w poziomieAby wyśrodkować div na stronie, sprawdź link do skrzypki .
Inną opcją jest użycie pola elastycznego, zaznacz link skrzypce .
Inną opcją jest użycie transformacji CSS 3:
źródło
%
,em
y irem
y. Wartości bezwzględne lub stałe to piksele lub punkty. Mówisz o „działa tylko z zadeklarowaną wysokością”. Jednak chociaż ta metoda opisana przez Moesa wymaga wysokości, kiedy deklarujesz ją w jednostkach względnych, procent jest najlepszy, bez względu na to, ile treści znajduje się w środku DIV, że DIV rozszerzy się pionowo, aby dopasować się do jego zawartości. To jest piękno tej metody. Inną dobrą rzeczą jest to, że ta metoda działa w IE8 / 9/10 na wypadek, gdyby ktoś nadal musiał obsługiwać te przeglądarki.transform: translate(-50%, -50%);
techniki. W przypadku IE8 zostawiłbym wyrównany góra / środek i ruszyłem dalej.Najłatwiejsze rozwiązanie znajduje się poniżej:
źródło
Niestety - ale nie jest to zaskakujące - rozwiązanie jest bardziej skomplikowane, niż by się tego spodziewało. Niestety, musisz użyć dodatkowych elementów div wokół elementu, który chcesz wyśrodkować w pionie.
W przeglądarkach zgodnych ze standardami, takich jak Mozilla, Opera, Safari itp., Musisz ustawić zewnętrzny div, aby był wyświetlany jako tabela, a wewnętrzny div, aby był wyświetlany jako komórka tabeli - który następnie można wyśrodkować w pionie. W przypadku przeglądarki Internet Explorer musisz ustawić absolutnie wewnętrzny div wewnątrz zewnętrznego div, a następnie określić górną wartość jako 50% . Następujące strony dobrze wyjaśniają tę technikę i dostarczają również kilka przykładów kodu:
Centrowanie w pionie w CSS o nieznanej wysokości (kompatybilny z Internet Explorer 7)(już nie aktywny)Istnieje również technika wykonywania centrowania pionowego za pomocą JavaScript. Dowodzi tego pionowe wyrównanie treści za pomocą JavaScript i CSS .
źródło
Jeśli komuś zależy tylko na przeglądarce Internet Explorer 10 (i nowszych), użyj
flexbox
:Obsługa Flexbox: http://caniuse.com/flexbox
źródło
align-items: center;
!Byłby to nowoczesny sposób na wyśrodkowanie elementu w pionie
flexbox
.Potrzebny jest rodzic, aby zdecydować o wysokości, a dziecko do wyśrodkowania.
Poniższy przykład wyśrodkuje div do centrum w przeglądarce. Co ważne (w moim przykładzie) jest ustawiony
height: 100%
nabody
ihtml
, a następniemin-height: 100%
do pojemnika.źródło
Centrowanie tylko pionowo
Jeśli nie obchodzi Cię Internet Explorer 6 i 7, możesz użyć techniki obejmującej dwa kontenery.
Zewnętrzny pojemnik:
display: table;
Wewnętrzny pojemnik:
display: table-cell;
vertical-align: middle;
Pole zawartości:
display: inline-block;
Możesz dodać dowolną treść do pola zawartości, nie dbając o jej szerokość lub wysokość!
Próbny:
Zobacz także to skrzypce !
Centrowanie w poziomie i w pionie
Jeśli chcesz wyśrodkować zarówno w poziomie, jak i w pionie, potrzebujesz również następujących elementów.
Wewnętrzny pojemnik:
text-align: center;
Pole zawartości:
text-align: left;
lubtext-align: right;
, chyba że chcesz, aby tekst był wyśrodkowanyPróbny:
Zobacz także to skrzypce !
źródło
Powiązane: Wyśrodkuj obraz
źródło
Zawsze tam, gdzie muszę, wracam do tego problemu .
Dla tych, którzy nie chcą skakać:
position:relative
lubposition:absolute
.position:absolute
itop:50%
na kontenerze potomnym, aby przesunąć górę w dół na środek rodzica.Przykład tego w kodzie:
źródło
Korzystanie z właściwości flex CSS.
lub za pomocą
display: flex;
imargin: auto;
Pokaż fragment kodu
pokaż centrum tekstowe
Pokaż fragment kodu
Używając procentowej (%) wysokości i szerokości.
Pokaż fragment kodu
źródło
Właśnie napisałem ten CSS i aby dowiedzieć się więcej, proszę przejść przez: Ten artykuł z pionowym wyrównaniem czegokolwiek z zaledwie 3 liniami CSS .
źródło
Siatka CSS
źródło
Dla nowych chętnych spróbuj
źródło
div
.<div style="display:flex"><div style="margin:auto">Inner</div></div>
Odpowiedź z Billbad działa tylko ze stałą szerokością
.inner
div. To rozwiązanie działa dla dynamicznej szerokości poprzez dodanie atrybututext-align: center
do.outer
div.źródło
Trzy wiersze kodu używającego
transform
działają praktycznie w nowoczesnych przeglądarkach i Internet Explorerze:Dodam tę odpowiedź, ponieważ w poprzedniej wersji tej odpowiedzi znalazłem trochę niekompletności (a Przepełnienie stosu nie pozwoli mi po prostu komentować).
Relacja „pozycja” zmienia styl, jeśli obecny div jest w ciele i nie ma div pojemnika. Wydaje się jednak, że „naprawiony” działa, ale w oczywisty sposób naprawia zawartość w środku okienka ekranu
Użyłem również tej stylizacji do wyśrodkowania niektórych div div nakładki i odkryłem, że w Mozilli wszystkie elementy w tej transformowanej div straciły swoje dolne granice. Prawdopodobnie problem z renderowaniem. Ale dodanie tylko minimalnego dopełnienia do niektórych z nich sprawiło, że poprawnie. Chrome i Internet Explorer (co zaskakujące) renderowały pudełka bez potrzeby wypełniania
źródło
Poniższy link przedstawia prosty sposób na zrobienie tego za pomocą zaledwie 3 linii w CSS:
Wyrównaj wszystko w pionie za pomocą zaledwie 3 linii CSS .
Wiem, że pytanie ma już odpowiedź, ale widziałem użyteczność w linku dla jego prostoty.
źródło
Nie odpowiada na kompatybilność przeglądarki, ale wspomina także o nowej Grid i niezbyt nowej funkcji Flexbox.
Krata
Od: Mozilla - Dokumentacja siatki - Align Div Vertical
Obsługa przeglądarki: Obsługa przeglądarki Grid
CSS:
HTML:
Flexbox
Obsługa przeglądarki: Obsługa przeglądarki Flexbox
CSS:
źródło
Myślę, że solidne rozwiązanie dla wszystkich przeglądarek bez korzystania z Flexbox - „align-items: center;” jest kombinacją wyświetlania: table i vertical-align: middle ;.
CSS
HTML
Emdemo: https://jsfiddle.net/6m640rpp/
źródło
Zrobiłem to z tym (odpowiednio zmień szerokość, wysokość, margines górny i margines lewy):
źródło
Zawartość można łatwo wyśrodkować za pomocą Flexbox. Poniższy kod pokazuje CSS kontenera, w którym zawartość musi być wyśrodkowana:
źródło
Zwłaszcza w przypadku div rodzica o względnej (nieznanej) wysokości centrowanie w nieznanym rozwiązaniu działa dla mnie świetnie. W artykule jest kilka naprawdę dobrych przykładów kodu.
Został przetestowany w Chrome, Firefox, Opera i Internet Explorer.
źródło
Po prostu zrób to: dodaj klasę do
div
:I przeczytaj ten artykuł, aby uzyskać wyjaśnienie. Uwaga:
Height
jest konieczne.źródło
Jest pewna sztuczka, którą ostatnio odkryłem: musisz użyć,
top 50%
a następnie zrobićtranslateY(-50%)
źródło