Wiem, że ustawienie margin: 0 auto;
elementu służy do jego wyśrodkowania (lewy-prawy). Wiem jednak, że element i jego rodzic muszą spełniać określone kryteria, aby automatyczny margines działał, i nigdy nie wydaje mi się, aby magia była właściwa.
Moje pytanie jest więc proste: jakie właściwości CSS należy ustawić na elemencie i jego elemencie macierzystym, margin: 0 auto;
aby wyśrodkować dziecko w lewo-prawo?
margin: 0 auto;
poprawnie tylko w trybie standardów, więc potrzebujesz doctype (tak jakby nie był wcześniej potrzebny).Odpowiedzi:
Z czubka mojej głowy:
display: block
Lubdisplay: table
Z głów innych ludzi:
width
niżauto
2Zauważ, że wszystkie te warunki muszą być spełnione, aby element był wyśrodkowany, aby działał.
1 Jest jeden wyjątek: jeśli twój nieruchomy lub absolutnie pozycjonowany element ma
left: 0; right: 0
, to będzie centrum z marginesami samochodowych .2 Technicznie
margin: 0 auto
działa z automatyczną szerokością, ale automatyczna szerokość ma pierwszeństwo przed automatycznymi marginesami, w wyniku czego automatyczne marginesy są zerowane, co sprawia, że wydaje się, że „nie działa”.źródło
ol start
atrybutem (i nie da się tego zrobić w Markdown) :(Z czubka mojej głowy potrzebuje
width
. Musisz określić szerokość centrowanego kontenera (nie szerokość nadrzędną).źródło
Pełna reguła dla CSS:
display: block
Iwidth
nie auto) LUBdisplay: table
float: none
position: relative
źródło
Z czubka mojej głowy, jeśli element nie jest elementem blokowym - zrób to.
a następnie nadaj jej szerokość.
źródło
Będzie także działał z display: table - użyteczną właściwością display w tym przypadku, ponieważ nie wymaga ustawienia szerokości. (Wiem, że ten post ma 5 lat, ale nadal jest odpowiedni dla przechodniów;)
źródło
Z czubka głowy mojego kota upewnij się, że ustawienie
div
, którego próbujesz wyśrodkować, nie jest ustawionewidth: 100%
.Jeśli tak, to ważne będą reguły określone dla div div dziecka.
źródło
Przejdź do tego szybkiego przykładu, który stworzyłem jsFiddle . Hopefull jest łatwy do zrozumienia. Możesz użyć
wrapper
div z szerokością strony, aby wyśrodkować. Powodemwidth
jest to, że przeglądarka wie, że nie wybierasz płynnego układu.źródło
Oto moja sugestia:
źródło
Być może interesujące jest to, że nie trzeba określać szerokości
<button>
elementu, aby działał - po prostu upewnij się, że ma ondisplay:block
: http://jsfiddle.net/muhuyttr/źródło
Dla każdego, kto właśnie trafia w to pytanie i nie jest w stanie go naprawić
margin: 0 auto
, oto coś, co odkryłem, że może ci się przydać:table
element bez określonej szerokości musi mieć,display: table
a niedisplay: block
w celumargin: auto
wykonania pracy. Dla niektórych może to być oczywiste, ponieważ połączeniedisplay: block
iwidth
wartość domyślna da tabelę, która rozszerzy się, aby wypełnić swój pojemnik, ale jeśli chcesz, aby tabela miała „naturalną” szerokość i była wyśrodkowana, potrzebujeszdisplay: table
źródło
display: block
to nie spotka stan 4 zaakceptowanej odpowiedzi)margin: 0 auto
), a także nie mogłem określić szerokości stołu, ponieważ jego zawartość może mieć różne szerokości. W tym przypadku jedynym rozwiązaniem, które działa (tzn. Renderuje tabelę w normalny sposób, ale wyśrodkowuje ją), nie jest reguła szerokości,display: table
amargin: 0 auto