Tengahkan gambar secara horizontal dalam div

388

Ini mungkin pertanyaan bodoh tapi karena cara biasa menyelaraskan gambar tidak berfungsi, saya pikir saya akan bertanya. Bagaimana saya bisa memusatkan menyelaraskan (secara horizontal) gambar di dalam wadahnya?

Inilah HTML dan CSS. Saya juga menyertakan CSS untuk elemen thumbnail lainnya. Ini berjalan dalam urutan menurun sehingga elemen tertinggi adalah wadah segalanya dan yang terendah ada di dalam segalanya.

#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>

Oke, saya sudah menambahkan markup tanpa PHP jadi seharusnya lebih mudah dilihat. Tidak ada solusi yang tampaknya berhasil dalam praktik. Teks di atas dan bawah tidak bisa di tengah dan gambar harus di tengah di dalam wadah kontainernya. Wadah tersebut telah meluap tersembunyi sehingga saya ingin melihat bagian tengah gambar seperti biasanya di mana fokus berada.

Jacob Windsor
sumber
1
Apakah ini dimaksudkan agar gambar ditampilkan pada baris yang sama dengan tautan pertama (yang pertama)?
Shoaib
5
imgDapat dikenakan text-align: centerkecuali mereka displaytelah dimodifikasi.
Jared Farrish
5
jsfiddle.net/cEgRp - sederhanatext-align: center
Zoltan Toth
3
Yakub, bisakah Anda setidaknya memposting markup aktual yang dilihat oleh browser dan bukan template yang diresapi PHP? Juga, jsfiddle.net yang berfungsi selalu membantu.
Jared Farrish
2
Sudahlah komentar saya - saya tidak melihat imgitu terlampir di a. Saya bodoh
Shoaib

Jawaban:

838

CSS Guy menyarankan yang berikut:

Jadi, menerjemahkan, mungkin:

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

Inilah solusi saya di: http://jsfiddle.net/marvo/3k3CC/2/

Marvo
sumber
10
Saya tidak berpikir ini adalah ide yang bagus, dan juga saya percaya ada beberapa peringatan seperti margin: autotergantung pada elemen yang mengandung memiliki nilai lebar yang ditunjuk.
Jared Farrish
4
Saya masih meningkatkan keterampilan CSS saya, jadi terima kasih atas poin studi yang menarik. Tetapi dalam kasus ini, ia menggunakan lebar tetap pada wadah.
Marvo
1
Apa sebenarnya arti lebar yang ditunjuk dalam konteks ini? Sepertinya pengetahuan yang berguna untuk dimiliki.
Shoaib
1
Lihat biola yang kubuat ini ; Saya tidak yakin harus berpikir apa. Apa yang Anda sarankan tidak akan melakukan apa-apa, dan imgsaya percaya akan membutuhkan lebar yang ditentukan untuk memiliki efek apa pun auto.
Jared Farrish
2
Anda sebenarnya tidak mengimplementasikan solusi yang saya sajikan. Kedua, div penutup memiliki lebar 120px, yang hampir sama dengan lebar gambar, sehingga sulit untuk melihat apakah itu benar-benar memusatkan gambar. Inilah solusi saya: jsfiddle.net/marvo/3k3CC/2
Marvo
88

CSS flexbox dapat melakukannya dengan justify-content: centerelemen induk gambar. Untuk mempertahankan rasio aspek gambar, tambahkan align-self: flex-start;ke dalamnya.

HTML

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

CSS

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

Keluaran:

Manoj Kumar
sumber
4
Solusi luar biasa ketika browser mendukung ini, yang saya lakukan. Bisa juga digunakan align-itemsuntuk memusatkan secara vertikal. Berbagai solusi margin tidak berfungsi untuk saya karena elemen yang akan dipusatkan tidak memiliki atribut lebar dan tinggi.
Marc Rochkind
1
Dalam kasus saya, div memiliki ukuran tertentu (misalnya 50px) dan ini akan merentangkan gambar menjadi 50px.
Maks.
1
@ Max Dalam hal ini, Anda dapat menerapkan align-selfke elemen gambar seperti ini jsfiddle.net/3fgvkurd
Manoj Kumar
69

Saya baru saja menemukan solusi ini di bawah pada halaman W3 CSS dan itu menjawab masalah saya.

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

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

mk.hd
sumber
Saya menggunakan max-width: 100%; max-height: 100%;untuk mengubah ukuran gambar jika layar lebih kecil dari gambar, tetapi dalam hal ini tidak terpusat. Ada saran tentang cara memusatkan dengan dua atribut yang diterapkan
Alexey Strakh
18

Ini juga akan melakukannya

#imagewrapper {
    text-align:center
}

#imagewrapper img {
    display:inline-block;
    margin:0 5px
}
Mehmet Yaden
sumber
Apakah maksud Anda text-align:center;dan margin:0 5px;? Saya menambahkan;
jagb
@jagb titik koma tidak diperlukan untuk properti terakhir di blok pemilih.
TylerH
4
@ TylerH Benar, titik koma tidak diperlukan untuk properti terakhir di blok pemilih tetapi selalu lebih aman untuk menggunakan titik koma .. Bagaimana jika saya menulis file CSS, pengembang lain mengedit file saya nanti, mereka menambahkan beberapa kode (setelah baris) dengan titik koma yang hilang, baris yang saya tulis sebelumnya dalam file CSS) dan tinggi, lebar atau deklarasi lainnya tidak berfungsi (atau lebih buruk lagi, mereka tidak menyadari bahwa itu tidak berfungsi). Saya akan mengatakan bahwa lebih aman untuk meninggalkan titik koma. Inilah mengapa saya menggunakan titik koma dan tidak pernah meninggalkan titik koma.
jagb
@ jagb Jika pengembang lain mengedit file Anda nanti, mereka akan menambahkan titik koma jika diperlukan, atau itu akan menjadi masalah mereka untuk menulis kode yang memiliki kesalahan. Respons terhadap komentar awal Anda masih: "titik koma pada baris terakhir di CSS adalah pilihan gaya".
TylerH
Saya setuju dengan jagb. Situs ini harus mempromosikan pilihan gaya yang baik. Gaya yang baik tidak meninggalkan kode yang mudah rusak. Menempatkan tanda titik koma di setiap baris akan membuat Anda menghabiskan 1/10 detik, men-debug untuk menemukan satu titik koma yang hilang dapat menghabiskan waktu berjam-jam. Itulah mengapa perusahaan teknologi besar bersikeras: Google HTML / CSS Style Guide - Deklarasi Berhenti
Georg Patscheider
14

Hal terbaik yang saya temukan (yang tampaknya berfungsi di semua browser) untuk memusatkan gambar, atau elemen apa pun, secara horizontal adalah membuat kelas CSS dan menyertakan parameter berikut:

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 */
}

Anda kemudian dapat menerapkan kelas CSS yang Anda buat ke tag Anda sebagai berikut:

HTML

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

Anda juga dapat inline CSS di elemen Anda dengan melakukan hal berikut:

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

... tapi saya tidak akan merekomendasikan menulis CSS sebaris karena Anda harus membuat beberapa perubahan di semua tag Anda menggunakan kode CSS pemusatan jika Anda ingin mengubah gaya.

Kevin
sumber
melakukan pekerjaan itu, tetapi untuk kompatibilitas browser, Anda harus menggunakan bentuk transformasi lainnya.
Jay Smoke
11

Inilah yang akhirnya saya lakukan:

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

Yang akan membatasi ketinggian gambar hingga 600px dan akan memusat secara horizontal (atau mengubah ukuran ke bawah jika lebar induk lebih kecil) ke wadah induk, dengan mempertahankan proporsi.

Cherno
sumber
8

Saya akan pergi mengambil risiko dan mengatakan bahwa berikut ini adalah apa yang Anda cari.

Perhatikan, hal berikut yang saya yakini secara tidak sengaja dihilangkan dalam pertanyaan (lihat komentar):

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

Jadi yang Anda butuhkan adalah:

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

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

Jared Farrish
sumber
Hmm ... aku berani bertaruh itu akan berhasil. Saya memusatkan GAMBAR dalam solusi saya, tetapi saya bisa melihat bagaimana pertanyaan dapat ditafsirkan sebagai memusatkan div-melampirkan-gambar di dalam div lain. Either way, solusi yang sama.
Marvo
Tidak ada solusi yang berfungsi dalam praktik. Saya telah mencoba kedua solusi sebelum itu tidak akan berhasil. Silakan lihat hasil edit dalam pertanyaan
Jacob Windsor
3

Untuk memusatkan gambar secara horizontal, ini berfungsi:

<p style="text-align:center"><img src=""></p>
parikshith kalariya
sumber
Ya, tetapi jika Anda berencana untuk menampilkan gambar sebagai blok untuk mencegah ruang putih yang membosankan di bawahnya, ini tidak akan berfungsi lagi ...
Dr Fred
3

Tambahkan ini ke CSS Anda:

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

Hanya mereferensikan elemen anak yang dalam hal ini adalah gambar.

loxsat
sumber
2
ini bagus ketika Anda masih menginginkan akses ke margin atas, .. lebih baik daripada margin 0 otomatis
tallgirltaadaa
2

Letakkan padding piksel yang sama untuk kiri dan kanan:

<div id="artiststhumbnail" style="padding-left:ypx;padding-right:ypx">
V-SHY
sumber
1

Letakkan gambar di dalam a newDiv. Jadikan lebar yang mengandung divsama dengan gambar. Berlaku margin: 0 auto;untuk newDiv. Itu harus memusatkan divdalam wadah.

Setu
sumber
1

Gunakan penentuan posisi. Berikut ini berfungsi untuk saya ... (Horizontal dan Vertikal Berpusat)

Dengan zoom ke tengah gambar (gambar mengisi div):

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;
}

Tanpa memperbesar ke tengah gambar (gambar tidak mengisi div):

   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;
    }
ThomasAFink
sumber
1

Anda dapat menyelaraskan konten Anda menggunakan kotak fleksibel dengan kode minimum

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>

tautan js fiddle https://jsfiddle.net/7un6ku2m/

Santosh Khalse
sumber
1

Tengahkan gambar dalam div

/* 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>

antelove
sumber
1

Saya sudah mencoba beberapa cara. Tapi cara ini sangat cocok untukku

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

Cara responsif untuk memusatkan gambar bisa seperti ini:

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

Jika Anda harus melakukan inline ini (seperti ketika menggunakan kotak input),
berikut ini adalah peretasan cepat yang berfungsi untuk saya: kelilingi Anda (tautan gambar dalam kasus ini)
di divdenganstyle="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 */
SherylHohman
sumber
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;
}
Siva Kaliyamoorthy
sumber
5
Selamat datang di stackoverflow! Silakan tambahkan beberapa penjelasan untuk jawaban Anda.
Maximilian Peters
Jika kami ingin memperbaiki bagian tengah <div> atau halaman dari <section>Vertikal dan Horisontal tertentu untuk semua perangkat, cukup Anda dapat menggunakan kode gaya ini !!!!
Siva Kaliyamoorthy
Sepertinya jawaban ini milik pertanyaan yang berbeda :)
Manoj Kumar
0

ya, kode seperti ini berfungsi dengan baik

<div>
 <img>
</div>

tetapi hanya untuk mengingatkan Anda, gaya untuk gambar

object-fit : *depend on u*

jadi kode akhir seperti Contoh

<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>

Hasil akhir

Mark Sparrow
sumber
0

Menggunakan properti flex pada wadah adalah jawaban yang tepat untuk dapat memusatkan secara vertikal DAN horizontal.

Jawaban teratas di sini TIDAK berfungsi untuk memusatkan suatu item secara vertikal, hanya secara horizontal.

Synaikido
sumber
OP dengan jelas meminta perataan horizontal.
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>
KES NORKUS
sumber