Sejajarkan gambar di tengah dan tengah dalam div


302

Saya telah mengikuti div

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

Bagaimana cara menyelaraskan gambar agar berada di tengah dan tengah div?


12
Duplikat bertanya 2 menit yang lalu: CSS: image middle
Pekka


Pertimbangkan untuk memilih satu jawaban sebagai yang benar.
McSonk

Jawaban:


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;adalah perangkap saya. TnX
Ujjwal Singh

2
Mengikuti tidak berhasil. Apa kesalahan yang saya lakukan. <html> <head> <style> #over img {display: block; margin-left: auto; margin-right: otomatis; } </style> </head> <body> <div id = "over" style = "posisi: absolut; lebar: 100%; tinggi: 100%"> <img src = " img8a.flixcart.com/image/ tablet / f / k / t / ... "> </div> </body> </html>
nizam.sp

1
Jika kita tidak menggunakan display: blockstandarnya adalah display: inlinesesuai dengan w3schools.com/cssref/pr_class_display.asp . Mengapa kita perlu menggunakan blok? Saya bekerja untuk saya, tetapi tidak yakin mengapa blok akan memusatkan img dan inline tidak.
user3731622

karena inline tidak bergerak dalam barisan, itu memang, sesuai. jadi margin otomatis tidak efektif.
netalex

12
Ini tidak selaras secara vertikal
alpadev

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

6
jawaban teratas, sangat membantu!
Ilian Andreev

1
Solusi yang sangat singkat dan mudah, tetapi tampaknya hanya berfungsi dengan lebar dan tinggi tidak-persentase yang tetap. Itu bekerja dengan mengapung jadi +1 untuk itu. - jsfiddle.net/2s2nY/2
magnetronnie

1
tapi ini hanya melakukan vertical-align tapi bukan horizontal kan?
V-SHY

1
Ini tidak akan berfungsi jika lebar gambar lebih besar dari lebar div.
Davuz

5
Jika kita menghapus display: table-cell; itu bekerja dengan sempurna.
Ahesanali Suthar

103

Ini juga dapat dilakukan menggunakan tata letak Flexbox:

UKURAN STATIS

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

UKURAN DINAMIS

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>

Saya menemukan contoh di artikel ini , yang sangat membantu menjelaskan cara menggunakan tata letak.


Dalam Ukuran Statis, tidak perlu lebar dan tinggi untuk anak (setidaknya di versi Firefox saya).
Rodrigo

91

Menurut saya, Anda juga ingin gambar itu diposisikan secara vertikal di dalam wadah. (Saya tidak melihat jawaban apa pun asalkan)

Biola bekerja:

  1. Solusi CSS murni
  2. Tidak merusak aliran dokumen (tidak ada pelampung atau penentuan posisi absolut)
  3. Kompatibilitas lintas browser (bahkan IE6)
  4. Benar-benar responsif.

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

Catatan: solusi ini baik untuk menyelaraskan elemen apa pun dalam elemen apa pun. untuk IE7, ketika menerapkan .Centeredkelas pada elemen blok, Anda harus menggunakan trik lain untuk membuatnya inline-blockbekerja. (itu karena IE6 / IE7 tidak bisa digunakan dengan inline-block pada elemen blok)


Alih-alih memiliki tambahan span, Anda bisa menggunakan pseudo-element :before: jsfiddle.net/xaliber/cj6zhtp0
deathlock

@deathlock sangat terkenal. tetapi saya menargetkan browser IE lama (yang tidak mendukung elemen pseudo).
avrahamcool

1
Bukan, tapi HTML seharusnya hanya digunakan untuk struktur, bukan presentasi. Pekerjaan itu dibiarkan untuk CSS, maka elemen pseudo.
deathlock

1
Apa maksud Anda "Tidak merusak aliran dokumen (tidak ada pelampung atau penentuan posisi absolut)" ?? Apa #over { position:absolute; width:100%; height:100%;?
Rodrigo

1
@Rodrigo memang, jika Anda tidak perlu menargetkan browser yang lebih lama, flexbox ini adalah pendekatan yang disarankan.
avrahamcool


32

Anda dapat melakukan ini dengan mudah dengan menggunakan properti display: flex css

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

Ini yang bekerja untuk saya. Gambar sangat bersarang di PUG / SCSS. Terima kasih.
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;
}

Ini adalah jawaban yang benar, yang sebenarnya berpusat baik secara vertikal maupun horizontal.
Alexander Kim

Jawaban terbaik sejauh ini.
kiran puppala

13

Saya masih memiliki beberapa masalah dengan solusi lain yang disajikan di sini. Akhirnya ini bekerja paling baik untuk saya:

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

Anda dapat membaca lebih lanjut tentang pendekatan itu di halaman ini .


Saya juga harus menambahkan css induk tetapi kode Anda berfungsi dengan baik! posisi: relatif; lebar: 100%; mengapung: kiri; overflow: disembunyikan; min-height: 189px;
user2593040

10

Pada dasarnya, mengatur margin kanan dan kiri ke otomatis akan menyebabkan gambar menjadi rata tengah.

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

8

Ini akan menjadi pendekatan yang lebih sederhana

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

7

Jawaban Daaawx bekerja, tapi saya pikir akan lebih bersih jika kita menghilangkan inline css.

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

mengatur img untuk ditampilkan: inline-block sambil mengatur div superior ke text-align: center akan melakukan pekerjaan juga

EDIT: untuk orang-orang yang bermain dengan tampilan: inline-block >>> jangan lupa bahwa misalnya dua divs suka

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

benar-benar tidak memiliki ruang di antara mereka (seperti yang terlihat di sini).

Hanya dasar untuk menghindari kesenjangan (inline block inherent) di antara mereka. Kesenjangan ini dapat dilihat antara setiap dua kata yang saya tulis sekarang! :-) Jadi .. semoga ini membantu beberapa dari Anda.


6

SEDERHANA. 2018. FlexBox. Untuk Memeriksa Dukungan Browser - Dapatkah Saya Menggunakan

Solusi Minimal:

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


Untuk mendapatkan dukungan browser seluas mungkin:

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

5

Saya sudah mencoba banyak pendekatan tetapi hanya yang ini bekerja untuk beberapa elemen inline di dalam wadah. Berikut adalah kode untuk menyelaraskan semua yang ada di div di tengah.

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>

Kode contoh ada di sini: https://jsfiddle.net/yogendrasinh/2vq0c68m/



3

Coba kode minimal ini:

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

Dan CSS:

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

3

Ya, kita di tahun 2016 ... mengapa tidak menggunakan flexbox? Ini juga responsif. Nikmati.

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


1
Css3 cinta! Terima kasih. Namun, perlu dicatat bahwa ini hanya akan berfungsi di browser modern (kecuali IE). Semua browser lain tidak akan berpengaruh.
Neel

2

banyak jawaban menyarankan untuk digunakan margin:0 autotetapi ini hanya berfungsi ketika elemen yang Anda coba buat terpusat tidak mengambang di kiri atau kanan, yaitu floatatribut css tidak disetel. Untuk melakukan ini, terapkan displayatribut ke table-celldan kemudian terapkan margin kiri dan kanan ke otomatis sehingga gaya Anda akan terlihat sepertistyle="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;
}

Lebih baik jika Anda menambahkan beberapa komentar dan tidak hanya melemparkan kode di luar sana.
Parkash Kumar

2

Untuk pusat secara horizontal

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

Metode lain:

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

Untuk pusat secara vertikal, cukup cantumkan:

   #over img {

           vertical-align: middle;
        }

2

Ini bekerja untuk saya:

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

2

ini berhasil bagi saya.

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

'Catatan: tidak memiliki kelas css yang dikaitkan dengan' BrandImage 'dalam kasus ini

CSS:

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

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

2

Ini bekerja untuk saya ketika Anda harus memusatkan gambar dan div orangtua Anda ke gambar memiliki seluruh layar. yaitu tinggi: 100% dan lebar: 100%

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

1

Gunakan penentuan posisi. Berikut ini bekerja untuk saya ...

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

1

Jawaban yang ditandai untuk ini tidak akan menyelaraskan gambar secara vertikal. Solusi yang cocok untuk browser modern adalah flexbox. Wadah fleksibel dapat dikonfigurasi untuk menyelaraskan item-itemnya baik secara horizontal maupun vertikal.

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

Solusi ini menjawab pertanyaan dan berhasil, tidak seperti jawaban yang ditandai. Mungkin pemilih yang turun bisa merinci keputusan mereka untuk menurunkan suara?
WDuffy

6
Dari antrian ulasan : Bolehkah saya meminta Anda untuk menambahkan beberapa konteks di sekitar kode sumber Anda. Jawaban khusus kode sulit dipahami. Ini akan membantu penanya dan pembaca di masa mendatang jika Anda dapat menambahkan lebih banyak informasi dalam posting Anda.
RBT

1
Itu tidak membenarkan downvote. Jawabannya secara teknis benar dan akan membantu pembaca di masa depan. Saya telah memperbarui badan jawaban untuk menghormati aturan rumah, tetapi mungkin solusi yang lebih langsung harus diterapkan oleh tim inti karena mengidentifikasi kode hanya jawaban adalah tugas yang sepele.
WDuffy

0

Anda dapat melihat pada solusi ini:

Menengahkan gambar secara horizontal dan vertikal dalam sebuah kotak

<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

Cara sederhana adalah membuat gaya terpisah untuk div dan gambar dan kemudian memposisikannya secara independen. Katakanlah jika saya ingin mengatur posisi gambar saya menjadi 50%, maka saya akan memiliki kode yang terlihat seperti berikut ini ....

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


Katakan saja jika itu bekerja dengan semua jenis browser, meskipun ini adalah hal dasar yang harus didukung oleh setiap browser (jika tidak jangan menyebutnya browser)
KSJ10

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

Ubah nilai ketinggian untuk kebutuhan Anda.


0

Ini seharusnya bekerja.

PENTING UNTUK UJI: Untuk Menjalankan cuplikan kode klik tombol kiri RUN cuplikan kode , lalu taut kanan halaman penuh

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.