Bunu yapmanın en kolay yolu, içinde dairesel delik bulunan bir maske oluşturmak ve arkasındaki bir dikdörtgeni canlandırmaktır. Örnek: burada
<path fill="#fff" fill-rule="evenodd"
d="M0 0 200 0 200 200 0 200ZM20 100 A80 80 0 0 0 180 100 80 80 0 0 0 20 100Z"/>
yol verileri 200 adet geniş bir kare kutu (M0 0 200 0 200 200 0 200Z
) ile başlar ve daha sonra (A80 80 0 0 0 180 100 80 80 0 0 0 20 100Z
) iç çapı, 80 adet daire çizmek için iki yay kullanır. evenodd
doldurma kuralı, dairenin kareden kesilmesini sağlar. Eğer alttan üste doldurmak için daireyi isterseniz
, o zaman bir rotate
dönüşümü kullanmak gerekecektir: Bu SVG görüntüsünün ortalarında koordinat sistemini spin
<rect transform="rotate(180 100 100)" x="20" y="20" width="160" height="0" fill="#47f" id="fillup"/>
böylece rect yüksekliğini artırdığınızda yukarı doğru büyür. Burada, üzerine geldiğinizde rect'in yüksekliğini değiştirmek için bir CSS geçişi kullanıyorum. Ama ne istersen boyunu değiştirmek için Javascript'i veya JQuery'yi kullanabilirsiniz.
svg #fillup { height:0px; transition:height 0.5s; }
svg:hover #fillup { height:160px; }
<svg width="200" height="200" viewBox="0 0 200 200">
<rect x="10" y="10" width="180" height="180" fill="#eee"/>
<rect transform="rotate(180 100 100)" x="20" y="20"
width="160" height="0" fill="#47f" id="fillup"/>
<path fill="#fff" fill-rule="evenodd"
d="M0 0 200 0 200 200 0 200ZM20 100 A80 80 0 0 0
180 100 80 80 0 0 0 20 100Z"/>
<circle cx="100" cy="100" r="90" fill="none" stroke="#888"
stroke-width="20"/>
<circle cx="100" cy="100" r="99" fill="none" stroke="#333"
stroke-width="1"/>
<circle cx="100" cy="100" r="80" fill="none" stroke="#333"
stroke-width="1"/>
</svg>
Teşekkürler Holger Will ... svg'deki canavar sizsiniz ... –
Bunu css ile yapmanın bir yolu var mı? Örneğini kullandım ve sevdim, ama sonra IE'nin SMIL'i desteklemediğini öğrendim – gkkirsch