Menu

Jak wyśrodkować obrazek w HTML i CSS

<img> jest elementem liniowym, więc wyśrodkowuje się jak tekst: text-align: center na rodzicu. Możesz też zamienić go w blok z margin: 0 auto albo wyśrodkować flexboxem lub gridem, także w pionie. Każda metoda działa na żywo i mierzy wynik.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

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ć

SytuacjaUżyj
Obrazek w akapicie albo prostym blokutext-align: center na rodzicu
Możesz stylować tylko obrazekdisplay: block; margin: 0 auto;
Wyśrodkowanie w obu kierunkach w pudełkuGrid place-items: center (albo flexbox) na pudełku
Rząd obrazkówFlexbox 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: center na <img>. Ustaw to na rodzicu.
  • margin: 0 auto na obrazku liniowym. Dodaj display: 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 i height na wartości o innych proporcjach go zniekształca. Ustaw jedną z nich i użyj height: auto albo dodaj object-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.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ