Wyśrodkować obraz za pomocą centrum wyrównywania tekstu?

510

Czy właściwość text-align: center;jest dobrym sposobem na wyśrodkowanie obrazu za pomocą CSS?

img {
    text-align: center;
}
Projektant stron internetowych
źródło
jsfiddle.net/j6q4d810/1 Działa to dobrze przy dowolnej szerokości i wysokości
gmarsi

Odpowiedzi:

1086

To nie zadziała, ponieważ text-alignwłaściwość dotyczy kontenerów blokowych, a nie elementów wbudowanych i imgjest elementem wbudowanym. Zobacz specyfikację W3C .

Zamiast tego użyj tego:

img.center {
    display: block;
    margin: 0 auto;
}
<div style="border: 1px solid black;">
<img class="center" src ="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a">

</div>

Mrchief
źródło
5
wypróbowałem tę metodę i działa! ale kiedy wypróbowałem 2 obrazy, to nie działało, po prostu układało się jeden na drugim jak totem, jakieś pomysły, jak wyrównać 2 obrazy w tej samej linii pośrodku?
PatrickGamboa
1
Jak to nie jest obsługiwane przez W3C? Czy możesz podać linki do poparcia tego roszczenia?
Duch Madary
1
@SecondRikudo: text-alignsłuży do wyśrodkowania tekstu, jak sama nazwa wskazuje. Dla elementów blokowych, margin: 0 auto;jest zalecana podejście.
Mrchief
4
@Mrchief Obrazy są elementami wbudowanymi, a nie blokami. text-aligndziała na nich równie dobrze.
Duch Madary
4
To wyjaśnienie jest trochę dziwne, prawda? Mówisz, że „wyrównanie tekstu” odnosi się do bloków, a nie do wstawek, co, jak sądzę, to dosłownie zmieniasz je na element blokowy, unikając przy tym wyrównania tekstu. Mam na myśli, że twój kod działa, ale ten akapit musi zostać całkowicie przeredagowany, imo.
Octopus,
117

To nie zawsze działa ... jeśli nie, spróbuj:

img {
    display: block;
    margin: 0 auto;
}
codecraftnap
źródło
87

Natrafiłem na ten post i zadziałało to dla mnie:

img {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
}
<div style="border: 1px solid black; position:relative; min-height: 200px">
  <img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a">

</div>

(Wyrównanie w pionie i poziomie)

Shai Reznik - HiRez.io
źródło
48

Innym sposobem zrobienia tego byłoby wyśrodkowanie akapitu:

<p style="text-align:center; border:1px solid black"><img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a"></p>

EssamSoft
źródło
19
Nie zgadzam się, myślę, że to odpowiada na pytanie. OP zapytał, czy właściwość text-align: centerjest dobrym sposobem na wyśrodkowanie obrazu, i nie określił, że właściwość musi być częścią znacznika img. Ta odpowiedź wykorzystuje tę właściwość w celu dostarczenia rozwiązania (które działa).
MandM
2
To działało dla mnie, gdy display: block itp. Nie działał.
matthewsheets
14

Możesz to zrobić:

<center><img src="..." /></center>

Dimitris Maniatis
źródło
9
niestety <center>nie jest obsługiwany w html5, ale cholera, działa.
Ayrat,
13

W rzeczywistości jedynym problemem związanym z kodem jest to, że text-alignatrybut dotyczy tekstu (tak, obrazy liczą się jako tekst) wewnątrz znacznika. Chcesz umieścić spanznacznik wokół obrazu i ustawić jego styl na text-align: center:

span.centerImage {
     text-align: center;
}
<span class="centerImage"><img src="http://placehold.it/60/60" /></span>

Obraz zostanie wyśrodkowany. W odpowiedzi na twoje pytanie jest to najłatwiejszy i najbardziej niezawodny sposób na wyśrodkowanie obrazów, o ile pamiętasz o zastosowaniu reguły do ​​obrazu zawierającego span(lub div).

Code Monkey
źródło
2
spanElementem jest display: inline;domyślnie, więc biegnie do samego problemu jak umieszczenie text-align: center;na imgsobie. Musisz ustawić spansię display: block;lub zastąpienie go divza to do pracy.
Web_Designer
10

Istnieją trzy metody wyśrodkowania elementu, które mogę zasugerować:

  1. Korzystanie z text-alignnieruchomości

        .parent {
        text-align: center;
    }
        <div class="parent">
        <img src="https://placehold.it/60/60" />
    </div>

  2. Korzystanie z marginnieruchomości

    img {
        display: block;
        margin: 0 auto;
    }
    <img src="https://placehold.it/60/60" />

  3. Korzystanie z positionnieruchomości

    img {
        display: block;
        position: relative;
        left: -50%;
    }
    .parent {
        position: absolute;
        left: 50%;
    }
    <div class="parent">
        <img src="https://placehold.it/60/60" />
    </div>


Pierwsza i druga metoda działają tylko wtedy, gdy element nadrzędny jest co najmniej tak szeroki jak obraz. Kiedy obraz jest szerszy niż jego rodzic, obraz nie pozostanie wyśrodkowany !!!

Ale: Trzecia metoda jest na to dobra!

Oto przykład:

img {
    display: block;
    position: relative;
    left: -50%;
}
.parent {
    position: absolute;
    left: 50%;
}
<div class="parent">
    <img src="http://imgsv.imaging.nikon.com/lineup/lens/zoom/normalzoom/af-s_dx_18-140mmf_35-56g_ed_vr/img/sample/img_01.jpg" />
</div>

Amin Fazlali
źródło
# 3 jest tak precyzyjny, że udało mi się wyśrodkować imgwnętrze w wyjustowanym divw WebViewiniekcji CSS. Dziękuję Ci!
JorgeAmVF
8

Tylko jeśli potrzebujesz obsługi starożytnych wersji Internet Explorera.

Nowoczesne podejście jest do zrobienia margin: 0 autow CSS.

Przykład tutaj: http://jsfiddle.net/bKRMY/

HTML:

<p>Hello the following image is centered</p>
<p class="pic"><img src="https://twimg0-a.akamaihd.net/profile_images/440228301/StackoverflowLogo_reasonably_small.png"/></p>
<p>Did it work?</p>

CSS:

p.pic {
    width: 48px;
    margin: 0 auto;
}

Jedynym problemem jest to, że szerokość akapitu musi być taka sama jak szerokość obrazu . Jeśli nie umieścisz szerokości akapitu, nie zadziała, ponieważ przyjmie on 100%, a obraz zostanie wyrównany do lewej, chyba że oczywiście użyjesztext-align:center .

Wypróbuj skrzypce i eksperymentuj z nią, jeśli chcesz.

Ray Toal
źródło
6
img{
    display: block;
    margin-right: auto;
    margin-left: auto;      
 }
Dream Hunter - hashADH
źródło
1
Dream Hunter, jeśli proponujesz alternatywny sposób wyśrodkowania obrazu za pomocą css, musisz nieco rozszerzyć swoje pytanie. Możesz wyjaśnić, w jaki sposób i dlaczego ta proponowana alternatywa byłaby lepszym sposobem na osiągnięcie celu pytającego, być może zawierając link do odpowiedniej dokumentacji. Dzięki temu byłby dla nich bardziej przydatny, a także bardziej przydatny dla innych czytelników witryn, którzy szukają rozwiązań podobnych problemów.
Vince Bowdren,
6

Jeśli używasz klasy z obrazem, zrobią to następujące rzeczy

class {
    display: block;
    margin: 0 auto;
}

Jeśli jest to tylko obraz w określonej klasie, który chcesz wyśrodkować, wykonaj następujące czynności:

class img {
    display: block;
    margin: 0 auto;
}
Baig
źródło
Zmienię dolną na img.classlub też dodam img.classwersję. Dzięki za to.
Chuck Savage,
6

Na obrazie przechowującym pojemnik można użyć Flexbox CSS 3, aby idealnie wyśrodkować obraz w środku, zarówno w pionie, jak iw poziomie.

Załóżmy, że masz <div class = "container"> jako uchwyt obrazu:

Następnie jako CSS musisz użyć:

.container {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
}

A to sprawi, że cała twoja zawartość wewnątrz div będzie idealnie wyśrodkowana.

Santoni
źródło
Whate w justify-content może użyć do ustawienia wyrównania w <p> ??
Manjitha teshara,
Tego właśnie chciałem. Dziękuję Ci.
Dionne Kim
5

Najprostszym rozwiązaniem, jakie znalazłem, było dodanie tego do mojego elementu img:

style="display:block;margin:auto;"

Wygląda na to, że nie muszę dodawać „0” przed „auto”, jak sugerują inni. Być może jest to właściwy sposób, ale działa wystarczająco dobrze dla moich celów bez „0”. Przynajmniej w najnowszych przeglądarkach Firefox, Chrome i Edge .

Panu Logic
źródło
tylko auto oznacza auto auto auto autoi 0 autooznacza 0 auto 0 auto... i domyślnie auto dla dolnego i górnego marginesu jest 0tak, że dodanie 0 lub nie jest dokładnie takie samo w tym przypadku, co powoduje, że odpowiadasz na n-ty duplikat już podanych
Temani Afif
Twój komentarz wyjaśnia, dlaczego to działa. Świetny. Ale która z poprzednich odpowiedzi mówi, że zwykłe „auto” bez „0” również działa? Czy nie warto o tym wspominać?
Panu Logic,
w tym przypadku powinien to być komentarz, ponieważ w tym konkretnym przypadku oba są takie same. Nie sądzę, że powinniśmy mieć odpowiedź na wszystkie równoważne wartości, w tym przypadku możemy napisać: auto, auto auto, auto auto auto, auto auto auto auto, 0 auto 0, 0 auto, 0 auto 0 auto, i tak dalej ... myślisz każdy zasługuje na inną odpowiedź? Nie wydaje mi się
Temani Afif,
Nie powiedziałbym, że jeśli dwa różne segmenty CSS dają ten sam efekt końcowy, te dwa segmenty CSS „są takie same”. Ich dane wyjściowe są takie same, ale kod źródłowy nie jest taki sam. Tak jak ogólnie, możesz napisać dowolną liczbę różnych programów, które wytwarzają to samo wyjście. Warto zatem wiedzieć (i informować osoby, które pytają), który z takich „równoważnych” programów wydaje się najprostszy i najkrótszy do napisania.
Panu Logic
a wszystko to powinno być zapisane w ramach jednej odpowiedzi. Dlatego ta odpowiedź jest bardziej odpowiednia jako komentarz niż zupełnie nowa odpowiedź. Powinniśmy przedstawić wszystkie równoważne rzeczy razem i nie robić z nich osobnej cechy, która może brzmieć, że są zupełnie inne, ponieważ tak nie jest [moja opinia przy okazji, nie trzeba się z tym zgadzać ani argumentować przeciwnie]. I nie mówię o różnych programach, które wytwarzają to samo wyjście, jest to zupełnie inna sprawa, ponieważ logika może nie być taka sama. Mówimy tutaj o tej samej nieruchomości i tej samej wartości (jak i++są takie same jak i+=1)
Temani Afif
4

Po prostu zmień wyrównanie rodzica :)

Wypróbuj ten dla właściwości nadrzędnych:

text-align:center
Mo.
źródło
3

Można używać text-align: centerna rodzica i zmienić imgsię display: inline-block→ zatem zachowuje się jak tekstowym elementu i będzie wyśrodkowany jeśli rodzic ma szerokość!

img {
    display: inline-block
}
Doml The-Bread
źródło
2

Chciałbym użyć div, aby wyśrodkować obraz w środku. Jak w:

<div align="center"><img src="your_image_source"/></div>
Rotimi
źródło
2

Jeśli chcesz ustawić obraz jako tło, mam rozwiązanie:

.image {
    background-image: url(yourimage.jpg);
    background-position: center;
}
Wojciechu
źródło
2

Aby wyśrodkować non tło obrazu zależy od tego, czy chcesz, aby wyświetlić obraz jako inline (zachowanie domyślne) lub element bloku.

Przypadek inline

Jeśli chcesz zachować domyślne zachowanie właściwości display CSS obrazu, musisz owinąć obraz wewnątrz innego elementu bloku, do którego musisz ustawić text-align: center;

Przypadek bloku

Jeśli chcesz uznać obraz za własny element blokowy, text-alignwłaściwość nie ma sensu i powinieneś to zrobić:

IMG.display {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

Odpowiedź na twoje pytanie:

Czy właściwość text-align: center; dobry sposób na wyśrodkowanie obrazu za pomocą CSS?

Tak i nie.

  • Tak, jeśli obraz jest jedynym elementem wewnątrz opakowania.
  • Nie, w przypadku, gdy wewnątrz opakowania obrazu znajdują się inne elementy, ponieważ wszystkie elementy potomne, które są rodzeństwem obrazu, odziedziczą text-alignwłaściwość: być może nie spodobałby Ci się ten efekt uboczny.

Bibliografia

  1. Lista elementów wbudowanych
  2. Centrowanie rzeczy
Billal Begueradj
źródło
1

Jeszcze jeden sposób skalowania - wyświetl go:

img {
  width: 60%; /* Or required size of image. */
  margin-left: 20% /* Or scale it to move image. */
  margin-right: 20% /* It doesn't matters much if using left and width */
}
Kishore Banala
źródło
1

Użyj tego do swojego imgCSS:

img {
  margin-right: auto;
  margin-left: auto;
}
treb
źródło
0

display: blockz margin: 0nie działało dla mnie, ani owijanie za pomocątext-align: center elementem.

To jest moje rozwiązanie:

img.center {
    position: absolute;
    transform: translateX(-50%);
    left: 50%;
}

translateX jest obsługiwany przez większość przeglądarek

OverCoder
źródło
1
miałeś na myśli margin: 0 auto;? Ustawienie jest kluczem margin-lefti margin-rightdo auto. margin: 0 auto;jest po prostu skrótem do tego.
Web_Designer,
1
@Web_Designer Próbowałem margin: 0 auto, margin: 0i margin: autożaden pracował. Pamiętaj, że podczas korzystania z inspektora Chrome margin: 0 autouderza właściwość wykrzyknikiem invalid property value(lub cokolwiek to znaczy)
OverCoder 25.04.16
Myślę, że miałeś na myśli „pozycja: absolutna”; zamiast „display: bezwzględnie;”
WebDevDaniel,
Dzięki @WebDevDaniel za wskazanie literówki. A tak przy okazji, możesz relativeraczej użyć pozycjonowania , bo absoluteoba działają całkiem dobrze.
OverCoder
0

Odkryłem, że jeśli mam obraz i tekst w środku div, mogę użyć text-align:centerdo wyrównania tekstu i obrazu za jednym zamachem.

HTML:

    <div class="picture-group">
        <h2 class="picture-title">Picture #1</h2>
        <img src="http://lorempixel.com/99/100/" alt="" class="picture-img" />
        <p class="picture-caption">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Temporibus sapiente fuga, quia?</p>
    </div>

CSS:

.picture-group {
  border: 1px solid black;
  width: 25%;
  float: left;
  height: 300px;
  #overflow:scroll;
  padding: 5px;
  text-align:center;
}

CodePen: https://codepen.io/artforlife/pen/MoBzrL?editors=1100

MadPhysicist
źródło
0

Czasami bezpośrednio dodajemy zawartość i obrazy administratora WordPress na stronach. Kiedy wstawiamy obrazy do treści i chcemy wyrównać to centrum. Kod jest wyświetlany jako:

 **<p><img src="https://abcxyz.com/demo/wp-content/uploads/2018/04/1.jpg" alt=""></p>**

W takim przypadku możesz dodać treść CSS w następujący sposób:

article p img{
    margin: 0 auto;
    display: block;
    text-align: center;
    float: none;
}
Sangrai
źródło
0

Posługiwać się:

<dev class="col-sm-8" style="text-align: center;"><img src="{{URL('image/car-trouble-with-clipping-path.jpg')}}" ></dev>

Myślę, że jest to sposób na wyśrodkowanie obrazu w środowisku Laravela.

Manjitha teshara
źródło
0
.img-container {
  display: flex;
}

img {
  margin: auto;
}

sprawi to, że obraz będzie wyśrodkowany zarówno pionowo, jak i poziomo

Anupama
źródło