จัดรูปภาพให้อยู่กึ่งกลางและกึ่งกลางภายใน div


302

ฉันมีกองกำลังติดตาม

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

จะจัดแนวภาพอย่างไรให้อยู่ตรงกลางและกึ่งกลางภาพ


12
ทำซ้ำถามเมื่อ 2 นาทีก่อน: CSS: ภาพกลาง
Pekka

1
หัวข้อที่คล้ายกันที่นี่: stackoverflow.com/questions/18516317/…
Hashem Qolami

พิจารณาเลือกคำตอบเดียวให้ถูกต้อง
McSonk

คำตอบ:


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;เป็นความผิดพลาดของฉัน TnX
Ujjwal Singh

2
การติดตามไม่ทำงาน ฉันกำลังทำอะไรผิด <html> <head> <style> #style img # display: block; ระยะขอบซ้าย: อัตโนมัติ ระยะขอบ - ขวา: อัตโนมัติ; } </style> </head> <body> <body> <div id = "over" style = "ตำแหน่ง: สัมบูรณ์; ความกว้าง: 100%; ความสูง: 100%"> <img src = " img8a.flixcart.com/image/ แท็บเล็ต / f / k / t / … "> </div> </body> </html>
nizam.sp

1
ถ้าเราไม่ได้ใช้display: blockเริ่มต้นเป็นdisplay: inlineไปตามw3schools.com/cssref/pr_class_display.asp ทำไมเราต้องใช้บล็อค? ฉันทำงานให้ฉัน แต่ไม่แน่ใจว่าทำไมบล็อกจะเน้นที่ img และอินไลน์จะไม่
3731622

เนื่องจากอินไลน์ไม่ย้ายในบรรทัดมันจึงอยู่ในแนวเดียวกัน ดังนั้นมาร์จิ้นอัตโนมัติจึงไม่มีประสิทธิภาพ
netalex

12
สิ่งนี้ไม่จัดแนวตั้ง
alpadev

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

6
คำตอบยอดนิยมมีประโยชน์มาก!
Ilian Andreev

1
วิธีแก้ปัญหาที่สั้นและง่ายมาก แต่ดูเหมือนจะใช้งานได้กับความกว้างและความสูงไม่คงที่เท่านั้น มันใช้งานได้กับการลอยตัวดังนั้น +1 สำหรับสิ่งนั้น - jsfiddle.net/2s2nY/2
magnetronnie

1
แต่นี่เป็นเพียงการจัดแนวตั้ง แต่ไม่ใช่แนวนอนใช่ไหม
V-SHY

1
มันจะไม่ทำงานถ้าความกว้างของภาพใหญ่กว่าความกว้างของ div
Davuz

5
หากเราลบการแสดงผล: ตารางเซลล์; มันทำงานได้อย่าง perfactly
Ahesanali Suthar

103

สิ่งนี้สามารถทำได้โดยใช้เค้าโครง Flexbox:

ขนาดคงที่

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

ขนาดแบบไดนามิก

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>

ฉันพบตัวอย่างในบทความนี้ซึ่งทำได้ดีมากในการอธิบายวิธีการใช้เค้าโครง


ในขนาดคงที่ไม่จำเป็นต้องมีความกว้างและความสูงสำหรับเด็ก (อย่างน้อยใน Firefox เวอร์ชันของฉัน)
Rodrigo

91

ดูเหมือนว่าคุณต้องการให้ภาพนั้นอยู่กึ่งกลางแนวตั้งภายในคอนเทนเนอร์ (ฉันไม่เห็นคำตอบที่ให้ไว้)

ซอทำงาน:

  1. โซลูชัน CSS เพียว
  2. ไม่ทำลายผังเอกสาร (ไม่มีการลอยหรือการจัดตำแหน่งที่แน่นอน)
  3. ความเข้ากันได้ของเบราว์เซอร์ข้าม (แม้แต่ IE6)
  4. ตอบสนองอย่างสมบูรณ์

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

หมายเหตุ:วิธีนี้เป็นสิ่งที่ดีในการจัดตำแหน่งองค์ประกอบใด ๆ ภายในองค์ประกอบใด ๆ สำหรับ IE7 เมื่อใช้.Centeredคลาสกับองค์ประกอบของบล็อกคุณจะต้องใช้เคล็ดลับอื่นเพื่อให้inline-blockทำงานได้ (นั่นเป็นเพราะ IE6 / IE7 ไม่เล่นได้ดีกับ inline-block ในองค์ประกอบของบล็อก)


แทนที่จะมีเพิ่มเติมspanคุณสามารถใช้องค์ประกอบหลอก:before: jsfiddle.net/xaliber/cj6zhtp0
ล็อค

@dlocklock เป็นที่รู้จักกันดี แต่ฉันกำหนดเป้าหมายเบราว์เซอร์ IE เก่า (ผู้ที่ไม่สนับสนุนองค์ประกอบหลอก)
avrahamcool

1
ไม่ใช่ แต่ควรใช้ HTML สำหรับโครงสร้างเท่านั้นไม่ใช่การนำเสนอ งานนั้นถูกทิ้งไว้สำหรับ CSS ดังนั้นองค์ประกอบหลอก
Deathlock

1
คุณหมายถึง "ไม่ทำลายโฟลว์เอกสาร (ไม่มีการลอยหรือการกำหนดตำแหน่งที่แน่นอน)" ?? อะไร#over { position:absolute; width:100%; height:100%;?
Rodrigo

1
@Rodrigo แน่นอนหากคุณไม่ต้องการกำหนดเป้าหมายเบราว์เซอร์รุ่นเก่า flexbox นี้เป็นวิธีที่แนะนำ
avrahamcool


32

คุณสามารถทำได้โดยใช้คุณสมบัติ display: flex css

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

นี่คือหนึ่งที่ทำงานสำหรับฉัน ภาพซ้อนใน PUG / SCSS ขอบคุณ
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;
}

นี่คือคำตอบที่ถูกต้องซึ่งมีทั้งแนวตั้งและแนวนอน
Alexander Kim

คำตอบที่ดีที่สุด
kiran puppala

13

ฉันยังคงมีปัญหากับวิธีแก้ไขปัญหาอื่น ๆ ที่นำเสนอที่นี่ ในที่สุดนี้ทำงานได้ดีที่สุดสำหรับฉัน:

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

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับวิธีการดังกล่าวได้ที่หน้านี้


ฉันต้องเพิ่ม css หลัก แต่รหัสของคุณทำงานได้อย่างสมบูรณ์! ตำแหน่ง: ญาติ; ความกว้าง: 100%; ลอย: ซ้าย; ล้น: ซ่อนอยู่; ความสูงขั้นต่ำ: 189px;
user2593040

10

โดยทั่วไปการตั้งค่าระยะขอบด้านซ้ายและขวาเป็นอัตโนมัติจะทำให้ภาพจัดกึ่งกลาง

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


7

คำตอบของ Daaawx ใช้ได้ แต่ฉันคิดว่ามันจะสะอาดกว่าถ้าเรากำจัด 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

การตั้งค่าimgให้แสดง: บล็อกแบบอินไลน์ในขณะที่ตั้งค่าdiv ที่เหนือกว่าเป็นจัดแนวข้อความ: ศูนย์กลางจะทำงานเช่นกัน

แก้ไข: สำหรับคนที่เล่นด้วยจอแสดงผล: อินไลน์บล็อค >>> อย่าลืมว่าเช่นสอง divs เช่น

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

ไม่มีช่องว่างระหว่างพวกเขา (เท่าที่เห็นที่นี่)

เพียงพื้นฐานเพื่อหลีกเลี่ยงช่องว่างเหล่านี้ (บล็อกอินไลน์โดยธรรมชาติ) ระหว่างพวกเขา ช่องว่างเหล่านี้สามารถมองเห็นได้ระหว่างคำสองคำที่ฉันกำลังเขียนอยู่ตอนนี้! :-) ดังนั้น .. หวังว่านี่จะช่วยให้คุณบางคน


6

SIMPLE 2018. FlexBox ในการตรวจสอบการสนับสนุนเบราว์เซอร์ - ฉันสามารถใช้

วิธีแก้ปัญหาน้อยที่สุดได้ไหม:

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


ในการรับการสนับสนุนเบราว์เซอร์ที่กว้างที่สุดให้ทำดังนี้

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

5

ฉันได้ลองหลายวิธีแล้ว แต่วิธีนี้ใช้ได้กับองค์ประกอบแบบอินไลน์หลายอย่างภายใน div container นี่คือรหัสเพื่อจัดเรียงทุกอย่างใน div ตรงกลาง

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>

โค้ดตัวอย่างอยู่ที่นี่: https://jsfiddle.net/yogendrasinh/2vq0c68m/



3

ลองโค้ดขั้นต่ำนี้:

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

และ CSS:

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

3

เราอยู่ในปี 2016 ... ทำไมไม่ใช้ flexbox นอกจากนี้ยังตอบสนอง สนุก.

#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! ขอบคุณ. อย่างไรก็ตามมันเป็นเรื่องที่ดีที่จะทราบว่ามันจะใช้ได้เฉพาะกับเบราว์เซอร์สมัยใหม่ (ยกเว้น IE) เบราว์เซอร์อื่น ๆ ทั้งหมดจะไม่มีผลใด ๆ
Neel

2

คำตอบมากมายแนะนำให้ใช้margin:0 autoแต่สิ่งนี้ใช้ได้เฉพาะเมื่อองค์ประกอบที่คุณพยายามทำให้อยู่กึ่งกลางไม่ลอยไปทางซ้ายหรือขวานั่นคือfloatคุณสมบัติ css ที่ไม่ได้ตั้งค่า เพื่อที่จะทำสิ่งนี้ให้ใช้displayคุณลักษณะกับtable-cellจากนั้นใช้ระยะขอบซ้ายและขวาเพื่ออัตโนมัติเพื่อให้สไตล์ของคุณดูเหมือนstyle="display:table-cell;margin:0 auto;"



2

HTML:

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

CSS:

#over {
  text-align: center;
}

#over img {
  vertical-align: middle;
}

เป็นการดีที่สุดถ้าคุณเพิ่มความเห็นและไม่เพียงแค่โยนรหัสออกไป
Parkash Kumar

2

สำหรับศูนย์แนวนอนเพียงแค่ใส่

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

วิธีอื่น:

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

สำหรับศูนย์กลางในแนวตั้งเพียงแค่ใส่:

   #over img {

           vertical-align: middle;
        }

2

สิ่งนี้ใช้ได้กับฉัน:

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

2

นี้ได้เคล็ดลับสำหรับฉัน.

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

'หมายเหตุ: ไม่มีคลาส css ที่อ้างถึง' BrandImage 'ในกรณีนี้

CSS:

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

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

2

สิ่งนี้ใช้ได้ผลกับฉันเมื่อคุณต้องจัดแนวภาพให้ตรงกลางและ div parent ของคุณกับภาพนั้นครอบคลุมทั้งหน้าจอ ie ความสูง: 100% และความกว้าง: 100%

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

1

ใช้การวางตำแหน่ง ต่อไปนี้ทำงานให้ฉัน ...

เมื่อซูมไปที่กึ่งกลางของภาพ (ภาพเติม 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;
}

หากไม่มีการซูมไปที่กึ่งกลางของภาพ (ภาพไม่ได้เติม 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

คำตอบที่ทำเครื่องหมายไว้สำหรับสิ่งนี้จะไม่จัดแนวภาพในแนวตั้ง ทางออกที่เหมาะสมสำหรับเบราว์เซอร์รุ่นใหม่คือ flexbox คอนเทนเนอร์แบบยืดหยุ่นสามารถกำหนดค่าให้จัดแนวรายการได้ทั้งแนวนอนและแนวตั้ง

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

โซลูชันนี้ตอบคำถามและทำงานต่างจากคำตอบที่ทำเครื่องหมายไว้ บางทีผู้มีสิทธิ์ลงคะแนนอาจให้รายละเอียดการตัดสินใจลงคะแนนเสียง
WDuffy

6
จากคิวการตรวจทาน : ฉันขอให้คุณเพิ่มบริบทรอบ ๆ ซอร์สโค้ดของคุณได้ไหม คำตอบแบบรหัสเท่านั้นยากที่จะเข้าใจ มันจะช่วยผู้ถามและผู้อ่านในอนาคตทั้งสองหากคุณสามารถเพิ่มข้อมูลเพิ่มเติมในโพสต์ของคุณ
RBT

1
นั่นไม่ได้เป็นเหตุผลให้ downvote คำตอบนั้นถูกต้องทางเทคนิคและจะช่วยให้ผู้อ่านในอนาคต ฉันได้อัปเดตเนื้อหาคำตอบเพื่อให้เป็นไปตามกฎของบ้าน แต่อาจเป็นทางออกที่ตรงกว่าโดยทีมงานหลักเนื่องจากการระบุรหัสคำตอบเท่านั้นเป็นงานที่ไม่สำคัญ
WDuffy

0

คุณสามารถดูวิธีแก้ปัญหานี้:

จัดกึ่งกลางภาพในแนวนอนและแนวตั้งในกล่อง

<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

วิธีง่ายๆคือการสร้างสไตล์ที่แยกกันสำหรับทั้ง div และรูปภาพจากนั้นจัดวางตำแหน่งอย่างอิสระ พูดถ้าฉันต้องการตั้งตำแหน่งภาพของฉันเป็น 50% แล้วฉันจะมีรหัสที่มีลักษณะดังต่อไปนี้ ....

#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


0

สิ่งนี้น่าจะใช้ได้

สิ่งสำคัญสำหรับการทดสอบ:ในการเรียกใช้ข้อมูลโค้ดคลิกปุ่มซ้ายRUN code snippetจากนั้นลิงค์ด้านขวาเต็มหน้า

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.