จัดกึ่งกลางภาพในแนวนอนภายใน div


387

อาจเป็นคำถามที่โง่ แต่เนื่องจากวิธีการจัดกึ่งกลางภาพตามปกติไม่ทำงานฉันจึงคิดว่าฉันจะถาม ฉันจะจัดแนวภาพในแนวนอนให้อยู่ในคอนเทนเนอร์ div ได้อย่างไร

นี่คือ HTML และ CSS ฉันยังรวม CSS สำหรับองค์ประกอบอื่น ๆ ของภาพขนาดย่อ มันทำงานตามลำดับจากมากไปน้อยดังนั้นองค์ประกอบสูงสุดคือที่เก็บของทุกอย่างและที่ต่ำที่สุดอยู่ภายในทุกอย่าง

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

โอเคฉันได้เพิ่มมาร์กอัปโดยไม่ใช้ PHP ดังนั้นควรมองเห็นได้ง่ายขึ้น ดูเหมือนว่าวิธีแก้ปัญหาทั้งสองไม่ทำงานในทางปฏิบัติ ข้อความที่ด้านบนและด้านล่างไม่สามารถอยู่กึ่งกลางและภาพควรอยู่กึ่งกลางภายใน div คอนเทนเนอร์ ตู้คอนเทนเนอร์ถูกซ่อนไว้ล้นดังนั้นฉันต้องการเห็นจุดศูนย์กลางของภาพตามปกติซึ่งเป็นจุดโฟกัส


1
มันตั้งใจที่จะแสดงภาพในบรรทัดเดียวกับลิงค์แรก (หนึ่งในศิลปิน) หรือไม่
Shoaib

5
img's อาจมีการtext-align: centerยกเว้นในกรณีที่พวกเขาdisplayได้รับการแก้ไข
Jared Farrish

4
jsfiddle.net/cEgRp - simpletext-align: center
Zoltan Toth

3
จาค็อบอย่างน้อยคุณสามารถโพสต์มาร์คอัปที่แท้จริงที่เบราว์เซอร์เห็นและไม่ใช่เทมเพลต PHP-infused หรือไม่? นอกจากนี้jsfiddle.net ที่ใช้งานได้จะช่วยให้
Jared Farrish

2
ไม่ทราบความคิดเห็นของฉัน - ฉันไม่ได้แจ้งให้ทราบล่วงหน้าล้อมรอบในimg aฉันเป็นใบ้
Shoaib

คำตอบ:


834

CSS Guyแนะนำสิ่งต่อไปนี้:

ดังนั้นการแปลอาจจะ:

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

นี่คือทางออกของฉันใน: http://jsfiddle.net/marvo/3k3CC/2/


10
ฉันไม่คิดว่านี่เป็นความคิดที่ดีและฉันเชื่อว่ามีข้อแม้บางอย่างเช่นmargin: autoขึ้นอยู่กับองค์ประกอบที่มีค่าความกว้างที่กำหนด
Jared Farrish

4
ฉันยังคงพัฒนาทักษะ CSS ของฉันดังนั้นขอบคุณสำหรับจุดศึกษาที่น่าสนใจ แต่ในกรณีนี้เขาใช้ความกว้างคงที่บนคอนเทนเนอร์
Marvo

1
ความกว้างที่กำหนดหมายถึงอะไรในบริบทนี้ ดูเหมือนว่ามีความรู้ที่เป็นประโยชน์
Shoaib

1
ดูซอนี้ฉันทำ ; ฉันไม่แน่ใจว่าจะคิดอย่างไร สิ่งที่คุณบอกจะไม่ทำอะไรและimgผมเชื่อว่าจะต้องมีความกว้างที่กำหนดไว้อยู่แล้วจะมีผลกระทบใด ๆ autoกับ
Jared Farrish

2
คุณไม่ได้ใช้โซลูชันที่ฉันนำเสนอจริง ๆ ประการที่สอง div ที่ล้อมรอบมีความกว้าง 120px ซึ่งใกล้เคียงกับความกว้างของภาพทำให้มองเห็นได้ยากว่าเป็นศูนย์กลางของภาพหรือไม่ นี่คือวิธีแก้ปัญหาของฉัน: jsfiddle.net/marvo/3k3CC/2
Marvo

88

CSS flexboxสามารถทำได้ด้วยjustify-content: centerองค์ประกอบภาพหลัก เพื่อรักษาอัตราส่วนภาพของภาพให้เพิ่มลงalign-self: flex-start;ไป

HTML

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

CSS

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

เอาท์พุท:


4
ทางออกที่ยอดเยี่ยมเมื่อเบราว์เซอร์รองรับสิ่งนี้ซึ่งเป็นของฉัน ยังสามารถใช้align-itemsเพื่อจัดกึ่งกลางในแนวตั้ง โซลูชันมาร์จิ้นต่าง ๆ ใช้ไม่ได้สำหรับฉันเพราะองค์ประกอบที่จะอยู่ตรงกลางไม่มีแอตทริบิวต์ความกว้างและความสูง
Marc Rochkind

1
ในกรณีของฉัน div มีขนาดที่กำหนด (เช่น 50px) และสิ่งนี้จะยืดภาพให้อยู่ที่ 50px
สูงสุด

1
@ Max ในกรณีนี้คุณสามารถใช้align-selfองค์ประกอบภาพเช่นjsfiddle.net/3fgvkurd
Manoj Kumar

69

ฉันเพิ่งพบวิธีแก้ไขปัญหานี้ด้านล่างในหน้า W3 CSS และตอบปัญหาของฉัน

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

ที่มา: http://www.w3.org/Style/Examples/007/center.en.html


ฉันใช้ max-width: 100%; max-height: 100%;เพื่อปรับขนาดภาพถ้าหน้าจอเล็กกว่าภาพ แต่ในกรณีนี้มันไม่ได้อยู่ตรงกลาง ข้อเสนอแนะใด ๆ เกี่ยวกับวิธีการจัดกึ่งกลางด้วยคุณลักษณะทั้งสองที่นำไปใช้
Alexey Strakh

18

สิ่งนี้ก็จะทำเช่นนั้น

#imagewrapper {
    text-align:center
}

#imagewrapper img {
    display:inline-block;
    margin:0 5px
}

คุณหมายถึงtext-align:center;และ margin:0 5px;? ฉันเพิ่ม;
jagb

@jagb อัฒภาคไม่จำเป็นสำหรับคุณสมบัติสุดท้ายในบล็อกตัวเลือก
TylerH

4
@TylerH นั่นเป็นความจริงเซมิโคลอนไม่จำเป็นสำหรับคุณสมบัติสุดท้ายในบล็อกตัวเลือก แต่มันก็ปลอดภัยกว่าเสมอที่จะใช้เครื่องหมายอัฒภาค .. ถ้าฉันเขียนไฟล์ CSS นักพัฒนาคนอื่นแก้ไขไฟล์ของฉันในภายหลังพวกเขาเพิ่มรหัสบางส่วน (หลังจากบรรทัด ด้วยเซมิโคลอนที่ขาดหายไปบรรทัดที่ฉันเขียนไว้ก่อนหน้าในไฟล์ CSS นั้น) และความสูงความกว้างหรือการประกาศอื่น ๆ ของฉันไม่ทำงาน (หรือแย่กว่านั้นพวกเขาไม่ได้สังเกตว่ามันไม่ทำงาน) ฉันจะบอกว่าปลอดภัยกว่าที่จะออกจากเครื่องหมายอัฒภาคนี่คือเหตุผลที่ฉันใช้เครื่องหมายอัฒภาคและไม่ปล่อยเครื่องหมายอัฒภาคออก
jagb

@jagb หากผู้พัฒนารายอื่นแก้ไขไฟล์ของคุณในภายหลังพวกเขาจะเพิ่มเซมิโคลอนหากจำเป็นหรือเป็นปัญหาของพวกเขาในการเขียนโค้ดที่มีข้อผิดพลาด การตอบกลับความคิดเห็นเริ่มต้นของคุณยังคงเป็น: "อัฒภาคในบรรทัดสุดท้ายใน CSS เป็นตัวเลือกสไตล์"
TylerH

ฉันเห็นด้วยกับ jagb เว็บไซต์นี้ควรส่งเสริมตัวเลือกรูปแบบที่ดี สไตล์ที่ดีไม่ทิ้งโค้ดไว้ข้างหลังว่ามันพังง่าย การใส่เครื่องหมายอัฒภาคในทุกบรรทัดคุณอาจจะ 1 / 10th ของวินาทีการดีบั๊กเพื่อหาเซมิโคลอนที่หายไปเพียงตัวเดียวอาจทำให้คุณเสียเวลา นั่นเป็นเหตุผลว่าทำไม บริษัท เทคโนโลยีขนาดใหญ่จึงยืนยัน: คู่มือสไตล์ HTML / CSS ของ Google - การหยุดการประกาศ
Georg Patscheider

14

สิ่งที่ดีที่สุดที่ฉันได้พบ (ที่ดูเหมือนว่าจะทำงานในเบราว์เซอร์ทั้งหมด) สำหรับการจัดกึ่งกลางภาพหรือองค์ประกอบใด ๆ ในแนวนอนคือการสร้างคลาส CSS และรวมพารามิเตอร์ต่อไปนี้:

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

จากนั้นคุณสามารถใช้คลาส CSS ที่คุณสร้างกับแท็กของคุณดังนี้:

HTML

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

คุณยังสามารถอินไลน์ CSS ในองค์ประกอบของคุณโดยทำสิ่งต่อไปนี้:

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

... แต่ฉันไม่แนะนำให้เขียน CSS แบบอินไลน์เพราะคุณจะต้องทำการเปลี่ยนแปลงหลายครั้งในแท็กทั้งหมดของคุณโดยใช้โค้ด CSS ที่อยู่ตรงกลางหากคุณต้องการเปลี่ยนสไตล์


ทำงานได้ แต่เพื่อความเข้ากันได้ของเบราว์เซอร์คุณจะต้องใช้การแปลงรูปแบบอื่น
เจควันบุหรี่

11

นี่คือสิ่งที่ฉันทำ:

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

ซึ่งจะจำกัดความสูงของภาพไว้ที่ 600px และจะอยู่กึ่งกลางแนวนอน (หรือลดขนาดลงถ้าความกว้างของพาเรนต์เล็กกว่า) ไปยังคอนเทนเนอร์พาเรนต์โดยคงสัดส่วนไว้


8

ฉันจะออกไปที่แขนขาแล้วพูดว่าต่อไปนี้คือสิ่งที่คุณเป็น

หมายเหตุสิ่งต่อไปนี้ฉันเชื่อว่าไม่ได้ตั้งใจในคำถาม (ดูความคิดเห็น):

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

ดังนั้นสิ่งที่คุณต้องการคือ:

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

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


อืม ... ฉันจะพนันได้ผล ฉันจัดวาง IMAGE ไว้ที่กึ่งกลางในโซลูชันของฉัน แต่ฉันเห็นได้ว่าคำถามนั้นสามารถตีความได้อย่างไรว่ามีการจัดกึ่งกลางของภาพที่ล้อมรอบ div ไว้ใน div อื่น ไม่ว่าจะด้วยวิธีใดวิธีเดียวกัน
Marvo

วิธีการแก้ปัญหาทั้งทำงานในทางปฏิบัติ ฉันลองทั้งสองวิธีแล้วก่อนที่มันจะไม่ทำงาน โปรดอ้างอิงการแก้ไขในคำถาม
Jacob Windsor

3

หากต้องการจัดกึ่งกลางภาพตามแนวนอนการทำงานนี้:

<p style="text-align:center"><img src=""></p>

ใช่ แต่ถ้าคุณวางแผนที่จะแสดงภาพเป็นบล็อกเพื่อป้องกันพื้นที่สีขาวที่น่าเบื่อภายใต้มันจะไม่ทำงานอีกต่อไป ...
Dr Fred

3

เพิ่มลงใน CSS ของคุณ:

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

เพียงแค่อ้างอิงองค์ประกอบลูกซึ่งในกรณีนั้นคือภาพ


2
นี่เป็นสิ่งที่ดีสำหรับเมื่อคุณยังต้องการเข้าถึงขอบด้านบน .. ดีกว่า
จิ้น

2

ใส่การซ้อนพิกเซลที่เท่ากันสำหรับซ้ายและขวา:

<div id="artiststhumbnail" style="padding-left:ypx;padding-right:ypx">

1

newDivใส่ภาพภายใน ทำให้ความกว้างของที่มีdivเช่นเดียวกับภาพ สมัครไปที่margin: 0 auto; newDivที่ควรอยู่กึ่งกลางdivภายในคอนเทนเนอร์


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

คุณสามารถจัดแนวเนื้อหาของคุณโดยใช้ flex box ด้วยรหัสขั้นต่ำ

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>

ลิงก์ js fiddle https://jsfiddle.net/7un6ku2m/


1

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

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


1

ฉันลองมาหลายวิธีแล้ว แต่วิธีนี้ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน

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


0

หากคุณต้องทำแบบอินไลน์นี้ (เช่นเมื่อใช้ช่องป้อนข้อมูล)
ที่นี่เป็นสับรวดเร็วที่ทำงานสำหรับฉัน: ล้อมรอบ (ลิงค์ภาพในกรณีนี้) ของคุณ
ในdivด้วยstyle="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 */

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

5
ยินดีต้อนรับสู่ stackoverflow! โปรดเพิ่มคำอธิบายลงในคำตอบของคุณ
แมกซีมีเลียนปีเตอร์

หากเราต้องการแก้ไขเฉพาะ<div> หรือ<section>ทั้งสองแนวตั้งและกึ่งกลางของหน้าสำหรับอุปกรณ์ทั้งหมดเพียงแค่คุณสามารถใช้รหัสสไตล์นี้ !!!!
พระอิศวร Kaliyamoorthy

ดูเหมือนว่าคำตอบนี้เป็นคำถามที่แตกต่างกัน :)
Manoj Kumar

0

ใช่รหัสเช่นนี้ทำงานได้ดี

<div>
 <img>
</div>

แต่เพื่อเตือนให้คุณนึกถึงสไตล์ของภาพ

object-fit : *depend on u*

ดังนั้นรหัสสุดท้ายเป็นเช่นตัวอย่าง

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

ผลสุดท้าย


0

การใช้คุณสมบัติการโค้งงอบนภาชนะเป็นคำตอบที่ถูกต้องสำหรับการจัดกึ่งกลางทั้งแนวตั้งและแนวนอน

คำตอบด้านบนที่นี่ไม่ทำงานสำหรับการจัดรายการในแนวตั้งเพียงแนวนอน


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