2012-07-02 45 views
86

Tôi muốn đặt màu nền mặc định cho toàn bộ tài liệu SVG, thành màu đỏ chẳng hạn.Màu nền mặc định của phần tử gốc SVG

<svg viewBox="0 0 500 600" style="background: red">/* content */</svg> 

Các giải pháp trên công trình nhưng sở hữu nền của thuộc tính style là tiếc là không một tiêu chuẩn một: http://www.w3.org/TR/SVG/styling.html#SVGStylingProperties, và vì vậy nó được loại bỏ trong quá trình làm sạch với SVG Cleaner.

Có cách nào khác để khai báo màu nền này không?

+1

Có lẽ cũng có lỗi trong trình dọn dẹp SVG không? Nó cũng loại bỏ các khối kiểu nội tuyến, mặc dù chúng là tiêu chuẩn: http://www.w3.org/TR/SVG/styling.html#StylingWithCSS –

Trả lời

61

SVG 1.2 Tiny có viewport-fill Tôi không chắc chắn việc triển khai rộng rãi thuộc tính này như thế nào khi hầu hết các trình duyệt đang nhắm mục tiêu SVG 1.1 tại thời điểm này. Opera thực hiện nó FWIW.

Một giải pháp hơn qua trình duyệt hiện nay sẽ được dính vào một yếu tố <rect> với chiều rộng và chiều cao của 100% và điền = "red" là đứa con đầu lòng của <svg> yếu tố

+14

Loại công việc hack trực tuyến, nhưng nó giả định rằng tỷ lệ khung hình của svg luôn khớp với chế độ xem mà nó nhận được, vì vậy nó sẽ không lấp đầy toàn bộ khung nhìn trong mọi tình huống. Vui lòng mã số –

+2

, mã – Martian2049

+1

Dưới đây là mã ví dụ về điều này: https://stackoverflow.com/a/47295360/6747994 – JoKalliauer

1

workaround khác có thể được sử dụng <div> có cùng kích thước để bọc <svg>. Sau đó, bạn sẽ có thể áp dụng "background-color""background-image" sẽ ảnh hưởng đến svg.

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

<style type="text/css"> 
.background{ 
    background-color: black; 
    /*background-image: */ 
} 
</style> 
+12

Giải pháp này là một bản hack HTML. Và có thể chỉ hoạt động nếu bạn đang sử dụng SVG vào một trang web. Đây không phải là giải pháp SVG thực sự. –

+0

Màu nền của SVG được mượn từ thành phần mà nó đang ngồi. (Giống như svg mượn màu trang và màu trang mặc định là màu trắng). Bằng cách nào đó tôi không nghĩ rằng đó là một hack. – clinux

+0

@clinux: Những gì Charles đang cố gắng nói là, nó hoạt động hoàn hảo để hiển thị trang web nhưng giả sử bạn muốn sử dụng cùng svg như một hình ảnh có phần mở rộng .svg để hiển thị ở nơi khác, nó có thể không hoạt động. –

27

Tìm thấy tính năng này hoạt động trong Safari. Chỉ có màu SVG với màu nền, trong đó hộp giới hạn của phần tử bao trùm. Vì vậy, cung cấp cho nó một biên giới (đột quỵ) với một ranh giới điểm ảnh bằng không. Nó lấp đầy trong toàn bộ điều cho bạn với màu nền của bạn.

<svg style='stroke-width: 0px; background-color: blue;'> </svg>

+3

Điều này cũng làm cho tất cả các phần tử con đều có chiều rộng bằng 0, do đó, nó không phải là tùy chọn "nền" tốt. – duanev

9

Tôi hiện đang làm việc trên một tập tin như thế này:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<?xml-stylesheet type="text/css" href="style.css" ?> 
<svg 
    xmlns="http://www.w3.org/2000/svg" 
    version="1.1" 
    width="100%" 
    height="100%" 
    viewBox="0 0 600 600"> 
... 

Và tôi đã cố gắng để đưa điều này vào style.css:

svg { 
    background: #bf1f1f; 
} 

làm việc trên Chromium và Firefox, nhưng Tôi không nghĩ rằng đó là một thực hành tốt. EyeOfGnome xem ảnh không làm cho nó, và Inkscape sử dụng một không gian tên đặc biệt để lưu trữ một nền tảng như:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<svg 
    xmlns="http://www.w3.org/2000/svg" 
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 
    version="1.1" 
    ... 
    <sodipodi:namedview 
    pagecolor="#480000" ... > 

Vâng, có vẻ như phần tử gốc SVG không phải là một phần của paintable elements trong recommandations SVG.

Vì vậy, tôi khuyên bạn nên sử dụng "rect" solution provided by Robert Longson vì tôi đoán rằng đó không phải là "hack đơn giản". Nó có vẻ là cách tiêu chuẩn để đặt nền bằng SVG.

+2

lúc đầu giải quyết vấn đề cho eog – nvrandow

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