2012-09-25 32 views
5

Tôi muốn bọc hình ảnh vào một html DIV và, vì tôi muốn điều này có thể mở rộng hoàn toàn với kích thước của cửa sổ, tôi muốn đặt chiều rộng của DIV tỷ lệ như sau:Chiều cao sai của trình bao bọc hình ảnh DIV với giá trị độ rộng phần trăm

html

<div id="wrapper"> 
    <img src="http://openclipart.org/people/netalloy/rally-car.svg" /> 
</div> 

css

#wrapper { 
    position: absolute; 
    width: 50%; 
} 

#wrapper img { 
    width: 100%; 
} 

Hình ảnh phải xác định chiều cao của vùng chứa. Điều này là do chiều rộng hình ảnh được đặt thành 100% và chiều cao hình ảnh được tính toán phù hợp để duy trì tỷ lệ khung hình chính xác.

Kết quả là có thể nhìn thấy trên jsfiddle: http://jsfiddle.net/lorenzopolidori/5BN4g/15/

Câu hỏi của tôi là:

  1. Tại sao tất cả các trình duyệt hiện đại làm cho wrapper DIV 5px cao hơn hình ảnh bên trong?
  2. Làm cách nào để thoát khỏi khoảng cách 5px này, trong khi vẫn đặt tất cả các kích thước theo phần trăm và mà không cần bằng javascript?

Đáng ngạc nhiên, điều này xảy ra trong Chrome (21.0.1180.89), Firefox (15.0.1) và IE8, trong khi IE7 hiển thị chính xác, phù hợp với chiều cao của DIV với chiều cao của hình ảnh.

+0

sử dụng đặt lại css có thể giúp bạn – Champ

+0

5 câu trả lời khác nhau mà tất cả hoạt động !!! –

+0

thực sự! cảm ơn tất cả mọi người, tôi nghĩ rằng đó chỉ là vấn đề của những gì người ta thích hơn bây giờ. –

Trả lời

1

OK, không quan trọng về, tôi tìm thấy một giải pháp tốt nhất:

#wrapper img { 
    display: block; 
    width: 100%; 
    border: 1px dashed red; 

}

Thay đổi từ hiển thị mặc định inline đến một màn hình block loại bỏ các vấn đề line-height đi thẳng.

Cách tiếp cận này cũng là ngữ nghĩa đúng vì trong trường hợp này những gì chúng ta thực sự muốn là một hình ảnh duy nhất được bọc trong một DIV mà không cần bất kỳ yếu tố khác trong nó, vì vậy các khái niệm về line-height cần phải được hoàn toàn bị xóa sổ khỏi bằng cách hiển thị hình ảnh như một khối.

Nó hoạt động trên tất cả các trình duyệt chính: http://jsfiddle.net/lorenzopolidori/5Cpf2/3/

0

Tôi nghĩ bạn đã thiết lập thuộc tính căn chỉnh để buộc trình duyệt hiển thị đúng thẻ img.

<div id="wrapper"> 
    <img align="center" src="http://openclipart.org/image/800px/svg_to_png/74557/rally-car.png" /> 
</div> 

DEMO

+0

Nó hoạt động, mặc dù tôi cần thay đổi HTML cho một vấn đề liên quan đến phong cách hơn là chỉ CSS. –

1

................

Hi bây giờ thêm vertical-align:top trong img tag ném bạn css

như như

#wrapper img { 
    width: 100%; 
    border: 1px dashed red; 
    vertical-align:top; // add this line 
} 

live demo

+0

Điều này hoạt động ... kiểm tra giải pháp của tôi Tôi đã đi qua cách tiếp cận khác nhau! –

+0

@AhmadAlfy bạn đã sử dụng để biên giới hộp ví dụ tốt đẹp nhưng nó chỉ làm việc trình duyệt mới nhất và đây là một phần css3 .......... –

+0

Tôi đã sử dụng hộp biên giới chỉ cho các cuộc biểu tình mà thôi. –

1

Kiểm tra này này ra:

http://jsfiddle.net/5BN4g/29/

Đó là một vấn đề line-height :-)

Bạn cần:

#wrapper { 
    width: 60%; 
    background-color: #aaa; 
    margin: 50px auto; 
    line-height:0; 
} 

#wrapper img { 
    width:100%; 
    border: 1px dashed red; 
    box-sizing:border-box; 
} 
​ 

tôi đã sử dụng hộp kích thước để đảm bảo chiều rộng của hình ảnh không tràn container

0

Tôi nghĩ là vì nó không được xem như một Bảng

tôi đã thêm màn hình: bảng trong mã của bạn

Và có vẻ ổn rồi, kiểm tra liên kết

Example Display Table

+0

Điều này không hoạt động trên IE8. Ngoài ra, hiển thị hình ảnh dưới dạng bảng không phải là * ngữ nghĩa * chính xác. Sẽ tốt hơn nếu hiển thị nó dưới dạng một khối, cũng được hỗ trợ bởi IE. –

0

vấn đề của bạn là một hình ảnh - thẻ <img>, để được chính xác - là một yếu tố nội tuyến. Tất cả những gì bạn cần làm là đặt display: block trên hình ảnh và phần đệm thừa sẽ biến mất. Demo.

+0

Cảm ơn, đây là cùng một kết luận tôi đã đến trong câu trả lời của tôi. –

Các vấn đề liên quan