Cách duy trì tỷ lệ khung hình bằng thẻ HTML IMG


132

Tôi đang sử dụng thẻ img của HTML để hiển thị ảnh trong ứng dụng của chúng tôi. Tôi đã đặt cả thuộc tính chiều cao và chiều rộng của nó thành 64. Tôi cần hiển thị bất kỳ độ phân giải hình ảnh nào (ví dụ: 256x256, 1024x768, 500x400, 205x246, v.v.) là 64x64. Nhưng bằng cách đặt các thuộc tính chiều cao và chiều rộng của thẻ img thành 64, nó không duy trì tỷ lệ khung hình, do đó hình ảnh trông bị méo.

Để bạn tham khảo mã chính xác của tôi là:

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


Chridam, đã lâu rồi khi tôi hỏi câu hỏi này. Tôi đã rời công ty nơi tôi đang làm việc cho vấn đề này. Tôi không thể thử các giải pháp được đề xuất bởi vì tôi đang làm việc trên các ưu tiên khác để đáp ứng thời hạn. Tôi không thể có cơ hội để tiến bộ hơn nữa về nó.
sunil kumar

Câu trả lời:


133

Không đặt chiều cao VÀ chiều rộng. Sử dụng cái này hay cái kia và tỷ lệ khung hình chính xác sẽ được duy trì.

.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
... Nhưng nếu bạn muốn sửa cả chiều cao và chiều rộng thì sao?
fatuhoku

7
Điều này không có ý nghĩa đối với các ứng dụng động. Người ta không biết liệu chiều rộng hay chiều cao sẽ ở mức 64px, vì nó phụ thuộc vào tỷ lệ của hình ảnh. Tại sao đây là phản ứng nâng cao?
Koenigsberg

@ Mär Câu hỏi này là về hình ảnh chiều rộng và / hoặc chiều cao cố định. Sự đáp ứng không phải là một yêu cầu của câu hỏi.
Củ cải

3
Kích thước là cố định, tỷ lệ khung hình là không, vì câu hỏi cụ thể là về bất kỳ hình ảnh của bất kỳ độ phân giải. Bao gồm các độ phân giải nhỏ hơn 64x64.
Koenigsberg

66

đây là mẫu

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
Chỉ cần một lưu ý cho những người muốn sử dụng giải pháp này: sự phù hợp với đối tượng không được các trình duyệt hỗ trợ tốt. Nó không được hỗ trợ bởi IE hay Edge. Nguồn: caniuse.com/#feat=object-fit
Sean Dawson

2
Hiện được hỗ trợ trên Edge 16+, xem bảng: w3schools.com/css/css3_object-fit.asp
Eddy R.

44

Đặt widthheightcủa hình ảnh thành auto, nhưng giới hạn cả hai max-widthmax-height:

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

Vĩ cầm

Nếu bạn muốn hiển thị hình ảnh có kích thước tùy ý trong "khung" 64x64px, bạn có thể sử dụng trình bao bọc khối nội tuyến và định vị cho chúng, như trong câu đố này .


3
Sẽ không vượt quá kích thước ban đầu, chỉ dưới kích thước ban đầu.
Koenigsberg

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

2
Đây là giải pháp chính xác vì nó tiếp tục độc lập với hướng của hình ảnh. Giải pháp của 3rror404 yêu cầu bạn biết liệu hình ảnh rộng hơn chiều cao hay ngược lại.
devios1

2
cũng đặt widthheightđể auto.
Mahmoodvcs

Giải pháp đúng để hạn chế cả chiều cao và chiều rộng.
Pavan Kumar

1
Một hình ảnh sẽ bị hạn chế chính xác bởi điều này, nhưng không được thu nhỏ hơn kích thước ban đầu của nó. Mặc dù không chắc chắn từ bài mở đầu mà hai OP muốn.
Koenigsberg

14

Không có phương pháp nào được liệt kê chia tỷ lệ hình ảnh thành kích thước lớn nhất có thể vừa với một hộp trong khi vẫn giữ tỷ lệ khung hình mong muốn.

Điều này không thể được thực hiện với thẻ IMG (ít nhất là không có một chút JavaScript), nhưng nó có thể được thực hiện như sau:

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

2
Đúng. Sử dụng style="background: url('_'); background-size: cover width:_px height:_px"cho <img>thẻ.
Ujjwal Singh

3
Cảm ơn, @UjjwalSingh. Thật vậy, chúng ta coverkhông cần phải containtối đa hóa kích thước hình ảnh đến mức lớn nhất có thể. containdẫn đến "hộp thư".
Ortwin Gentz


3

Bọc hình ảnh theo divkích thước 64x64 và đặt thành width: inherithình ảnh:

<div style="width: 64px; height: 64px;">
    <img src="Runtime path" style="width: inherit" />
</div>

1

Tại sao bạn không sử dụng một tệp CSS riêng để duy trì chiều cao và chiều rộng của hình ảnh bạn muốn hiển thị? Bằng cách đó, bạn có thể cung cấp chiều rộng và chiều cao nhất thiết.

ví dụ:

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

1

Thử cái này:

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

Thêm object-fit = "cover" sẽ buộc hình ảnh chiếm không gian mà không làm mất tỷ lệ khung hình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.