2011-11-01 22 views
5

Tôi muốn viết một hình chữ nhật đơn giản với một bóng màu đỏ trong SVG. Tôi có một bộ lọc đơn giản:SVG: màu của bóng

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1012" height="400"> 
    <title>svg arrow with dropshadow</title> 
    <desc>An svg example of an arrow shape with a dropshadow filter applied. The dropshadow filter effect uses feGaussianBlur, feOffset and feMerge.</desc> 
    <defs> 
    <filter id="dropshadow" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> 
    <feComponentTransfer in="SourceAlpha"> 
     <feFuncR type="discrete" tableValues="1"/> 
     <feFuncG type="discrete" tableValues="0"/> 
     <feFuncB type="discrete" tableValues="0"/> 
    </feComponentTransfer> 
    <feGaussianBlur stdDeviation="2"/> 
    <feOffset dx="0" dy="0" result="shadow"/> 
    <feComposite in="SourceGraphic" in2="shadow" operator="over"/> 
    </filter> 
    </defs> 
    <rect rx="2" ry="2" fill="rgb(255,255,255)" x="5.25" y="5.25" width="141" height="50" fill-opacity="0.85" filter="url(#dropshadow)"> 
</svg> 

Tại sao màu bóng này không phải là màu đỏ? Đâu tệ?

+0

http://dev.opera.com/articles/view/svg-evolution-3-applying-polish/ ? page = 2 Bạn có thể che phủ hình ảnh bộ lọc nguyên thủy với hình ảnh thực, để đạt được nó. tôi đã sử dụng nó theo cách đó. – Kris

Trả lời

7
  1. Bạn đã cung cấp SVG không hợp lệ - bạn cần đóng phần tử <rect> của mình.

  2. Ví dụ của bạn (cố định) hiển thị bóng đỏ cho tôi trong Chrome. Đây là những gì this URL trông giống như đối với tôi với Chrome v15:

    A light pink box with red border and shaodw

gì OS/trình duyệt/phiên bản là bạn nhìn thấy kết quả khác nhau với ai?

Chỉnh sửa: Trong Firefox v7 Tôi thấy tất cả màu xám, và trong Safari v5, tôi không thấy hiệu ứng đổ bóng nào cả. Câu trả lời của bạn, rất có thể là, chỉ đơn giản là bạn đang thử nghiệm trong một trình duyệt/phiên bản với sự hỗ trợ không đầy đủ của đặc tả bộ lọc SVG.

+1

Safari không hỗ trợ các bộ lọc cho đến phiên bản 6, xem http://caniuse.com/#feat=svg-filters. –

+1

Tôi cho rằng nó không tạo ra màu đỏ do http://www.w3.org/TR/SVG11/filters.html#SourceAlpha. SourceAlpha -> màu đen tiềm ẩn (# 000) + alpha. Nó hoạt động trong Opera và Chrome nếu bạn thay thế 'in =" SourceAlpha "' bằng 'in =" SourceGraphic "'. –

+0

Vấn đề với Firefox là nó đã từng có một lỗi mà nó sẽ không xử lý một feFunc riêng biệt với một giá trị duy nhất. Nó có thể được làm việc xung quanh bằng cách sử dụng hai giá trị ví dụ. tableValues ​​= "1 1". Điều này đã được sửa chữa khoảng 18 tháng trước. –

18

Đối với những người tìm kiếm một giải pháp chung, điều này làm việc cho tôi bên trong một phần tử:

<feGaussianBlur in="SourceAlpha" stdDeviation="1.7" result="blur"/> 
<feOffset in="blur" dx="3" dy="3" result="offsetBlur"/> 
<feFlood flood-color="#3D4574" flood-opacity="0.5" result="offsetColor"/> 
<feComposite in="offsetColor" in2="offsetBlur" operator="in" result="offsetBlur"/> 
+0

tôi nhận được kết quả khá với feFlood và fecomposite này – crapthings