วิธีรักษาอัตราส่วนโดยใช้แท็ก HTML IMG


132

ฉันใช้แท็ก img ของ HTML เพื่อแสดงรูปภาพในแอปพลิเคชันของเรา ฉันได้ตั้งค่าแอตทริบิวต์ความสูงและความกว้างเป็น 64 ฉันต้องการแสดงความละเอียดของภาพใด ๆ (เช่น 256x256, 1024x768, 500x400, 205x246 เป็นต้น) เป็น 64x64 แต่การตั้งค่าแอตทริบิวต์ความสูงและความกว้างของแท็ก img เป็น 64 จะไม่คงอัตราส่วนภาพไว้ดังนั้นภาพจึงดูบิดเบี้ยว

สำหรับการอ้างอิงของคุณรหัสที่แน่นอนของฉันคือ:

<img src="Runtime Path to photo" border="1" height="64" width="64">


ชริดามฉันถามคำถามนี้นานแล้ว ฉันได้ออกจาก บริษัท นั้นโดยที่ฉันทำงานเกี่ยวกับปัญหานี้ ฉันไม่สามารถลองใช้วิธีแก้ไขปัญหาที่แนะนำได้เนื่องจากฉันกำลังดำเนินการตามลำดับความสำคัญอื่น ๆ เพื่อให้เป็นไปตามกำหนดเวลานั้น ฉันไม่มีโอกาสที่จะก้าวหน้าต่อไป
sunil kumar

คำตอบ:


134

อย่ากำหนดความสูงและความกว้าง ใช้อย่างใดอย่างหนึ่งและอัตราส่วนภาพที่ถูกต้องจะยังคงอยู่

.widthSet {
    max-width: 64px;
}

.heightSet {
    max-height: 64px;
}
<img src="http://placehold.it/200x250" />

<img src="http://placehold.it/200x250" width="64" />

<img src="http://placehold.it/200x250" height="64" />

<img src="http://placehold.it/200x250" class="widthSet" />

<img src="http://placehold.it/200x250" class="heightSet" />


14
... แต่ถ้าคุณต้องการแก้ไขทั้งความสูงและความกว้างล่ะ?
fatuhoku

7
สิ่งนี้ไม่สมเหตุสมผลสำหรับแอปพลิเคชันแบบไดนามิก ไม่ทราบว่าความกว้างหรือความสูงจะอยู่ที่ 64px เนื่องจากขึ้นอยู่กับอัตราส่วนของรูปภาพ เหตุใดคำตอบนี้จึงได้รับการโหวตเพิ่มขึ้น
Koenigsberg

@ Märคำถามนี้เกี่ยวกับภาพความกว้างและ / หรือความสูงคงที่ การตอบสนองไม่ใช่ข้อกำหนดของคำถาม
Turnip

3
ขนาดจะคงอัตราส่วนไม่ได้เป็นคำถามคือเฉพาะเกี่ยวกับการใด ๆภาพใด ๆ ที่มีความละเอียด รวมถึงความละเอียดที่เล็กกว่า 64x64
Koenigsberg

66

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

div{
   width: 200px;
   height:200px;
   border:solid
 }

img{
    width: 100%;
    height: 100%;
    object-fit: contain;
    }
<div>
  <img src="https://upload.wikimedia.org/wikipedia/meta/0/08/Wikipedia-logo-v2_1x.png">
</div>


8
หมายเหตุสำหรับผู้ที่ต้องการใช้โซลูชันนี้: ความพอดีของวัตถุไม่ได้รับการสนับสนุนอย่างดีจากเบราว์เซอร์ ไม่รองรับ IE หรือ Edge เลย ที่มา: caniuse.com/#feat=object-fit
Sean Dawson

2
ตอนนี้รองรับบน Edge 16+ ดูตาราง: w3schools.com/css/css3_object-fit.asp
Eddy R

45

ตั้งค่าwidthและheightของรูปภาพเป็นautoแต่ จำกัด ทั้งสองอย่างmax-widthและmax-height:

img {
    max-width:64px;
    max-height:64px;
    width:auto;
    height:auto;
}

ซอ

หากคุณต้องการแสดงภาพที่มีขนาดตามอำเภอใจใน "เฟรม" 64x64px คุณสามารถใช้กระดาษห่อแบบอินไลน์และการวางตำแหน่งสำหรับภาพเหล่านั้นได้เช่นในซอนี้


3
จะไม่ปรับขนาดเกินขนาดต้นฉบับ แต่จะต่ำกว่าขนาดเดิมเท่านั้น
Koenigsberg

40
<img src="Runtime Path to photo"
     style="border: 1px solid #000; max-width:64px; max-height:64px;">

2
นี่เป็นวิธีแก้ปัญหาที่ถูกต้องเนื่องจากยังคงเป็นอิสระจากการวางแนวของภาพ วิธีแก้ปัญหาของ 3rror404 ต้องการให้คุณทราบว่าภาพกว้างกว่าภาพสูงหรือในทางกลับกัน
devios1

2
ยังตั้งwidthและการheight auto
Mahmoodvcs

วิธีแก้ปัญหาที่เหมาะสมในการ จำกัด ทั้งความสูงและความกว้าง
Pavan Kumar

1
ภาพจะถูกจำกัดอย่างเหมาะสมโดยสิ่งนี้ แต่จะไม่ปรับขนาดเกินขนาดดั้งเดิม แม้ว่าจะไม่แน่ใจจากโพสต์เปิดเรื่องที่ OP ทั้งสองต้องการ
Koenigsberg

14

ไม่มีวิธีการใดที่ระบุไว้ในการปรับขนาดภาพให้มีขนาดใหญ่ที่สุดเท่าที่จะเป็นไปได้ที่พอดีกับกล่องในขณะที่ยังคงอัตราส่วนภาพที่ต้องการไว้

สิ่งนี้ไม่สามารถทำได้ด้วยแท็ก IMG (อย่างน้อยก็ไม่ใช่ถ้าไม่มี JavaScript สักหน่อย) แต่สามารถทำได้ดังนี้:

 <div style="background:center no-repeat url(...);background-size:contain;width:...;height:..."></div>

2
ใช่. ใช้style="background: url('_'); background-size: cover width:_px height:_px"สำหรับ<img>แท็ก
Ujjwal Singh

3
ขอบคุณ @UjjwalSingh อันที่จริงเราcoverไม่จำเป็นต้องcontainขยายขนาดภาพให้ใหญ่ที่สุดเท่าที่จะเป็นไปได้ containนำไปสู่ ​​"letterboxing"
Ortwin Gentz



1

ทำไมคุณไม่ใช้ไฟล์ CSS แยกกันเพื่อรักษาความสูงและความกว้างของรูปภาพที่คุณต้องการแสดง ด้วยวิธีนี้คุณสามารถระบุความกว้างและความสูงได้ตามต้องการ

เช่น:

       image {
       width: 64px;
       height: 64px;
       }

1

ลองสิ่งนี้:

<img src="Runtime Path to photo" border="1" height="64" width="64" object-fit="cover">

การเพิ่ม object-fit = "cover" จะบังคับให้รูปภาพกินเนื้อที่โดยไม่เสียอัตราส่วน

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