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?

Dro1n2
sumber
12
Duplikat bertanya 2 menit yang lalu: CSS: image middle
Pekka
1
Topik serupa di sini: stackoverflow.com/questions/18516317/…
Hashem Qolami
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

Gurpreet Singh
sumber
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>
John K.
sumber
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.

aerdman
sumber
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)

avrahamcool
sumber
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
62
img.centered {
   display: block;
   margin: auto auto;
}
Nitin
sumber
1
ini sangat mirip dengan jawaban ini
suhailvs
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;
}
tanveer ahmad dar
sumber
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;
}
dhir
sumber
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 .

pawel7318
sumber
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>
Garconis
sumber
8

Ini akan menjadi pendekatan yang lebih sederhana

#over > img{
    display: block;
    margin:0 auto; 
}
Sujay sreedhar
sumber
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>

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

sasha
sumber
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; 
}
Nadav
sumber
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/

Yogee
sumber
5

File CSS

.over {
    display : block;
    margin : 0px auto;
Sabarish R
sumber
3

Coba kode minimal ini:

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

Dan CSS:

.outer{
  text-align: center;
}
.outer img{
  display: inline-block;
}
luchopintado
sumber
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>

GabMic
sumber
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;"

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

HTML:

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

CSS:

#over {
  text-align: center;
}

#over img {
  vertical-align: middle;
}
Lahori
sumber
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;
        }
Sanjib Debnath
sumber
2

Ini bekerja untuk saya:

#image-id {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    width: auto;
    margin: 0 auto;
}
Sileria
sumber
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;
}
julian9876
sumber
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%);
}
Akshay Bande
sumber
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;
    }
ThomasAFink
sumber
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>
WDuffy
sumber
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>
fpauer
sumber
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>

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

Terry Lin
sumber
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>

Intacto
sumber