Cách đặt chiều rộng tối đa của hình ảnh trong CSS


84

Trên trang web của mình, tôi muốn hiển thị hình ảnh do người dùng tải lên trong một cửa sổ mới với kích thước cụ thể ( width: 600px). Vấn đề là các hình ảnh có thể lớn. Vì vậy, nếu chúng lớn hơn những thứ này 600px, tôi muốn thay đổi kích thước chúng, giữ nguyên tỷ lệ khung hình.

Tôi đã thử thuộc tính max-widthCSS, nhưng nó không hoạt động: kích thước của hình ảnh không thay đổi.

Có cách nào để giải quyết vấn đề này không?

HTML :

<div id="ImageContainerr">
    <img src="DisplayImage.do?ad_id=${requestScope.advert.id}" class="Image" />
</div>

CSS :

img.Image { max-width: 100%;}
div#ImageContainer { width: 600px; }

Tôi cũng đã thử cài đặt max-width: 600pxcho một hình ảnh, nhưng không hoạt động. Hình ảnh được truyền trực tuyến từ một servlet (nó được lưu trữ bên ngoài thư mục ứng dụng web của Tomcat).


1
nếu bạn muốn nó tự động giảm tỷ lệ, chỉ cần đặt max-width, không đặt max-heightvà nó sẽ hoạt động. Nếu không, hãy đăng mã của bạn để người khác có thể giúp bạn phát hiện vấn đề.
Ray Cheng

2
Tôi vừa thử ví dụ của bạn và nó hoạt động ở đây. Bạn có chắc chắn rằng bạn không có lỗi đánh máy tương tự trong html thực tế của mình ("ImageContainerr") như trong ví dụ này?
Mr Lister

Mẹ kiếp, bạn nói đúng. Tôi đã khởi động lại Tomcat và trình duyệt của mình, thử lại - và nó thực sự hoạt động tốt. Dù sao cũng cảm ơn :) Lỗi đánh máy không đúng - Tôi đã thay đổi id và tên lớp ở đây để nó dễ hiểu hơn.
dùng1315305

3
Từ điều này, tôi cho rằng bạn không sử dụng Firebug hoặc các công cụ dành cho nhà phát triển khác. Tôi khuyên bạn nên lấy cho mình Firebug và học cách sử dụng nó. (Bằng cách kiểm tra hai yếu tố này bạn sẽ have seen that chiều rộng đã không được thêm vào container.)
Joonas

2
Cảnh báo: Câu hỏi này ít có khả năng áp dụng rộng rãi hơn so với xuất hiện ban đầu. Có vẻ như nhiều lượt ủng hộ có thể là do những người ủng hộ đó cũng bỏ sót rằngidở đây không khớp với CSS. Như đã viết (20151201), câu hỏi này tóm tắt là "Bộ chọn CSS không khớp với bất kỳ đối tượng DOM nào sẽ không ảnh hưởng đến giao diện". ; ^) (Không thể hình nếu nó muốn được tốt hơn để chỉnh sửa các câu hỏi để hỏi những gì tiêu đề của nó ngụ ý làm hay không ...)
ruffin

Câu trả lời:


133

Bạn có thể viết như thế này:

img{
    width:100%;
    max-width:600px;
}

Kiểm tra http://jsfiddle.net/ErNeT/ này


Cảm ơn rất nhiều! Điều đó hoạt động hoàn hảo! Chỉnh sửa: Chà, không bắt mắt - nó cũng thay đổi kích thước hình ảnh nhỏ hơn 600px - và đó là điều tôi không muốn.
dùng1315305

3
Tôi đã bỏ phiếu. Những gì OP muốn không phải là những gì bạn cung cấp. Bạn cũng nên nhận ra rằng có thể có vấn đề trong mã của OP gây ra bình thường những gì anh ấy đã cố gắng, sẽ hoạt động .. Ai đã từng bỏ phiếu, cho tôi một lý do, cảm ơn.
Joonas

1
@Lollero OP đầu tiên chỉnh sửa câu hỏi của anh ấy sau câu trả lời của tôi & bạn có thể giải thích điều gì sai trong câu trả lời của tôi không? thanks
sandeep

2
Điều này không duy trì tỉ lệ trong IE
Cocowalla

1
Mục đích của "width: 100%" là gì? Fiddle được liên kết dường như hoạt động tốt mà không có nó? (Đã thử nghiệm trong Firefox và Safari trên Mac OX)
Jon Schneider

12

Tôi thấy điều này chưa được trả lời là cuối cùng.

Tôi thấy bạn có chiều rộng tối đa là 100% và chiều rộng là 600. Lật chúng.

Một cách đơn giản cũng là:

     <img src="image.png" style="max-width:600px;width:100%">

Tôi sử dụng điều này thường xuyên và sau đó bạn cũng có thể kiểm soát các hình ảnh riêng lẻ và không có nó trên tất cả các thẻ img. Bạn có thể CSS nó cũng giống như bên dưới.

 .image600{
     width:100%;
     max-width:600px;
 }

     <img src="image.png" class="image600">

5

Vấn đề là thẻ img là phần tử nội tuyến và bạn không thể hạn chế chiều rộng của phần tử nội tuyến.

Vì vậy, để hạn chế chiều rộng thẻ img trước tiên bạn cần chuyển nó thành một phần tử khối nội tuyến

img.Image{
    display: inline-block;
}

3

Với chiều rộng vùng chứa của bạn là 600px.

Nếu bạn chỉ muốn những hình ảnh lớn hơn vừa với bên trong, hãy thêm: CSS:

#ImageContainer img {
    max-width: 600px;
}

Nếu bạn muốn TẤT CẢ hình ảnh có không gian có sẵn (600px):

#ImageContainer img {
    width: 600px;
}

Ngoài ra, các nhận xét trên OP chỉ ra rằng bạn đang sử dụng sai id trên tệp CSS: div # ImageContainer không giống với <div id = "ImageContainerr">
Leo Armentano

1

Thử đi

 div#ImageContainer { width: 600px; }
 #ImageContainer img{ max-width: 600px}

1
Đó là không đúng. Bộ chọn của bạn có nghĩa là "phần tử img bên trong phần tử Hình ảnh".
Mr Lister

0

Css của bạn gần như đúng. Bạn chỉ thiếu display: block;trong css hình ảnh. Cũng một lỗi đánh máy trong id của bạn. Nó nên được<div id="ImageContainer">

img.Image { max-width: 100%; display: block; }
div#ImageContainer { width: 600px; }
<div id="ImageContainer">
    <img src="http://placehold.it/1000x600" class="Image">
</div>

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.