2011-01-21 34 views
12

ai đó có thể giải thích lý do tại sao tôi nhìn thấy một thanh cuộn dọc trong Chrome và IE9 với đánh dấu sau:Tại sao có một thanh cuộn dọc trên svg của tôi ở mức 100%?

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Fullscreen SVG</title> 

    <style> 
     html,body { 
     margin: 0px; padding: 0px; 
     width: 100%; height: 100%;  
     } 

     .fullscreen { 
     width: 100%; height: 100%; 
     } 
    </style> 
    </head> 
    <body> 
    <svg class="fullscreen"></svg> 
    </body> 
</html> 

Nếu tôi thay thế svg với một div nó hoạt động hoàn hảo. Nhưng nếu tôi đặt svg bên trong div rằng, cách bố trí được chia lại:

<div class="fullscreen"> 
    <svg></svg> 
</div> 

Thay đổi loại tài liệu để XHTML dường như để sửa chữa các vấn đề:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

nhưng SVG nội tuyến là một phần của HTML5 để ...

Trong thời gian chờ đợi, tôi cũng đã nộp bug report.

Trả lời

21

Tôi hơi muộn ở đây, nhưng tôi tình cờ gặp vấn đề này khi tôi đang cố giải quyết một vấn đề khác.

Tôi không nghĩ những gì bạn đang gặp phải là lỗi. Thẻ SVG là một phần tử nội dòng theo mặc định (đối với bản ghi, các thẻ IMG cũng vậy) và các DIV được coi là các phần tử khối. Tôi đang ném ra một chút ở đây bởi vì bạn không có nghĩa vụ để có thể thiết lập chiều cao/chiều rộng cho các đối tượng nội tuyến (Nếu bạn đã cố gắng để làm điều này trên một SPAN, chiều cao/chiều rộng được bỏ qua).

Bạn có thể xem xét cách giải quyết khác này, nhưng đặt rõ ràng thuộc tính hiển thị để chặn xóa thanh cuộn. Việc thả phần tử SVG cũng sẽ sửa lỗi này.

.fullscreen { display: block } 

Dường như DOCTYPE HTML5 dựa trên DOCTYPES nghiêm ngặt của W3C (không phải chuyển tiếp). Cả hai khai báo nghiêm ngặt cũng hiển thị thanh cuộn.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

Vì vậy, tại thời điểm này, nó có thể là tốt nhất để đề cập đến một cuộc thảo luận khác nhau nếu bạn quan tâm đến doctypes quá độ nghiêm ngặt vs: Browser Rendering Difference Between strict/transitional DOCTYPEs

Hy vọng rằng đây sẽ thêm một ít giá trị để đánh giá cho các cuộc thảo luận.

+0

Thật kỳ lạ khi tôi có thể đặt chiều rộng và chiều cao thành phần tử nội tuyến. và nó lớn hơn khi nó được khai báo là khối. Cảm ơn gợi ý. Kiểm tra svg css được tính trong Chrome dev. công cụ thực sự cho thấy rằng nó là nội tuyến theo mặc định. – Jan

0

Có thể thử đặt lại lề và đệm trên thẻ svg, giống như bạn đã thực hiện với html và nội dung. Có thể là một số kiểu mặc định trên svg.

+0

không, đã thử điều đó, tìm thấy một số hành vi lạ hơn: svg bên trong div cũng gây ra sự cố. – Jan

5

Giải pháp đơn giản nhất là chỉ cần thêm quy tắc CSS overflow:hidden vào html và/hoặc thẻ body.

html, body { overflow:hidden; } 

Sửa

Một giải pháp khác sẽ bao gồm việc sử dụng DOCTYPE XHTML. Điều này làm việc trong Chrome, và tôi nghi ngờ nó hoạt động trong IE9.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
+2

Đó không phải là một giải pháp, đó là một giải pháp. Tôi không muốn cách giải quyết, tôi có thể tự mình tìm ra. Tôi đang tìm kiếm cho dù có một lý do cho hành vi này hoặc nó là một lỗi. Tôi sẽ cung cấp cho bạn +1 vì điều này có thể tốt cho một người có cùng vấn đề và tìm kiếm câu trả lời thực tế. – Jan

+0

Đường thẳng của nó giữa giải pháp và giải pháp thay thế. Nếu bạn đặt một tài liệu thích hợp trong ví dụ của bạn, nó sẽ hiển thị mà không có thanh cuộn Hoặc ít nhất là trong Chrome, tôi chưa cài đặt IE9. –

+2

'' là một loại tài liệu thích hợp, tôi muốn sử dụng HTML5. – Jan

0

Âm thanh như câu hỏi CSS cho tôi, bạn đã kiểm tra these answers chưa?

14

Để xây dựng dựa trên câu trả lời của Corey, các yếu tố inline hoặc inline-block được gọi là "nội tuyến" bởi vì chúng được dự định được sắp xếp giữa các dòng văn bản. Vì vậy, bất cứ nơi nào chúng xuất hiện, không gian được dành riêng cho "gốc", đó là khu vực bên dưới một dòng văn bản, nơi các phần của chữ thường g, j và y của chữ thường là dangly.

Vì vậy, đó là nơi có thêm không gian từ khi phần tử svg của bạn có display: inline. Bạn có thể điều chỉnh lượng không gian dành riêng cho thuộc tính line-height hoặc bạn có thể xóa toàn bộ không gian bằng cách đặt display: block, như Corey lưu ý.

Tôi tin rằng bạn có thể đặt chiều cao và chiều rộng trên các yếu tố imgsvg vì chúng ở dạng CSS, "thay thế" và hoạt động hơi khác so với các yếu tố nội tuyến thông thường. The CSS spec giải thích cách hoạt động này chi tiết hơn. Và theo như thông số kỹ thuật, nó thực sự khá dễ đọc.

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