2011-10-13 20 views
25

Tôi đang sử dụng Thư viện JavaScript Raphaël để tạo các phần tử SVG trong một trang HTML và sử dụng CodeIgniter như một khung công tác PHP. Trong khuôn khổ CodeIgniter tôi cần thêm một thẻ <base> vào phần đầu của tài liệu HTML để sử dụng JS, CSS và hình ảnh, nhưng nó gây ra một vấn đề lạ trong phần tử SVG.Độ phân giải SVG chuyển sang màu đen khi có thẻ BASE trong trang HTML?

Khi tôi sử dụng thẻ <base>, độ dốc không hoạt động. Thay vào đó, đối tượng chuyển sang màu đen. Nó hoạt động giống hệt với các đối tượng đường dẫn đầy ảnh.

Tập lệnh gradient mẫu là here.

+1

Câu trả lời đúng là ở đây ... http://stackoverflow.com/questions/19742805/angular-and-svg-filters – danday74

+1

nếu sử dụng Angular2, giải pháp tại http://stackoverflow.com/a/34535256/3218806 – maxbellec

+0

Và đối với những người sử dụng AngularJS thay vào đó: https://github.com/angular/angular.js/issues/8934#issuecomment-265037833 – Nobita

Trả lời

12

SVG Gradients được định nghĩa trong tài liệu với một id thuộc tính duy nhất, và sau đó tham chiếu từ một yếu tố khác như một URL . Điển hình là các URL mới chỉ là đoạn nhận dạng, ví dụ .:

<defs> 
    <linearGradient id="foo" ...>...</linearGradient> 
</defs> 
<rect fill="url(#foo)" ... /> 

Nếu bạn giới thiệu một yếu tố <base> với một thuộc tính href, bạn thay đổi ý nghĩa của URL như vậy trong tài liệu. Thay vì được tính toán liên quan đến tài liệu hiện tại, chúng được tính toán liên quan đến URI riêng biệt được chỉ định.

+3

là có bất kỳ giải pháp để loại trừ svg từ thẻ cơ sở –

+3

anyway im sẽ chấp nhận câu trả lời của bạn nhưng xin vui lòng cho tôi biết nếu bạn biết một cách để ngăn chặn vấn đề này mà không cần loại bỏ thẻ cơ sở –

+0

@ AhmetYıldırım Bạn có thể thử sử dụng URL đầy đủ vào trang của bạn bằng thẻ SVG, ví dụ: 'fill =" url (http://mydomain.com/foo/bar.html#gradient) "'. Tuy nhiên, tôi khuyên bạn nên sửa CodeIgniter để không yêu cầu thẻ ''. Tại sao bạn cần điều này? – Phrogz

0

định nghĩa độ dốc của bạn là nhận được hỏng Cũng đôi khi có những vấn đề với Opera cho tập quán nhất định của các đối tượng Gradient điền

+0

Vui lòng gửi lỗi trên Opera tại đây: http://bugs.opera.com/wizard. Và xin vui lòng bao gồm một testcase, hoặc một liên kết đến một. Cảm ơn :) –

4

cũng thấy báo cáo lỗi sau: https://bugzilla.mozilla.org/show_bug.cgi?id=652991

rõ ràng, khái niệm về tham khảo (gradient fill hoặc đánh dấu kết thúc, tôi nghi ngờ, quá) bằng URL là vấn đề đối với các ứng dụng AJAX kiểu đó cũng sử dụng lịch sử .pushState().

0

Tôi gặp vấn đề tương tự - gradient được hiển thị màu đen trong Chrome, nhưng tôi thậm chí không có thẻ <base>.

Thay đổi

<stop offset="1" style="stop-color:#F26722"/> 

để

<stop offset="1" stop-color="#F26722"/> 

dường như khắc phục vấn đề.

Một lỗi không liên quan khác là Chrome không thể phân tích cú pháp transform="translate(...)" trên các yếu tố <g>, tôi phải di chuyển chúng sang từng cá nhân <path> -s.

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