Szybka odpowiedź: text-align na rodzicu
<img> jest elementem liniowym: stoi w linii tekstu jak słowo. Wyśrodkowujesz go więc tak samo jak tekst, przez text-align: center na rodzicu:
Styl trafia na div, a nie na obrazek. text-align: center na samym <img> nic nie daje, bo obrazek nie ma w środku tekstu do wyrównania.
Metoda 2: display block i margin auto
Jeśli wolisz stylować sam obrazek, zamień go w blok i nadaj mu automatyczne marginesy boczne. Wolne miejsce po obu stronach dzieli się po równo:
Szary obrazek ma margin: 0 auto, ale zostaje na początku linii: automatyczne marginesy nic nie robią na elemencie liniowym. Brakującym elementem jest display: block. max-width: 100% razem z height: auto nie pozwala obrazkowi wyjść poza wąski ekran i zachowuje jego proporcje.
Metoda 3: flexbox albo grid, także w pionie
Żeby wyśrodkować obrazek w obu kierunkach w pudełku, nadaj pudełku wysokość i wyśrodkuj jego zawartość gridem albo flexboxem:
Odpowiednik we flexboxie to display: flex; justify-content: center; align-items: center;. W obu przypadkach pudełko musi być wyższe niż obrazek, bo inaczej nie ma miejsca do wyśrodkowania. Te same metody wyśrodkowują dowolny element; porównuje je wszystkie strona o wyśrodkowaniu diva.
Wyśrodkowanie obrazka z podpisem
Zdjęcie z podpisem powinno być w <figure>. Wyśrodkuj zawartość figury, a obrazek i podpis ustawią się razem:
Kilka obrazków w wyśrodkowanym rzędzie
Rząd logo albo miniatur to zadanie dla flexboxa. justify-content: center wyśrodkowuje grupę, gap rozsuwa elementy, a flex-wrap pozwala im zawijać się na małych ekranach i nadal pozostać na środku:
Której metody użyć
| Sytuacja | Użyj |
|---|---|
| Obrazek w akapicie albo prostym bloku | text-align: center na rodzicu |
| Możesz stylować tylko obrazek | display: block; margin: 0 auto; |
| Wyśrodkowanie w obu kierunkach w pudełku | Grid place-items: center (albo flexbox) na pudełku |
| Rząd obrazków | Flexbox z justify-content: center |
| Obrazek z podpisem | <figure> z text-align: center |
| Obraz w tle, a nie treść | background-position: center, zobacz background-image |
Stare sposoby i dlaczego nie
Wciąż znajdziesz je w starych poradnikach:
<!-- obsolete: do not use -->
<center><img src="logo.png" alt="Logo"></center>
<img src="logo.png" alt="Logo" align="center">
<center> i atrybut align zostały usunięte z HTML. Przeglądarki nadal renderują <center> ze względu na zgodność wsteczną, a align="center" na obrazku nawet nie wyśrodkowuje go w poziomie: przeglądarki traktują to jako wyrównanie w pionie w obrębie linii. Użyj jednej z metod CSS opisanych wyżej.
Częste błędy
text-align: centerna<img>. Ustaw to na rodzicu.margin: 0 autona obrazku liniowym. Dodajdisplay: block.- Wyśrodkowanie w pionie bez wysokości rodzica. Pudełko kurczy się do obrazka i nie zostaje miejsce do wyśrodkowania.
float: center. Nie ma takiej wartości. Float działa tylko w stronę boku.- Brak
alt. Wyśrodkowany obrazek nadal potrzebuje tekstu alternatywnego;alt=""stosuj tylko dla obrazków czysto dekoracyjnych. - Rozciągnięty obrazek. Ustawienie w CSS zarówno
width, jak iheightna wartości o innych proporcjach go zniekształca. Ustaw jedną z nich i użyjheight: autoalbo dodajobject-fit: cover.
Najczęściej zadawane pytania
Jak wyśrodkować obrazek w HTML?
Ustaw text-align: center na elemencie, który go zawiera, na przykład <p style="text-align: center;"><img src="logo.png" alt="Logo"></p>. Obrazek jest domyślnie elementem liniowym, więc wyśrodkowuje się jak słowo w tekście.
Jak wyśrodkować obrazek przez margin auto?
Najpierw zamień obrazek w blok: img { display: block; margin: 0 auto; }. Automatyczne marginesy nie wyśrodkowują elementów liniowych, a obrazek jest liniowy, dopóki tego nie zmienisz.
Jak wyśrodkować obrazek w pionie i w poziomie?
Zamień jego kontener w grid (albo flexbox) z wysokością: .box { display: grid; place-items: center; height: 300px; }. Obrazek znajdzie się wtedy na środku pudełka.
Czy mogę użyć znacznika <center> albo align="center" do wyśrodkowania obrazka?
Nie. <center> i atrybut align na <img> są w HTML5 przestarzałe. Przeglądarki nadal renderują <center> na starych stronach, ale align="center" na obrazku wyrównuje go w pionie w linii, a nie w poziomie. Użyj CSS.
Skąd mała szczelina pod wyśrodkowanym obrazkiem?
Obrazek liniowy stoi na linii bazowej tekstu i zostawia pod sobą miejsce na dolne wydłużenia liter. Ustaw na obrazku display: block albo vertical-align: middle, a szczelina zniknie.