Automatyczne marginesy nie wyśrodkowują obrazu na stronie


97

W tym przykładzie obraz nie jest wyśrodkowany. Czemu? Moja przeglądarka to Google Chrome 10 w systemie Windows 7, a nie IE.

<img src="/img/logo.png" style="margin:0px auto;"/>

Testując klasę stylu, stwierdziłem, że to nie działa margin: 0 auto; po kilku testach okazało się, że jeśli nazwa klasy, którą dodajesz do elementu, ma taką samą nazwę jak element, to nie zadziała.
LostLight

Odpowiedzi:


218

dodaj display:block;i zadziała. Obrazy są domyślnie wbudowane

Aby wyjaśnić, domyślna szerokość blockelementu to auto, co oczywiście wypełnia całą dostępną szerokość elementu zawierającego.

Ustawiając margines na auto, przeglądarka przypisuje połowę pozostałej przestrzeni do, margin-lefta drugą połowę do margin-right.


12
+1 za rację. Byłoby świetną odpowiedzią, gdybyś wyjaśnił, co jest potrzebne, margin:autoaby wyśrodkować element w przepływie. ( display:blocklub display:table, position:staticlub position:relative, itp.)
Phrogz

1
@Phrogz zgodził się; dodał jakieś wyjaśnienie.
Ross

15
Ci, którzy to czytają, mogą również uznać za przydatne dodanie „float” none, ponieważ posiadanie innego rodzaju float obniży wartość auto margin.
Code Whisperer

Ale nadal nie jest wyśrodkowany. Jest wyśrodkowany tylko w poziomie. Chcę wyśrodkować go w pionie, ale nawet jeśli zmienię go 0px autona zwykły auto, nadal nie działa.
Aaron Franke,

14

W pewnych okolicznościach (jak we wcześniejszych wersjach IE, Gecko, Webkit) i dziedziczenia, elementy z position:relative;zapobiegnie margin:0 auto;z pracy, nawet jeśli top, right, bottom, i leftnie są ustawione.

Ustawienie elementu na position:static;(domyślne) może to naprawić w tych okolicznościach. Ogólnie rzecz biorąc, elementy blokowe o określonej szerokości będą respektowane margin:0 auto;przy użyciu pozycjonowania albo relativelub static.


1
margin: 0 autodziała dobrze na względnie pozycjonowanych elementach, o ile są to elementy blokowe bez pływaka i określonej szerokości ...
Ennui

Zakładam, że to sarkazm. Jeśli zmodyfikujesz swoją odpowiedź, aby nie była niedokładna, usunę głos przeciw. Piszę CSS od prawie 15 lat i nie mogę sobie przypomnieć, aby automatyczne marginesy nie działały w celu poziomego wyśrodkowania względnie ustawionych elementów o stałej szerokości - chociaż inne właściwości, takie jak floati displaymogą zmienić to zachowanie.
Ennui

14

Możesz wyśrodkować automatyczną szerokość div za pomocą display:table;

div{
margin: 0px auto;
float: none;
display: table;
}

1
To działa i nie wiem dlaczego. Czy możesz wytłumaczyć?
ThatsJustCheesy

1
Nigdy wcześniej tego nie używałem, ale teraz działa.
zkytony

10

W moim przypadku problem polegał na tym, że ustawiłem minimalną i maksymalną szerokość bez samej szerokości .


3
podsumowując: element musi być position:static, mieć ustalony width:zestaw i być display:blockelementem
Joey T

Było szerokość problem dla mnie też - bootstrap automatycznie ustawia moje div użycie 100% dostępnego
Edmund Sulzanok

6

Jeśli nie dodamy szerokości i nie dodamy margin:auto, myślę, że to nie zadziała. To z mojego doświadczenia. Szerokość daje wyobrażenie, gdzie dokładnie musi zapewnić równe marginesy.


2

istnieje alternatywa dla margin-left:auto; margin-right: auto;lub margin:0 auto;dla tych, które używają w position:absolute;ten sposób:
ustawiasz lewą pozycję elementu na 50% ( left:50%;), ale to nie wyśrodkuje go poprawnie, aby element był prawidłowo wyśrodkowany, musisz nadać mu margines minus połowa jego szerokości, który idealnie wyśrodkuje Twój element

oto przykład: http://jsfiddle.net/35ERq/3/


0

W przypadku przycisku bootstrap:

display: table; 
margin: 0 auto;

0

umieść to w css ciała: tło: # 3D668F; następnie dodaj: display: block; margines: auto; do pliku css img.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.