Làm cách nào để thay đổi kích thước hình ảnh động với CSS khi chiều rộng / chiều cao của trình duyệt thay đổi?


107

Tôi tự hỏi làm thế nào tôi có thể thay đổi kích thước hình ảnh cùng với cửa sổ trình duyệt, đây là những gì tôi đã làm cho đến nay (hoặc tải xuống toàn bộ trang web dưới dạng ZIP ).

Điều này hoạt động tốt trên Firefox, nhưng nó có vấn đề trong Chrome: hình ảnh không phải lúc nào cũng thay đổi kích thước, bằng cách nào đó, nó phụ thuộc vào kích thước của cửa sổ khi trang được tải.

Điều này cũng hoạt động ổn trong Safari, nhưng đôi khi hình ảnh được tải với chiều rộng / chiều cao tối thiểu của nó. Có thể điều này là do kích thước hình ảnh gây ra, tôi không chắc chắn. (Nếu nó tải ổn, hãy thử làm mới vài lần để xem lỗi.)

Bất kỳ ý tưởng nào về cách tôi có thể làm cho nó chống đạn tốt hơn? (Nếu cần JavaScript, tôi cũng có thể sống với điều đó, nhưng CSS thích hợp hơn.)


Sử dụng truy vấn phương tiện CSS3 hoặc trình xử lý sự kiện window.onresize của javascript. w3schools.com/jsref/event_onresize.asp
Shahid

Nếu bạn đang sử dụng bootstrap, hãy thêm một lớp như class này = "img-thumbnail". Đó là tất cả cho nó.
VivekDev

Câu trả lời:


179

Điều này có thể được thực hiện với CSS thuần túy và thậm chí không yêu cầu các truy vấn phương tiện.

Để làm cho hình ảnh linh hoạt, chỉ cần thêm max-width:100%height:auto. Hình ảnh max-width:100%height:autohoạt động trong IE7, nhưng không hoạt động trong IE8 (vâng, một lỗi IE kỳ lạ khác). Để khắc phục điều này, bạn cần thêm width:auto\9cho IE8.

nguồn: http://webdesignerwall.com/tutorials/responsive-design-with-css3-media-queries

CSS:

img {
    max-width: 100%;
    height: auto;
    width: auto\9; /* ie8 */
}

Và nếu bạn muốn thực thi chiều rộng tối đa cố định của hình ảnh, chỉ cần đặt nó bên trong vùng chứa, ví dụ:

<div style="max-width:500px;">
    <img src="..." />
</div>

Ví dụ JSFiddle ở đây . Không cần JavaScript. Hoạt động trong các phiên bản mới nhất của Chrome, Firefox và IE (đó là tất cả những gì tôi đã thử nghiệm).


Tôi đã thử nghiệm liên kết jsfiddle với cả Opera 11 và một số Firefox gần đây và trong khi nó thay đổi kích thước hình ảnh một cách độc đáo khi cửa sổ thu nhỏ, nó không thực hiện được khi cửa sổ phát triển vượt quá 650px
GDR

3
@GDR Tôi sẽ không muốn hình ảnh phát triển vượt quá kích thước ban đầu của nó, nó sẽ chỉ tạo pixel và trông xấu xí. Nếu bạn có nhu cầu làm lớn hơn, tôi chỉ bắt đầu với một hình ảnh lớn hơn.
Kurt Schindler

OK, sau đó tôi đã giả định không chính xác rằng đây là điểm của câu hỏi này, xin lỗi.
CHDC Đức ngày

2
Đặt chiều rộng tối đa thành 100% và chiều cao thành tự động không làm gì đối với tôi - tôi thực sự đã làm việc với một vùng chứa. Bao bọc hình ảnh trong một div, đặt chiều cao / chiều rộng tối đa và để hình ảnh (#div img {}) có chiều rộng là 100% và chiều cao là 100%.
Mave

1
Những loại ma thuật này là?! Điều này thật tuyệt!
Leonardo Wildt

24

2018 và giải pháp mới hơn:

Việc sử dụng các đơn vị tương đối của khung nhìn sẽ giúp cuộc sống của bạn dễ dàng hơn, vì chúng tôi có hình ảnh của một con mèo:

con mèo

Bây giờ chúng tôi muốn con mèo này bên trong mã của chúng tôi, đồng thời tôn trọng tỷ lệ khung hình:

img {
  width: 100%;
  height: auto;
}
<img src="https://www.petmd.com/sites/default/files/petmd-cat-happy-10.jpg" alt="cat">

Cho đến nay không thực sự thú vị, nhưng điều gì sẽ xảy ra nếu chúng ta muốn thay đổi chiều rộng mèo thành tối đa 50% của khung nhìn?

img {
  width: 100%;
  height: auto;
  /* Magic! */
  max-width: 50vw;
}
<img src="https://www.petmd.com/sites/default/files/petmd-cat-happy-10.jpg" alt="cat">

Cùng một hình ảnh, nhưng hiện bị giới hạn ở chiều rộng tối đa50vw vw (= chiều rộng khung nhìn) có nghĩa là hình ảnh sẽ có chiều rộng X của khung nhìn, tùy thuộc vào chữ số được cung cấp. Điều này cũng hoạt động đối với chiều cao:

img {
  width: auto;
  height: 100%;
  max-height: 20vh;
}
<img src="https://www.petmd.com/sites/default/files/petmd-cat-happy-10.jpg" alt="cat">

Điều này hạn chế chiều cao của hình ảnh ở mức tối đa là 20% của khung nhìn.


cảm ơn! Làm cách nào để xác định vh và vw khi tôi có hình ảnh với các kích thước khác nhau?
Herman Toothrot

Xin chào @HermanToothrot, có phải bạn nói rằng bạn muốn giữ nguyên tỷ lệ khung hình khi sử dụng các đơn vị khung nhìn không?
roberrrt-s

@Roberrrt nói rằng tôi có một vài hình ảnh có kích thước khác nhau và nằm trong một khối nội tuyến và muốn giữ nguyên tỷ lệ co của tất cả chúng nhưng đặt chúng ở cùng chiều cao hoặc chiều rộng.
Herman Toothrot

Không có chiều rộng: 100% và chiều cao tối đa: 50vh hoặc nghịch đảo
roberrrt-s

@Roberrrt width: 100% dường như không có nhiều tác dụng. Tôi chỉ phải đoán vh, trong trường hợp của tôi 50 là quá nhiều và 40 tối đa hóa chiều cao của tất cả các hình ảnh.
Herman Toothrot vào

11
window.onresize = function(){
    var img = document.getElementById('fullsize');
    img.style.width = "100%";
};

Trong onresizesự kiện IE được kích hoạt trên mọi thay đổi pixel (chiều rộng hoặc chiều cao) nên có thể có vấn đề về hiệu suất. Trì hoãn thay đổi kích thước hình ảnh trong vài mili giây bằng cách sử dụng window.setTimeout () của javascript.

http://mbccs.blogspot.com/2007/11/fixing-window-resize-event-in-ie.html


6

Đặt thuộc tính thay đổi kích thước thành cả hai. Sau đó, bạn có thể thay đổi chiều rộng và chiều cao như sau:

.classname img{
  resize: both;
  width:50px;
  height:25px;
}

5

Bạn đang sử dụng jQuery?

Bởi vì tôi đã nhanh chóng tìm kiếm các plugin jQuery và chúng dường như có một số plugin để thực hiện việc này, hãy kiểm tra plugin này, sẽ hoạt động:

http://plugins.jquery.com/project/jquery- afterresize

BIÊN TẬP:

Đây là giải pháp CSS, tôi chỉ thêm một style = "width: 100%" và phù hợp với tôi ít nhất là trong chrome và Safari. Tôi không có nghĩa là, vì vậy chỉ cần kiểm tra ở đó và cho tôi biết, đây là mã:

            <div id="gallery" style="width: 100%">
                <img src="images/fullsize.jpg" alt="" id="fullsize" />
                <a href="#" id="prev">prev</a>
                <a href="#" id="next">next</a>
            </div>

1
jQuery là không cần thiết cho một vấn đề đơn giản như vậy. Tại sao tải 50 KB + (toàn bộ thư viện) lại có lợi trên một vài dòng JS?

1
chắc chắn, bạn hoàn toàn đúng, rằng tôi đang s why Ihỏi anh ta, nếu anh ta đang sử dụng jQuery bởi vì nếu anh ta làm vậy có thể là một ý tưởng hay, chỉ cần thêm plugin!
Arthur Neves

vì vậy không có JS thì không thể? Tôi đã tìm thấy giải pháp đơn giản như giải pháp này là unstoppablerobotninja.com/search/… , tuy nhiên, tôi không thể triển khai đầy đủ nó trong mẫu của mình một cách thành công
depi

4

Ban đầu, tôi đang sử dụng html / css sau:

img {
  max-width: 100%;
  height: auto;
  width: auto\9; /* ie8 */
}
<div> 
  <img src="..." />
</div>

Sau đó, tôi đã thêm class="img"vào <div> như thế này:

<div class="img">
  <img src="..." />
</div>

Và mọi thứ bắt đầu hoạt động tốt.



2

Chỉ cần sử dụng mã này. Hầu hết những gì đang nhắm mục tiêu là chỉ định chiều rộng tối đa là chiều rộng tối đa của hình ảnh

img {   
    height: auto;
    width: 100%;
    max-width: 300px;
}

Kiểm tra phần trình diễn này http://shorturl.at/nBKVY


0

Thử

.img{
   width:100vw; /* Matches to the Viewport Width */
   height:auto;
   max-width:100% !important;
}

Chỉ hoạt động với khối hiển thị và khối nội tuyến, điều này không ảnh hưởng đến các mục linh hoạt vì tôi đã dành nhiều thời gian để cố gắng tìm hiểu.

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.