จัดกึ่งกลางภาพโดยใช้ศูนย์จัดแนวข้อความ?


511

คุณสมบัตินี้text-align: center;เป็นวิธีที่ดีในการจัดกึ่งกลางภาพโดยใช้ CSS หรือไม่?

img {
    text-align: center;
}

jsfiddle.net/j6q4d810/1สิ่งนี้ใช้ได้ดีกับความกว้างและความสูงใด ๆ
gmarsi

คำตอบ:


1087

ซึ่งจะไม่ทำงานเนื่องจากtext-alignคุณสมบัตินี้ใช้กับบล็อกคอนเทนเนอร์ไม่ใช่องค์ประกอบแบบอินไลน์และimgเป็นองค์ประกอบแบบอินไลน์ ดูข้อกำหนดของ W3C

ใช้สิ่งนี้แทน:

img.center {
    display: block;
    margin: 0 auto;
}
<div style="border: 1px solid black;">
<img class="center" src ="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a">

</div>


5
ฉันลองวิธีนี้แล้วใช้งานได้! แต่เมื่อฉันลอง 2 ภาพมันไม่ทำงานมันแค่ซ้อนทับกันเหมือนโทเท็มความคิดใด ๆ ที่จะจัดแนว 2 ภาพในบรรทัดเดียวกันตรงกลาง
PatrickGamboa

1
W3C ไม่รองรับอย่างไร คุณสามารถระบุลิงก์เพื่อสำรองการอ้างสิทธิ์นั้นได้หรือไม่
ผีของ Madara

1
@SecondRikudo: ใช้text-alignสำหรับจัดกึ่งกลางข้อความตามที่ชื่อมีความหมาย สำหรับองค์ประกอบบล็อกmargin: 0 auto;เป็นวิธีที่แนะนำ
Mrchief

4
@Mchchief รูปภาพเป็นองค์ประกอบแบบอินไลน์ไม่ใช่บล็อก text-alignทำงานได้ดีเช่นกันกับพวกเขา
Madara's Ghost

4
คำอธิบายนั้นแปลกประหลาดใช่ไหม? คุณบอกว่า 'การจัดตำแหน่งข้อความ' ใช้กับบล็อกไม่ใช่ในแนวอินไลน์ซึ่งฉันเชื่อว่าจากนั้นคุณเปลี่ยนมันเป็นองค์ประกอบบล็อก แต่หลีกเลี่ยงการใช้การจัดแนวข้อความ ฉันหมายถึงรหัสของคุณใช้งานได้ แต่ย่อหน้านั้นจำเป็นต้องได้รับการป้อนรหัสใหม่ทั้งหมด
Octopus


87

ฉันเจอโพสต์นี้และมันใช้ได้กับฉัน:

img {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
}
<div style="border: 1px solid black; position:relative; min-height: 200px">
  <img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a">

</div>

(การจัดตำแหน่งแนวตั้งและแนวนอน)


48

อีกวิธีในการทำเช่นนั้นจะเป็นการจัดกึ่งกลางของย่อหน้าที่ล้อมรอบ:

<p style="text-align:center; border:1px solid black"><img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a"></p>


19
ฉันไม่เห็นด้วยฉันคิดว่านี่จะตอบคำถามได้ OP ถามว่าทรัพย์สินtext-align: centerเป็นวิธีที่ดีในการจัดกึ่งกลางภาพหรือไม่และไม่ได้ระบุว่าทรัพย์สินนั้นจะต้องเป็นส่วนหนึ่งของแท็ก img คำตอบนี้ใช้คุณสมบัติที่เป็นปัญหาเพื่อพยายามหาวิธีแก้ปัญหา (ใช้งานได้)
MandM

2
สิ่งนี้ใช้ได้สำหรับฉันเมื่อแสดง: บล็อก ฯลฯ จะไม่
matthewsheets


13

ที่จริงแล้วปัญหาเดียวที่มีกับโค้ดของคุณคือแอtext-alignททริบิวต์นี้ใช้กับข้อความ (ใช่รูปภาพนับเป็นข้อความ) ภายในแท็ก คุณจะต้องการที่จะนำspanแท็กรอบภาพและการตั้งค่าของรูปแบบให้text-align: centerเป็นดังนั้น:

span.centerImage {
     text-align: center;
}
<span class="centerImage"><img src="http://placehold.it/60/60" /></span>

รูปภาพจะถูกจัดกึ่งกลาง ในการตอบคำถามของคุณมันเป็นวิธีที่ง่ายที่สุดและเข้าใจผิดได้มากที่สุดในการจัดภาพให้อยู่กึ่งกลางตราบเท่าที่คุณจำได้ว่าต้องใช้กฎกับภาพที่มีspan(หรือdiv)


2
spanองค์ประกอบdisplay: inline;โดยค่าเริ่มต้นเพื่อให้การทำงานนี้ในปัญหาเช่นเดียวกับการวางtext-align: center;บนimgตัวของมันเอง คุณต้องตั้งค่าspanไปdisplay: block;หรือแทนที่ด้วยdivสำหรับการทำงาน
Web_Designer

10

มีสามวิธีในการจัดองค์ประกอบให้อยู่ตรงกลางที่ฉันสามารถแนะนำ:

  1. การใช้text-alignคุณสมบัติ

        .parent {
        text-align: center;
    }
        <div class="parent">
        <img src="https://placehold.it/60/60" />
    </div>

  2. การใช้marginคุณสมบัติ

    img {
        display: block;
        margin: 0 auto;
    }
    <img src="https://placehold.it/60/60" />

  3. การใช้positionคุณสมบัติ

    img {
        display: block;
        position: relative;
        left: -50%;
    }
    .parent {
        position: absolute;
        left: 50%;
    }
    <div class="parent">
        <img src="https://placehold.it/60/60" />
    </div>


วิธีการแรกและครั้งที่สองจะใช้ได้ก็ต่อเมื่อผู้ปกครองมีความกว้างอย่างน้อยเท่ากับภาพ เมื่อภาพมีความกว้างมากกว่าภาพหลักภาพจะไม่อยู่ตรงกลาง !!!

แต่: วิธีที่สามเป็นวิธีที่ดีสำหรับสิ่งนั้น!

นี่คือตัวอย่าง:

img {
    display: block;
    position: relative;
    left: -50%;
}
.parent {
    position: absolute;
    left: 50%;
}
<div class="parent">
    <img src="http://imgsv.imaging.nikon.com/lineup/lens/zoom/normalzoom/af-s_dx_18-140mmf_35-56g_ed_vr/img/sample/img_01.jpg" />
</div>


# 3 มีความแม่นยำมากจนฉันสามารถจัดกึ่งกลางimgด้านdivในWebViewด้วยการฉีด CSS ขอบคุณ!
JorgeAmVF

8

เฉพาะในกรณีที่คุณต้องการสนับสนุน Internet Explorer รุ่นโบราณ

วิธีการที่ทันสมัยคือการทำmargin: 0 autoใน CSS ของคุณ

ตัวอย่างที่นี่: http://jsfiddle.net/bKRMY/

HTML:

<p>Hello the following image is centered</p>
<p class="pic"><img src="https://twimg0-a.akamaihd.net/profile_images/440228301/StackoverflowLogo_reasonably_small.png"/></p>
<p>Did it work?</p>

CSS:

p.pic {
    width: 48px;
    margin: 0 auto;
}

ปัญหาเดียวที่นี่เป็นที่ที่ความกว้างของวรรคจะต้องเป็นเช่นเดียวกับความกว้างของภาพ หากคุณไม่ใส่ความกว้างในย่อหน้ามันจะไม่ทำงานเพราะจะถือว่า 100% และภาพของคุณจะถูกจัดชิดซ้ายยกเว้นว่าคุณใช้text-align:centerแน่นอน

ลองเล่นซอและทดลองกับมันถ้าคุณชอบ


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

1
นักล่าฝันถ้าคุณกำลังเสนอทางเลือกอื่นในการจัดภาพให้อยู่กึ่งกลางโดยใช้ css คุณต้องขยายคำถามของคุณสักเล็กน้อย คุณสามารถอธิบายได้ว่าทำไมและทางเลือกที่เสนอนี้จะเป็นวิธีที่ดีกว่าในการบรรลุเป้าหมายของผู้ถามรวมถึงลิงค์ไปยังเอกสารที่เกี่ยวข้อง สิ่งนี้จะทำให้มีประโยชน์มากขึ้นสำหรับพวกเขาและยังเป็นประโยชน์ต่อผู้อ่านไซต์อื่น ๆ ที่กำลังมองหาวิธีแก้ไขปัญหาที่คล้ายกัน
Vince Bowdren

6

หากคุณกำลังใช้คลาสที่มีรูปภาพอยู่สิ่งต่อไปนี้จะทำ

class {
    display: block;
    margin: 0 auto;
}

หากเป็นเพียงรูปภาพในคลาสเฉพาะที่คุณต้องการจัดตำแหน่งกึ่งกลางจากนั้นจะดำเนินการดังนี้:

class img {
    display: block;
    margin: 0 auto;
}

ฉันจะเปลี่ยนส่วนล่างเป็นimg.classหรือเพิ่มimg.classรุ่นด้วย ขอบคุณสำหรับสิ่งนี้
Chuck Savage

6

บนอิมเมจที่เก็บคอนเทนเนอร์คุณสามารถใช้ CSS 3 Flexboxเพื่อจัดกึ่งกลางของภาพภายในศูนย์ได้อย่างสมบูรณ์ทั้งในแนวตั้งและแนวนอน

สมมติว่าคุณมี <div class = "container"> ในฐานะผู้ถือรูปภาพ:

จากนั้นเป็น CSS ที่คุณต้องใช้:

.container {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
}

และสิ่งนี้จะทำให้เนื้อหาทั้งหมดของคุณภายใน div นี้มีศูนย์กลางที่สมบูรณ์แบบ


ผู้ใช้ที่ปรับเนื้อหาสามารถใช้สำหรับการจัดแนวใน <p> ??
Manjitha teshara

นี่คือสิ่งที่ฉันต้องการ ขอบคุณ.
Dionne Kim

5

ทางออกที่ง่ายที่สุดที่ฉันพบคือการเพิ่มสิ่งนี้ลงในองค์ประกอบ img ของฉัน:

style="display:block;margin:auto;"

ดูเหมือนว่าฉันไม่จำเป็นต้องเพิ่ม "0" ก่อน "อัตโนมัติ" ตามที่ผู้อื่นแนะนำ อาจเป็นวิธีที่เหมาะสม แต่ก็ใช้ได้ดีพอสำหรับวัตถุประสงค์ของฉันหากไม่มี "0" เช่นกัน อย่างน้อยใน Firefox, Chrome และEdgeล่าสุด


เพียงอัตโนมัติเฉลี่ยauto auto auto autoและ0 autoวิธีการ0 auto 0 auto... และโดยอัตโนมัติเริ่มต้นสำหรับขอบด้านล่างและด้านบน0เพื่อเพิ่ม 0 หรือไม่เป็นเหมือนกันในกรณีนี้ที่ทำให้คุณตอบที่ n-ซ้ำกันของคนที่ให้อยู่แล้ว
Temani Afif

ความคิดเห็นของคุณอธิบายว่าทำไมมันทำงาน ยิ่งใหญ่ แต่คำตอบก่อนหน้าใดที่บอกว่า 'อัตโนมัติ' ธรรมดาที่ไม่มี '0' ทำงานเช่นกัน ความจริงข้อนี้ไม่คุ้มค่าที่จะพูดถึงเหรอ?
Panu Logic

ในกรณีนี้มันควรจะเป็นความคิดเห็นเพราะในกรณีนี้ทั้งสองเหมือนกัน ผมไม่คิดว่าเราควรจะมีคำตอบสำหรับทุกค่าเทียบเท่าในกรณีนี้เราสามารถเขียน: auto, auto auto, auto auto auto, auto auto auto auto, 0 auto 0, 0 auto, 0 auto 0 autoและอื่น ๆ ... คุณคิดว่าแต่ละคนสมควรได้คำตอบที่แตกต่างกันอย่างไร ฉันไม่คิดอย่างนั้น
Temani Afif

ฉันจะไม่พูดว่าถ้าสองส่วนที่แตกต่างกันของ CSS สร้างผลลัพธ์ที่เหมือนกันทั้งสองกลุ่มนั้น "เหมือนกัน" เอาต์พุตของพวกเขาเหมือนกัน แต่ซอร์สโค้ดไม่เหมือนกัน โดยทั่วไปคุณสามารถเขียนโปรแกรมต่าง ๆ จำนวนมากที่สร้างเอาต์พุตเดียวกัน ถ้าอย่างนั้นก็มีประโยชน์ที่จะรู้ (และบอกผู้ที่ถาม) ว่าโปรแกรมใดที่ "เทียบเท่า" นั้นน่าจะง่ายและสั้นที่สุดในการเขียน
Panu Logic

และทั้งหมดนี้ควรเขียนภายในหนึ่งคำตอบ นั่นเป็นเหตุผลที่คำตอบนี้เหมาะสมกว่าความคิดเห็นมากกว่าคำตอบใหม่ทั้งหมด เราควรนำเสนอสิ่งที่เท่าเทียมกันทั้งหมดและไม่ทำให้พวกเขาแยกคุณลักษณะซึ่งอาจฟังดูว่าพวกเขาแตกต่างกันอย่างสิ้นเชิงเพราะไม่ใช่กรณี [ความเห็นของฉัน btw ไม่จำเป็นต้องเห็นด้วยหรือเถียงตรงกันข้าม] และฉันไม่ได้พูดถึงโปรแกรมต่าง ๆ ที่สร้างผลลัพธ์เดียวกันมันต่างกันโดยสิ้นเชิงเพราะตรรกะอาจไม่เหมือนกัน ที่นี่เรากำลังพูดถึงคุณสมบัติเดียวกันและค่าเดียวกัน (เหมือนi++กันi+=1)
Temani Afif

4

เพียงแค่เปลี่ยนการจัดแนวผู้ปกครอง :)

ลองใช้ตัวเลือกนี้กับคุณสมบัติหลัก:

text-align:center

3

คุณสามารถใช้ได้ text-align: centerในการปกครองและเปลี่ยนimgไปdisplay: inline-block→จึงพฤติกรรมเช่นข้อความองค์ประกอบและจะเป็นศูนย์กลางถ้าผู้ปกครองมีความกว้าง!

img {
    display: inline-block
}

2

ฉันจะใช้ div เพื่อจัดกึ่งกลางภาพ ในขณะที่:

<div align="center"><img src="your_image_source"/></div>

2

หากคุณต้องการตั้งค่าภาพเป็นพื้นหลังฉันมีวิธีแก้ไข:

.image {
    background-image: url(yourimage.jpg);
    background-position: center;
}

2

ในการจัดกึ่งกลางของภาพพื้นหลังที่ไม่ใช่ขึ้นอยู่กับว่าคุณต้องการแสดงภาพเป็นแบบอินไลน์ (พฤติกรรมเริ่มต้น) หรือองค์ประกอบบล็อก

กรณีของอินไลน์

หากคุณต้องการให้พฤติกรรมเริ่มต้นของคุณสมบัติ CSS ของรูปภาพแสดงคุณจะต้องล้อมรูปภาพของคุณไว้ในองค์ประกอบบล็อกอื่นที่คุณต้องตั้งค่า text-align: center;

กรณีของบล็อก

หากคุณต้องการพิจารณาภาพเป็นองค์ประกอบบล็อกของตัวเองแล้วtext-alignคุณสมบัติไม่ทำให้รู้สึกและคุณควรทำเช่นนี้แทน:

IMG.display {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

คำตอบสำหรับคำถามของคุณ:

การจัดตำแหน่งคุณสมบัติข้อความ: center; วิธีที่ดีในการจัดกึ่งกลางภาพโดยใช้ CSS คืออะไร?

ใช่และไม่.

  • ใช่ถ้าภาพเป็นองค์ประกอบเดียวในเสื้อคลุม
  • ไม่ในกรณีที่คุณมีองค์ประกอบอื่น ๆ ภายในเสื้อคลุมของภาพเพราะองค์ประกอบเด็กทั้งหมดที่เป็นพี่น้องของภาพจะได้รับมรดกtext-align: และอาจเป็นเพราะคุณไม่ชอบผลข้างเคียงนี้

อ้างอิง

  1. รายการองค์ประกอบแบบอินไลน์
  2. อยู่ตรงกลางสิ่งต่าง ๆ

1

อีกวิธีหนึ่งในการปรับขนาด - แสดง:

img {
  width: 60%; /* Or required size of image. */
  margin-left: 20% /* Or scale it to move image. */
  margin-right: 20% /* It doesn't matters much if using left and width */
}


0

display: blockด้วยmargin: 0ไม่ได้ผลสำหรับฉันไม่ได้ห่อด้วยtext-align: centerองค์ประกอบ

นี่คือทางออกของฉัน:

img.center {
    position: absolute;
    transform: translateX(-50%);
    left: 50%;
}

translateX ได้รับการสนับสนุนโดยเบราว์เซอร์ส่วนใหญ่


1
คุณหมายถึงmargin: 0 auto;อะไร ที่สำคัญคือการตั้งค่าmargin-leftและการmargin-right เป็นเพียงทางลัดสำหรับสิ่งนั้น automargin: 0 auto;
Web_Designer

1
@ Web_Designer ฉันลองmargin: 0 autoแล้วmargin: 0, และmargin: auto, ไม่ทำงาน. โปรดทราบว่าในการตรวจสอบของ Chrome เมื่อใช้margin: 0 autoจะนัดสถานที่ให้บริการที่มีเครื่องหมายอัศเจรีย์พูดinvalid property value(หรือสิ่งที่หมายความว่า)
OverCoder

ฉันคิดว่าคุณหมายถึง "position: absolute;" แทน "display: absolute;"
WebDevDaniel

ขอบคุณ @WebDevDaniel ที่ชี้การพิมพ์ผิด คุณอาจต้องการใช้การrelativeวางตำแหน่งมากกว่าabsoluteทั้งสองวิธีใช้งานได้ดี
OverCoder

0

ฉันค้นพบว่าถ้าฉันมีภาพและข้อความบางส่วนอยู่ภายใน a divจากนั้นฉันสามารถใช้text-align:centerเพื่อจัดตำแหน่งข้อความและภาพในรูปเดียว

HTML:

    <div class="picture-group">
        <h2 class="picture-title">Picture #1</h2>
        <img src="http://lorempixel.com/99/100/" alt="" class="picture-img" />
        <p class="picture-caption">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Temporibus sapiente fuga, quia?</p>
    </div>

CSS:

.picture-group {
  border: 1px solid black;
  width: 25%;
  float: left;
  height: 300px;
  #overflow:scroll;
  padding: 5px;
  text-align:center;
}

CodePen: https://codepen.io/artforlife/pen/MoBzrL?editors=1100


0

บางครั้งเราเพิ่มเนื้อหาและรูปภาพโดยตรงบนผู้ดูแลระบบ WordPress ภายในหน้า เมื่อเราแทรกรูปภาพภายในเนื้อหาและต้องการจัดตำแหน่งกึ่งกลางนั้น รหัสจะแสดงเป็น:

 **<p><img src="https://abcxyz.com/demo/wp-content/uploads/2018/04/1.jpg" alt=""></p>**

ในกรณีนี้คุณสามารถเพิ่มเนื้อหา CSS ดังนี้:

article p img{
    margin: 0 auto;
    display: block;
    text-align: center;
    float: none;
}

0

ใช้:

<dev class="col-sm-8" style="text-align: center;"><img src="{{URL('image/car-trouble-with-clipping-path.jpg')}}" ></dev>

ฉันคิดว่านี่เป็นวิธีที่จะจัดกึ่งกลางของภาพในกรอบงาน Laravel


0
.img-container {
  display: flex;
}

img {
  margin: auto;
}

สิ่งนี้จะทำให้ศูนย์กลางภาพทั้งในแนวตั้งและแนวนอน

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