Görüntüyü div içinde yatay olarak ortala


387

Bu muhtemelen aptalca bir soru ama bir görüntüyü hizalamanın her zamanki yolları işe yaramadığından soracağımı düşündüm. Bir görüntüyü kapsayıcı div içinde nasıl hizalayabilir (yatay olarak)?

İşte HTML ve CSS. Küçük resmin diğer öğeleri için CSS'yi de ekledim. Azalan sırada çalışır, böylece en yüksek eleman her şeyin kabıdır ve en düşük eleman her şeyin içinde olur.

#thumbnailwrapper {
      color: #2A2A2A;
      margin-right: 5px;
      border-radius: 0.2em;
      margin-bottom: 5px;
      background-color: #E9F7FE;
      padding: 5px;
      border: thin solid #DADADA;
      font-size: 15px
}
    
#artiststhumbnail {
      width: 120px;
      height: 108px;
      overflow: hidden;
      border: thin solid #DADADA;
      background-color: white;
}
    
#artiststhumbnail:hover {
      left: 50px
}
<!--link here-->

<a href="NotByDesign">
  <div id="thumbnailwrapper">

    <a href="NotByDesign">

      <!--name here-->
      <b>Not By Design</b>
      <br>

      <div id="artiststhumbnail">

        <a href="NotByDesign">

          <!--image here-->
          <img src="../files/noprofile.jpg" height="100%" alt="Not By Design" border="1" />
        </a>
      </div>

      <div id="genre">Punk</div>

  </div>

Tamam, PHP olmadan biçimlendirme ekledim bu yüzden görmek daha kolay olmalı. Her iki çözüm de pratikte işe yaramıyor gibi görünüyor. Üst ve alt kısımdaki metin ortalanamaz ve görüntü, kapsayıcı div içinde ortalanmalıdır. Kap taşması gizlendi, bu yüzden görüntünün merkezini normalde odak noktası olduğu gibi görmek istiyorum.


1
Görüntünün ilk bağlantıyla (artisturl olanı) aynı satırda gösterilmesi amaçlanıyor mu?
Shoaib

5
img'leri değiştirilmedikçe tabi text-align: centerolurlar display.
Jared Farrish

4
jsfiddle.net/cEgRp - basittext-align: center
Zoltan Toth

3
Jacob, en azından tarayıcının gördüğü gerçek biçimlendirmeyi PHP-infüzyon şablonuna değil gönderebilir misin? Ayrıca, işleyen bir jsfiddle.net her zaman yardımcı olur.
Jared Farrish

2
Yorumumu Aldırma - Dikkat etmedim imgiçine edildia . Aptalım ben.
Shoaib

Yanıtlar:


834

CSS Guy şunları önerir:

Yani, çeviri, belki:

#artiststhumbnail a img {
    display:block;
    margin:auto;
}

İşte benim çözümüm: http://jsfiddle.net/marvo/3k3CC/2/


10
Bunun iyi bir fikir olduğunu düşünmüyorum ve aynı zamanda, margin: autobelirtilen genişlik değerine sahip içeren öğeye bağlı gibi bazı uyarılar olduğuna inanıyorum .
Jared Farrish

4
CSS becerilerimi hala geliştiriyorum, bu yüzden ilginç çalışma noktası için teşekkürler. Ancak bu durumda, konteyner üzerinde sabit bir genişlik kullanıyor.
Marvo

1
Belirlenen genişlik bu bağlamda tam olarak ne anlama geliyor? Kesinlikle sahip olmak yararlı bilgi gibi görünüyor.
Shoaib

1
Bak bu keman ; Ne düşüneceğimi bilmiyorum. Önerdiğiniz şey hiçbir şey yapmaz ve imgherhangi bir etki yaratmak için yine de tanımlanmış bir genişliğe ihtiyaç duyacağına inanıyorum auto.
Jared Farrish

2
Aslında sunduğum çözümü uygulamadınız. İkincisi, kapalı div 120px genişliğe sahiptir, bu da görüntünün genişliğiyle hemen hemen aynıdır ve görüntüyü gerçekten ortalayıp merkezlemediğini görmeyi zorlaştırır. İşte benim çözümüm: jsfiddle.net/marvo/3k3CC/2
Marvo

88

CSS flexbox bunu justify-content: centergörüntü üst öğesinde yapabilir. Görüntünün en boy oranını korumak için, görüntüye ekleyin align-self: flex-start;.

HTML

<div class="image-container">
  <img src="http://placehold.it/100x100" />
</div>

CSS

.image-container {
  display: flex;
  justify-content: center;
}

Çıktı:


4
Tarayıcı bunu desteklediğinde benim için mükemmel bir çözüm. align-itemsDikey olarak ortalamak için de kullanılabilir . Çeşitli kenar boşluğu çözümleri benim için çalışmıyor çünkü ortalanacak öğenin genişlik ve yükseklik özellikleri yok.
Marc Rochkind

1
Benim durumumda, div belirli bir boyuta (örn. 50 piksel) sahiptir ve bu, görüntüyü 50 piksel olacak şekilde uzatır.
Max

1
@Max Bu durumda, align-selfbu gibi görüntü öğesine başvurabilirsiniz jsfiddle.net/3fgvkurd
Manoj Kumar

69

Bu çözümü W3 CSS sayfasında aşağıda buldum ve sorunumu yanıtladı.

img {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

Kaynak: http://www.w3.org/Style/Examples/007/center.en.html


max-width: 100%; max-height: 100%;Ekran görüntüden daha küçükse görüntüyü yeniden boyutlandırmak için kullanıyorum , ancak bu durumda ortalanmadı. Uygulanan bu iki özniteliğin nasıl
ortalanacağı

18

Bu da yapardı

#imagewrapper {
    text-align:center
}

#imagewrapper img {
    display:inline-block;
    margin:0 5px
}

Şunu mu demek istediniz text-align:center;ve margin:0 5px;? A;
jagb

@jagb noktalı virgül, bir seçici bloktaki son özellik için gerekli değildir.
TylerH

4
@TylerH Bu doğru, noktalı virgül, bir seçici bloktaki son özellik için gerekli değildir, ancak noktalı virgül kullanmak her zaman koruyucudır .. Ya bir CSS dosyası yazarsam, başka bir geliştirici dosyamı daha sonra düzenler, bazı kodlar ekler (satırdan sonra noktalı virgülle, daha önce bu CSS dosyasına yazdığım satır) ve yükseklik, genişlik veya diğer bildirimleri çalışmıyor (veya daha da kötüsü, çalışmadığını fark etmiyorlar). Noktalı virgülleri içeri bırakmak daha güvenli diyebilirim. Bu yüzden noktalı virgülleri kullanıyorum ve noktalı virgülleri asla dışarıda bırakmam.
jagb

@jagb Başka bir geliştirici dosyanızı daha sonra düzenlerse, gerektiğinde noktalı virgül ekler veya hata içeren kod yazma sorunu olur. İlk yorumunuza verilen yanıt hala: "CSS'deki son satırdaki noktalı virgül bir stil seçimidir".
TylerH

Jagb ile aynı fikirdeyim. Bu site iyi stil seçimlerini teşvik etmelidir. İyi bir stil, kolayca kırılan kodu geride bırakmaz. Noktalı virgül her satırda bir saniyenin 1 / 10'una mal olur, tek bir eksik noktalı virgül bulmak için hata ayıklama saatlere mal olabilir. Bu yüzden büyük teknoloji şirketleri ısrar ediyor: Google HTML / CSS Stil Kılavuzu - Beyan Duruyor
Georg Patscheider

14

Bir görüntüyü veya herhangi bir öğeyi yatay olarak ortalamak için bulduğum en iyi şey (tüm tarayıcılarda çalışıyor gibi görünüyor) bir CSS sınıfı oluşturmak ve aşağıdaki parametreleri dahil etmektir:

CSS

.center {
    position: relative;          /* where the next element will be automatically positioned */
    display: inline-block;       /* causes element width to shrink to fit content */
    left: 50%;                   /* moves left side of image/element to center of parent element */
    transform: translate(-50%);  /* centers image/element on "left: 50%" position */
}

Ardından, oluşturduğunuz CSS sınıfını etiketinize aşağıdaki gibi uygulayabilirsiniz:

HTML

<img class="center" src="image.jpg" />

Aşağıdakileri yaparak öğelerinizdeki CSS'yi de satır içine alabilirsiniz:

<img style="position: relative; display: inline-block; left: 50%; transform: translate(-50%);" src ="image.jpg" />

... ancak CSS'yi satır içi yazmanızı önermem çünkü stili değiştirmek istediğinizde merkezleme CSS kodunuzu kullanarak tüm etiketlerinizde birden çok değişiklik yapmanız gerekir.


ancak tarayıcı uyumluluğu için diğer dönüşüm biçimlerini kullanmanız gerekir.
Jay Smoke

11

Sonunda bunu yaptım:

<div style="height: 600px">
   <img src="assets/zzzzz.png" alt="Error" style="max-width: 100%; 
        max-height: 100%; display:block; margin:auto;" />
</div>

Bu, görüntü yüksekliğini 600 piksel ile sınırlar ve orantıları koruyarak ana konteynere yatay olarak merkezlenir (veya ana genişlik daha küçükse yeniden boyutlandırılır).


8

Bir uzuv çıkacağım ve aşağıdaki şeylerin peşinde olduğunu söyleyeceğim.

Not, aşağıdaki soru yanlışlıkla yanlışlıkla atlandı inanıyorum (açıklamaya bakınız):

<div id="thumbnailwrapper"> <!-- <<< This opening element -->
    <div id="artiststhumbnail">
...

Yani ihtiyacınız olan şey:

#artiststhumbnail {
    width:120px;
    height:108px;
    margin: 0 auto; /* <<< This line here. */
    ...
}

http://jsfiddle.net/userdude/XStjX/3/


Hmm ... Bahse girerim işe yarıyor. IMAGE'yi çözümümde ortaladım, ancak sorunun div-çevreleyen-görüntüyü başka bir div içinde ortalamak olarak nasıl yorumlanabileceğini görebiliyorum. Her iki durumda da aynı çözüm.
Marvo

Her iki çözüm de pratikte çalışmıyor. Çalışmaya başlamadan önce her iki çözümü de denemiştim. Lütfen sorudaki düzenlemeye bakın
Jacob Windsor

3

Görüntüyü yatay olarak ortalamak için bu işe yarar:

<p style="text-align:center"><img src=""></p>

Evet, ancak altındaki sıkıcı beyaz alanı önlemek için görüntüyü blok olarak görüntülemeyi planlıyorsanız, bu artık çalışmaz ...
Dr Fred

3

Bunu CSS'nize ekleyin:

#artiststhumbnail a img {
   display: block;
   margin-left: auto;
   margin-right: auto;
}

Sadece bu durumda görüntü olan bir alt öğeye başvurmak.


2
bu hala üst kenar boşluğuna erişmek istediğinizde iyidir, .. marjdan daha iyi 0 auto
tallgirltaadaa

2

Sol ve sağ için eşit bir piksel dolgu koyun:

<div id="artiststhumbnail" style="padding-left:ypx;padding-right:ypx">

1

Resmi içine koyun newDiv. İçeriğin genişliğini divgörüntü ile aynı yapın. Uygula margin: 0 auto;için newDiv. Bu div, kabın içinde ortalanmalıdır .


1

Konumlandırmayı kullanın. Aşağıdakiler benim için çalıştı ... (Yatay ve Dikey Merkezli)

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

esnek kutuyu kullanarak içeriğinizi minimum kodla hizalayabilirsiniz

HTML

<div class="image-container">
<img src="https://image.freepik.com/free-vector/modern-abstract-background_1048-1003.jpg" width="100px"> 
</div>

CSS

.image-container{
  width:100%;
  background:green;
  display:flex;

.image-container{
  width:100%;
  background:green;
  display:flex;
  justify-content: center;
  align-items:center;
}
<div class="image-container">
<img src="https://image.freepik.com/free-vector/modern-abstract-background_1048-1003.jpg" width="100px"> 
</div>

js keman bağlantısı https://jsfiddle.net/7un6ku2m/


1

Görüntüyü div içinde ortala

/* standar */
div, .flexbox-div {
  position: relative;
  width: 100%;
  height: 100px;
  margin: 10px;
  background-color: grey;  
}

img {
  border: 3px solid red;
  width: 75px;
  height: 75px;
}
/* || standar */


/* transform */
.transform {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%); /* IE 9 */
  -webkit-transform: translate(-50%, -50%); /* Chrome, Safari, Opera */ 
}
/* || transform */


/* flexbox margin */
.flexbox-div {
  display: -webkit-flex;
  display: flex;
  background-color: lightgrey; 
}

.margin-img {
  margin: auto;
}
/* || flexbox margin */


/* flexbox justify align */
.flexbox-justify {
  justify-content: center;
}

.align-item {
  align-self: center;
}
/* || flexbox justify align */
<h4>Using transform </h4>  
<div>
  <img class="transform" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>

<h4>Using flexbox margin</h4>  
<div class="flexbox-div">
  <img class="margin-img" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>

<h4>Using flexbox justify align</h4>  
<div class="flexbox-div flexbox-justify">
  <img class="align-item" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>


1

Birkaç yol denedim. Ama bu şekilde benim için mükemmel çalışıyor

<img src="~/images/btn.png" class="img-responsive" id="hide" style="display: block; margin-left: auto; margin-right: auto;" />

1

Görüntüyü ortalamanın duyarlı bir yolu şöyle olabilir:

.center {
    display: block;
    margin: auto;
    max-width: 100%;
    max-height: 100%;
}

0

Bu satır içi (bir giriş kutusu kullanırken olduğu gibi) yapmak zorunda kalırsanız,
işte benim için çalışan hızlı bir kesmek:
bir div(style="text-align:center"

<div style="text-align:center">

<a title="Example Image: Google Logo" href="https://www.google.com/" 
target="_blank" rel="noopener"><img src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png" alt="Google Logo. Click to visit Google.com" border="0" data-recalc-dims="1" /></a>

<h6><strong>This text will also be centered </strong></h6>

</div> /* ends centering style */

0
##Both Vertically and Horizontally center of the Page
.box{
    width: 300px;
    height: 300px;
    background-color: #232532;
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
}

5
Stackoverflow'a hoş geldiniz! Lütfen cevabınıza biraz açıklama ekleyin.
Maximilian Peters

Tüm cihazlar için sayfanın belirli <div> veya <section>Hem Dikey hem de Yatay Olarak merkezini düzeltmek istiyorsak , sadece bu stil kodunu kullanabilirsiniz !!!!
Siva Kaliyamoorthy

Görünüşe göre bu cevap farklı bir soruya ait :)
Manoj Kumar

0

evet, bunun gibi kod iyi çalışıyor

<div>
 <img>
</div>

ama sadece hatırlatmak için, görüntü stili

object-fit : *depend on u*

bu yüzden son kod Örnek gibi

<div style="border: 1px solid red;">
    <img
      src="./assets/images/truck-toy.jpg"
      alt=""
      srcset=""
      style="
       border-radius: 50%;
       height: 7.5rem;
       width: 7.5rem;
       object-fit: contain;"
    />
</div>

Son sonuç


0

Flex özelliğini kap üzerinde kullanmak, hem dikey hem de yatay olarak ortalamak için doğru cevaptır.

Buradaki en önemli yanıt, bir öğeyi dikey olarak, yalnızca yatay olarak ortalamak için ÇALIŞMAZ.


OP açıkça Yatay hizalama istedi.
Alvin Moyo

-1
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">


      <style>
      body{
  /*-------------------important for fluid images---\/--*/
  overflow-x: hidden; /* some browsers shows it for mysterious reasons to me*/
  overflow-y: scroll;
  margin-left:0px;
  margin-top:0px;
  /*-------------------important for fluid images---/\--*/
      }
      .thirddiv{
      float:left;
      width:100vw;
      height:100vh;
      margin:0px;
      background:olive;
      }
      .thirdclassclassone{
      float:left;   /*important*/
      background:grey;
      width:80vw;
      height:80vh; /*match with img height bellow*/
      margin-left:10vw; /* 100vw minus "width"/2    */
      margin-right:10vw; /* 100vw minus "width"/2   */
      margin-top:10vh;
      }
      .thirdclassclassone img{
      position:relative; /*important*/
     display: block;  /*important*/
    margin-left: auto;  /*very important*/
    margin-right: auto;  /*very important*/
    height:80vh; /*match with parent div above*/

    /*--------------------------------
    margin-top:5vh;
    margin-bottom:5vh;
    ---------------------------------*/
    /*---------------------set margins to match total  height of parent di----------------------------------------*/
      }
    </style>           
</head>  
<body>
    <div class="thirddiv">
       <div class="thirdclassclassone">
       <img src="ireland.png">
    </div>      
</body>
</html>
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.