2011-06-30 26 views
5

Tôi sử dụng mã bên dưới để nhúng SVG vào HTML5. Vấn đề duy nhất bây giờ tôi không thể giải quyết là có nhiều không gian giữa <svg><td> khi tệp HTML được xem trong trình duyệt. Ai đó có thể cho tôi biết làm thế nào để loại bỏ không gian?Cách xóa không gian giữa <svg> và <td> trong HTML5?

Cảm ơn bạn trước!

Chi tiết khác:

Xin lỗi, tôi quên nói tôi đang sử dụng trình duyệt nào. Tôi thấy rằng khi tôi sử dụng IE9, có nhiều khoảng trống giữa SVG và thanh bên trái và bên phải. Tuy nhiên, khi tôi sử dụng Chrome, có nhiều khoảng trống giữa SVG và thanh trên cùng và dưới cùng. Nó khá kỳ lạ.

Tôi chỉnh sửa mã bên dưới. Tôi thêm svg {margin-top: 0px; margin-bottom: 0px; lề phải: 0px; lề trái: 0px; màu nền: màu vàng;}

trong mã. Những gì tôi muốn làm là để loại bỏ các không gian màu vàng. Bây giờ câu hỏi trở nên cụ thể hơn.


<!DOCTYPE html><html> 
<head> 

<title>SarShips: scs</title> 
<style type="text/css"> 

table 
{ 
border-collapse:collapse; 
} 
table, td, th 
{ 
border:1px solid black; 
} 

table {margin-left:auto;margin-right:auto} 
tr.odd {background-color:#E0E0F0} 
tr.even {background-color:#F0F0FF} 
th {font:22px sans-serif;background-color:#98AFC7;color:white;padding:6px} 
td.e {font:bold 15px serif;text-align:right;padding:4px} 
td.v {font:15px monospace;text-align:left;padding:4px} 
td.i {padding:4px} 
p {text-align:center} 
     svg {margin-top:0px; 
      margin-bottom:0px; 
      margin-right:0px; 
      margin-left:0px;background-color:yellow;} 
</style> 
</head> 
<body> 
<table> 
<thead> 
<tr> 
<th>Parameters</th><th>Imagette</th><th>Profile</th><th>Remarks</th> 
</tr> 
</thead> 
<tbody> 
<tr> 
<td> 

</td><td class="i"></td> 

<td class="i"> 
<svg width="100%" height="100%" viewBox="0 0 400 400" > 
<g> 
<rect width="400" height="400" style="stroke-width:1;   stroke:rgb(0,0,0)"></rect> 
<circle cx="200" cy="200" r="200" stroke="green" stroke-width="2"></circle> 
<circle cx="200" cy="200" r="160" stroke="green" stroke-width="2"></circle> 
<circle cx="200" cy="200" r="120" stroke="green" stroke-width="2"></circle> 
<circle cx="200" cy="200" r="80" stroke="green" stroke-width="2"></circle> 
<circle cx="200" cy="200" r="40" stroke="green" stroke-width="2"></circle> 
<path d="M250 150 L150 350 L350 350 Z" style="fill:rgb(0,0,255);stroke-width:1;   stroke:rgb(0,0,0)"></path> 
<path d="M200,200 L200,0 A200 200 0 0 1 200 400 Z" style="fill:green;stroke:green;stroke-width:5;   fill-opacity:0.5;stroke-opacity:0.9"></path> 
<path d="M150 250 S150 150 170 170 L220 150Z" style="fill:pink;stroke:blue;stroke-width:1;   fill-opacity:0.9;stroke-opacity:0.9"></path> 
</g> 
</svg> 
</td><td></td> 
</tr> 

</tbody> 
</table> 
</body> 
</html> 
+0

Bao nhiêu không gian? 4px, giống như phần đệm bạn đã đặt trên 'td.i'? –

+0

Chỉ định trình duyệt nào bạn sử dụng sẽ không bị tổn thương. Tôi đoán rằng đó là Firefox, từ những gì tôi có thể nói không có trình duyệt khác hỗ trợ trộn HTML và SVG như thế nào được nêu ra. –

+0

jsFiddle để chơi với tại http://jsfiddle.net/BJgRT/ –

Trả lời

23

SVG là nội tuyến và bên trong ô bảng, vì vậy, hãy thử thêm display:block đến svg và chiều rộng/chiều cao đến <td> để SVG biết cách tính phần trăm.

+0

Hi Spadar, tôi đã thử theo cách của bạn và vùng màu vàng trở nên nhỏ hơn. Cảm ơn nhiều. – user811416

+0

Bạn được chào đón. Nếu điều này giúp bạn có thể đánh dấu nhận xét này là giải pháp được chấp nhận;) –

+0

Xin lỗi, Sapdar. Danh tiếng của tôi không đủ cao, vì vậy tôi không thể bỏ phiếu ... – user811416

1

tôi giả sử rằng bạn có nghĩa là không gian bên dưới hình ảnh SVG vì nếu không nó chỉ là 4px bạn muốn. Không gian bên dưới đến từ khoảng trắng mà ô bảng chứa ngoài hình ảnh của bạn. Bạn có thể dễ dàng "sửa chữa" này bằng cách thay đổi chiều cao văn bản:

td.i {padding:4px;line-height:0px;} 
+0

Xin chào Palant, tôi đã thử mã của bạn trong Chrome nhưng nó không hoạt động. Tôi nghĩ lý do có thể là "line-height" không được hỗ trợ trong html5. – user811416

+1

@ user811416: Không, đó là vì bạn đặt 'chiều rộng' /' chiều cao 'của hình ảnh SVG thành '100%' - của thực tế? Nếu bạn đặt kích thước cố định cho hình ảnh SVG của mình hoặc nếu bạn xác định kích thước cho ô bảng chứa tất cả mọi thứ sẽ hoạt động chính xác. Btw, nó sẽ không bị tổn thương nếu bạn bắt đầu trả lời câu hỏi - tôi không thích đoán bạn đang sử dụng trình duyệt nào và bạn có ý nghĩa gì với trình duyệt đó. –

+0

@ user811416 Bạn cũng có thể sửa chữa nó bằng cách làm cho 'svg' thành phần cấp khối. Ngoài ra, Wladimir là chính xác - một trong những tính năng xác định của bảng là chúng tự động mở rộng để chứa nội dung của chúng, nếu bạn muốn sử dụng '100%' để định kích thước hình ảnh của bạn, bạn phải có một thùng chứa kích thước xác định cho hình ảnh của bạn để đi vào cho '100%' để có nghĩa là bất cứ điều gì. – robertc

2

tôi thay đổi

svg {margin-top: 0px;
margin-bottom: 0px;
lề phải: 0px;
margin-left: 0px; background-color: màu vàng;}

svg {margin-top: 0px;
margin-bottom: 0px;
lề phải: -150px;
lề trái: 0px; màu nền: màu vàng;}

Sau đó, không gian màu vàng biến mất trong IE9. Giải pháp này không hoạt động trong Chrome ...

1

Điều này có vẻ là vấn đề với kích thước SVG mặc định của webkit là 350px x 150px.

Đây có lẽ là bài viết yêu thích của tôi về nó được nêu ra: http://henkelmann.eu/2010/12/16/display_svg_image_same_size_in_decent_browsers

Vì vậy, vấn đề là bạn cần phải hoặc là thiết lập một kích thước pixel cứng nhắc cho svg của bạn, hoặc thiết lập một kích thước cứng nhắc của container của bạn.Tôi đã không tìm thấy một cách để cho phép mở rộng năng động (trừ khi bạn làm điều đó trong javascript, mà một giải pháp có thể được tìm thấy trong các ý kiến ​​ở đây: How do I scale a stubborn SVG embedded with the <object> tag?).

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