2013-04-04 19 views
8

Tôi đang gặp phải sự cố lạ.Div chứa canvas có lề dưới kỳ lạ là 5px

trong ngắn hạn:

Khi chúng tôi đặt một canvas trong một div và thiết lập kích thước của khung hình, các div là tự động 5px lớn hơn vải trong khi tôi mong đợi nó để có được kích thước chính xác như vậy.

câu hỏi này là sau đây của this answer vì vậy tôi sẽ lấy ví dụ tương tự, sự cố đã được sao chép trong firefox và trong google chrome. (không thử các trình duyệt khác)

<div> 
    <canvas height="300px" width="200px"></canvas> 
</div> 

CSS:

div { 
    border: 2px solid blue; /* demo purposes */ 
    display: inline-block; 
} 
canvas { 
    background-color: khaki; /* demo purposes */ 
} 

kết quả (xem khoảng trắng trong div):

result

Bạn cũng có thể thấy điều này ví dụ giống hệt nhau (rất đơn giản) trong this JSfiddle

Tại sao điều này xảy ra và chúng ta có thể ngăn chặn nó như thế nào?

Trả lời

14

Bạn có thể ngăn điều đó xảy ra bằng cách thêm display: block vào css cho phần tử canvas.

ví dụ:

canvas { 
    background-color: khaki; /* demo purposes */ 
    display: block; 
} 
+0

cảm ơn, nhưng tôi muốn biết thêm về nó, nếu tôi không đặt màn hình hiển thị để chặn, giá trị hiển thị mặc định là gì và tại sao nó làm một không gian trống dưới canvas? – Guian

+2

Không gian xuất hiện do mô hình định dạng nội tuyến. Đó là một chủ đề phức tạp mà tôi không hoàn toàn hiểu bản thân mình nhưng bạn có thể đọc về nó [ở đây] (http://reference.sitepoint.com/css/inlineformatting) và [ở đây] (http://meyerweb.com/ eric/css/inline-format.html). –

+5

+1, bạn hoàn toàn đúng! Không gian ở dưới cùng là khoảng trắng thực được hiển thị. Nếu bạn đặt [line-height' thành 0] (http://jsfiddle.net/kpdgQ/) thì không gian cũng biến mất. – Jeroen