Görüntüyü div içinde ortada ve ortada hizalama


302

Aşağıdaki div var

<div id="over" style="position:absolute; width:100%; height:100%>
 <img src="img.png">
</div>

Resmi div'ın ortasında ve ortasında olacak şekilde nasıl hizalayabilirim?


12
Yinelenen 2 dakika önce sordu: CSS: image middle
Pekka


Bir cevabı doğru seçmeyi düşünün.
McSonk

Yanıtlar:


406

body {
  margin: 0;
}

#over img {
  margin-left: auto;
  margin-right: auto;
  display: block;
}
<div id="over" style="position:absolute; width:100%; height:100%">
  <img src="http://www.garcard.com/images/garcard_symbol.png">
</div>

JSFiddle


4
display: block;benim tuzakımdı. TnX
Ujjwal Singh

2
Takip etmek işe yaramıyor. Yaptığım hata nedir. <html> <head> <style> #over img {display: block; sol kenar boşluğu: otomatik; sağ kenar boşluğu: otomatik; } </style> </head> <body> <div id = "over" style = "konum: mutlak; genişlik:% 100; yükseklik:% 100"> <img src = " img8a.flixcart.com/image/ tablet / f / k / t /… "> </div> </body> </html>
nizam.sp

1
display: blockVarsayılanı kullanmazsak , w3schools.com/cssref/pr_class_display.asp'yedisplay: inline göre yapılır . Neden blok kullanmamız gerekiyor? Benim için çalıştım, ama neden bloğun img'yi ortalayacağından ve satır içi olmayacağından emin değilim.
user3731622

çünkü satır içi satırda hareket etmiyor, aslında satırda. bu nedenle marj otomatik etkisizdir.
netalex

12
Bu dikey olarak hizalanmıyor
alpadev

170
<div style="display:table-cell; vertical-align:middle; text-align:center">
<img src="img.png">
</div>

6
üst cevap, çok yararlı!
Ilian Andreev

1
Çok kısa ve kolay bir çözüm, ancak yalnızca sabit, yüzde olmayan genişlik ve yükseklikle çalışıyor gibi görünüyor. Bunun için +1 ile olsa da yüzerlerle çalışır. - jsfiddle.net/2s2nY/2
magnetronnie

1
ama bu sadece dikey hizalama yapıyor, yatay değil mi?
V-SHY

1
Resmin genişliği div'ın genişliğinden büyükse çalışmaz.
Davuz

5
Görüntüyü kaldırırsak: table-cell; mükemmel çalışır.
Ahesanali Suthar

103

Bu, Flexbox düzeni kullanılarak da yapılabilir:

STATİK BOYUT

.parent {
    display: flex;
    height: 300px; /* Or whatever */
    background-color: #000;
}

.child {
    width: 100px;  /* Or whatever */
    height: 100px; /* Or whatever */
    margin: auto;  /* Magic! */
}
<div class="parent">
    <img class="child" src="https://i.vimeocdn.com/portrait/58832_300x300"/>
</div>

DİNAMİK BOYUT

html, body {
  width: 100%;
  height: 100%;
  display: flex;
  background-color: #999;
}

* {
  margin: 0;
  padding: 0;
}

.parent {
  margin: auto;
  background-color: #000;
  display: flex;
  height: 80%;
  width: 80%;
}

.child {
  margin: auto;  /* Magic! */
  max-width: 100%;
  max-height: 100%;
}
<div class="parent">
  <img class="child" src="https://i.vimeocdn.com/portrait/58832_300x300"/>
</div>

Düzenin nasıl kullanılacağını açıklayan harika bir iş çıkaran bu makalede örnek buldum .


Statik Boyutta, çocuk için genişliğe ve yüksekliğe gerek yoktur (en azından Firefox sürümümde).
Rodrigo

91

Bana bu görüntünün kap içinde dikey olarak ortalanmasını istediğinizi de gösteriyor. (Bunu sağlayan herhangi bir cevap görmedim)

Çalışma keman:

  1. Saf CSS çözümü
  2. Belge akışını kırmamak (yüzdürme veya mutlak konumlandırma yok)
  3. Çapraz tarayıcı uyumluluğu (hatta IE6)
  4. Tamamen duyarlı.

HTML

<div id="over">
    <span class="Centerer"></span>
    <img class="Centered" src="http://th07.deviantart.net/fs71/200H/f/2013/236/d/b/bw_avlonas_a5_beach_isles_wallpaper_image_by_lemnosexplorer-d6jh3i7.jpg" />
</div>

CSS

*
{
    padding: 0;
    margin: 0;
}
#over
{
    position:absolute;
    width:100%;
    height:100%;
    text-align: center; /*handles the horizontal centering*/
}
/*handles the vertical centering*/
.Centerer
{
    display: inline-block;
    height: 100%;
    vertical-align: middle;
}
.Centered
{
    display: inline-block;
    vertical-align: middle;
}

Not: Bu çözüm, herhangi bir öğenin içindeki herhangi bir öğeyi hizalamak için iyidir. IE7 için, .Centeredsınıfı blok elemanlarına uygularken , inline-blockçalışmayı elde etmek için başka bir numara kullanmanız gerekecektir . (IE6 / IE7'nin blok öğelerinde satır içi blokla iyi oynamaması)


Ek olmak yerine span, sözde elemanı kullanabilirsiniz :before: jsfiddle.net/xaliber/cj6zhtp0
deathlock

@deathlock iyi biliniyor. ama eski IE tarayıcıları (sahte öğeleri desteklemeyen) hedefliyordum.
avrahamcool

1
Değil, ancak HTML yalnızca yapı için kullanılmalıdır, sunum için kullanılmamalıdır. Bu iş CSS için bırakılır, dolayısıyla sözde öğe.
deathlock

1
Ne demek "Belge akışını kırmamak (yüzer veya mutlak konumlandırma yok)" ?? Nedir #over { position:absolute; width:100%; height:100%;?
Rodrigo

1
@Rodrigo, daha eski tarayıcıları hedeflemenize gerek yoksa, bu esnek kutu önerilen yaklaşımdır.
avrahamcool


32

Bunu display: flex css özelliğini kullanarak kolayca yapabilirsiniz

#over {
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

Benim için çalışan bu. Görüntü PUG / SCSS ile derinden iç içe. Teşekkürler.
Mogens TrasherDK

29
#over {position:relative; text-align:center; 
       width:100%; height:100%; background:#CCC;}

#over img{
    position: absolute;
    margin: auto;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}

Bu doğru cevap, aslında hem dikey hem de yatay olarak merkezleniyor.
Alexander Kim

Şimdiye kadarki en iyi cevap.
kiran puppala

13

Burada sunulan diğer çözümlerle ilgili hala bazı sorunlar yaşadım. Sonunda bu benim için en iyi şekilde çalıştı:

<div class="parent">
    <img class="child" src="image.png"/>
</div>

css3:

.child {
 display: block;
 position: absolute;
 top: 50%;
 left: 50%;
 transform: translate(-50%, -50%);
 -webkit-transform: translate(-50%, -50%); /* Safari and Chrome */
 -moz-transform: translate(-50%, -50%); /* Firefox */
 -ms-transform: translate(-50%, -50%); /* IE 9 */
 -o-transform: translate(-50%, -50%); /* Opera */
 // I suppose you may like those too:
 // max-width: 80%;
 // max-height: 80%;
}

Bu yaklaşım hakkında daha fazla bilgiyi bu sayfada bulabilirsiniz .


Ayrıca üst css eklemek zorunda kaldı ama kodunuzu mükemmel çalıştı! pozisyon: göreceli; genişlik:% 100; şamandıra: sol; taşma: gizli; min. yükseklik: 189 piksel;
user2593040

10

Temel olarak, sağ ve sol kenar boşluğunu otomatik olarak ayarlamak görüntünün merkeze hizalanmasına neden olur.

<div id="over" style="position:absolute; width:100%; height:100%>
<img src="img.png" style="display: block; margin: 0 auto;">
</div>

8

Bu daha basit bir yaklaşım olurdu

#over > img{
    display: block;
    margin:0 auto; 
}

7

Daaawx'in cevabı işe yarıyor, ama inline css'i ortadan kaldırırsak daha temiz olacağını düşünüyorum.

body {
	margin: 0;
}

#over img {
	margin-left: auto;
	margin-right: auto;
	display: block;
}
div.example {
  position: absolute;
  width: 100%;
  height: 100%;
}
<div class="example" id="over">
	<img src="http://www.garcard.com/images/garcard_symbol.png">
</div>


6

ayarını img için ekranın: inline-block üstün set ettikten ederken div için text-align: merkezini çok iş yapacak

EDIT: ekran ile oynayan bu millet : inline-blok >>> unutmayın, örneğin iki div gibi

<div>Div1 content</div>NOSPACEHERE<div>Div2 content</div>

gerçekten aralarında boşluk yok (burada görüldüğü gibi).

Aralarındaki bu (satır içi blok içsel) boşluklardan kaçınmak için sadece temel. Bu boşluklar şu anda yazdığım her iki kelime arasında görülebilir! :-) Yani .. umarım bu bazılarına yardımcı olur.


6

BASİT. 2018. FlexBox. Tarayıcı Desteğini Kontrol Etmek İçin - En

Az Çözüm Kullanabilir miyim :

div#over { 
   display: flex; 
   justify-content: center; 
   align-items: center; 
}


Mümkün olan en geniş tarayıcı desteğini almak için:

div#over { 
   display: -webkit-flex;
   display: -ms-flex; 
   display: flex; 
   justify-content: center; 
   -ms-align-items: center; 
   align-items: center; 
}

5

Birçok yaklaşım denedim ama sadece bu bir konteyner div içinde birden çok satır içi elemanları için çalışır. İşte div'de her şeyi ortada hizalamak için kod.

CSS

.divContainer
{
    vertical-align: middle;
    text-align: center; <!-- If you want horizontal center alignment -->
}
.divContainer > *
{
    vertical-align: middle;
}

HTML

<div class="divContainer">
    <span>Middle Text</span>
    <img src="test.png"/>
</div>

Örnek kod burada: https://jsfiddle.net/yogendrasinh/2vq0c68m/



3

Bu minimum kodu deneyin:

<div class="outer">
    <img src="image.png"/>
</div>

Ve CSS:

.outer{
  text-align: center;
}
.outer img{
  display: inline-block;
}

3

2016 yılındayız ... neden flexbox kullanmıyorsunuz? Aynı zamanda duyarlı. Zevk almak.

#over{
display:flex;
align-items:center;
justify-content:center;
}
<div id="over">
	<img src="http://www.garcard.com/images/garcard_symbol.png">
</div>


1
Aşk css3! Teşekkür ederim. Ancak, bunun sadece modern tarayıcılarda (IE hariç) çalışacağını not etmek iyi olur. Diğer tüm tarayıcıların hiçbir etkisi olmayacaktır.
Neel

2

birçok yanıtın kullanılması önerilir, margin:0 autoancak bu yalnızca ortalanmış yapmaya çalıştığınız öğe solda veya sağda floatyüzmediğinde , yani css özniteliği ayarlanmadığında çalışır. Bunu yapmak için displayözniteliği uygulayın table-cellve sonra otomatik olarak sola ve sağa kenar boşluğunu uygulayın, böylece stiliniz şöyle görünecektirstyle="display:table-cell;margin:0 auto;"


2
    <div>
    <p style="text-align:center; margin-top:0px; margin-bottom:0px; padding:0px;">
    <img src="image.jpg" alt="image"/>
    </p>    
    </div>

2

HTML:

<div id="over">
    <img src="img.png">
</div>

CSS:

#over {
  text-align: center;
}

#over img {
  vertical-align: middle;
}

Sadece yorum eklemek ve sadece kodu atmak en iyisidir.
Parkash Kumar

2

Yatay olarak merkez için

#over img {
    display: block;
    margin: 0 auto;
    clear:both;
}

Diğer yöntem:

#over img {
    display: inline-block;
    text-align: center;
}

Dikey olarak merkez için Sadece şunu koyun:

   #over img {

           vertical-align: middle;
        }

2

Bu benim için çalıştı:

#image-id {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    width: auto;
    margin: 0 auto;
}

2

bu benim için hile yaptı.

<div class="CenterImage">
         <asp:Image ID="BrandImage" runat="server" />
</div>

'Not: bu durumda' BrandImage 'ile ilişkilendirilmiş bir css sınıfınız yok

CSS:

.CenterImage {
    position:absolute; 
    width:100%; 
    height:100%
}

.CenterImage img {
    margin: 0 auto;
    display: block;
}

2

Görüntüyü ortalamak zorunda kaldığınızda ve ana div öğeniz görüntüye tüm ekranı kapladığında bu benim için çalıştı. yani yükseklik:% 100 ve genişlik:% 100

#img{
    position:absolute;
    top:50%;
    left:50%;
    transform:translate(-50%,-50%);
}

1

Konumlandırmayı kullanın. Aşağıdakiler benim için çalıştı ...

Görüntünün merkezine zum yaparak (görüntü bölmeyi doldurur):

div{
    display:block;
    overflow:hidden;
    width: 70px; 
    height: 70px;  
    position: relative;
}
div img{
    min-width: 70px; 
    min-height: 70px;
    max-width: 250%; 
    max-height: 250%;    
    top: -50%;
    left: -50%;
    bottom: -50%;
    right: -50%;
    position: absolute;
}

Görüntünün merkezi (görüntü yok etmek zoom olmadan değil div doldurun):

   div{
        display:block;
        overflow:hidden;
        width: 100px; 
        height: 100px;  
        position: relative;
    }
    div img{
        width: 70px; 
        height: 70px; 
        top: 50%;
        left: 50%;
        bottom: 50%;
        right: 50%;
        position: absolute;
    }

1

Bunun için işaretlenen cevap görüntüyü dikey olarak hizalamaz. Modern tarayıcılar için uygun bir çözüm flexbox'tur. Esnek bir kap, öğelerini hem yatay hem de dikey olarak hizalayacak şekilde yapılandırılabilir.

<div id="over" style="position:absolute; width:100%; height:100%; display: flex; align-items: center; justify-content: center;">
    <img src="img.png">
</div>

Bu çözüm, soruya cevap verir ve işaretli cevaptan farklı olarak çalışır. Belki de aşağı seçmen aşağı oy kullanma kararını ayrıntılandırabilir?
WDuffy

6
İnceleme kuyruğundan : Lütfen kaynak kodunuzun etrafına bir bağlam eklemenizi isteyebilir miyim? Yalnızca kod yanıtlarının anlaşılması zordur. Gönderinize daha fazla bilgi ekleyebilmeniz hem askerlere hem de gelecekteki okuyuculara yardımcı olacaktır.
RBT

1
Bu düşüşü haklı çıkarmaz. Cevap teknik olarak doğrudur ve gelecekteki okuyuculara yardımcı olacaktır. Ev kurallarına uymak için cevap gövdesini güncelledim, ancak belki de sadece doğrudan kodu tanımlamak, çünkü kodun sadece cevaplarını tanımlamak önemsiz bir görevdir.
WDuffy

0

Bu çözüme bir göz atabilirsiniz:

Görüntüyü bir kutuda yatay ve dikey olarak ortalama

<style type="text/css">
.wraptocenter {
    display: table-cell;
    text-align: center;
    vertical-align: middle;
    width: ...;
    height: ...;
}
.wraptocenter * {
    vertical-align: middle;
}
.wraptocenter {
    display: block;
}
.wraptocenter span {
    display: inline-block;
    height: 100%;
    width: 1px;
}
</style>
<!--[if lt IE 8]-->
<style>
.wraptocenter span {
    display: inline-block;
    height: 100%;
}
</style>
<!--[endif]-->

<div class="wraptocenter"><span></span><img src="..." alt="..."></div>

0

Basit bir yol, hem div hem de görüntü için ayrı stiller oluşturmak ve bunları bağımsız olarak konumlandırmak olabilir. Görüntü konumumu% 50 olarak ayarlamak istersem, o zaman aşağıdaki gibi bir kod olurdu ....

#over{
  position:absolute;
  width:100%;
  height:100%;
}
#img{
  position:absolute;
  left:50%;
  right:50%;
}
<div id="over">
 <img src="img.png" id="img">
</div>


Her tarayıcının desteklemesi gereken temel bir şey olsa da (aksi takdirde tarayıcı olarak adlandırmayın)
KSJ10

0
#over {
    display: table-cell; 
    vertical-align: middle; 
    text-align: center;
    height: 100px;
}

İhtiyacınıza göre yükseklik değerini değiştirin.


0

Bu çalışmalı.

TEST İÇİN ÖNEMLİ: Kod snippet'ini çalıştırmak için sol düğmeye RUN kod snippet'ini , ardından sağ bağlantıyı tıklayın Tam sayfa

#fader{
position:fixed;z-index: 10;
top:0;right:0;bottom:0;left:0;
opacity: 0.8;background: black;
width:100%;height:100%;
text-align: center;
}
.faders{display:inline-block;height:100%;vertical-align:middle;}
.faderi{display:inline-block;vertical-align:middle;}
<div id="fader">
<span class="faders"></span>
<img class="faderi" src="https://i.stack.imgur.com/qHF2K.png" />
</div>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.