SVG Eğitimi
(svg-tutorial.com)- HTML içinde görselleri doğrudan kodla çizmeye yönelik bir SVG öğrenme kaynağı; temel şekillerden etkileşime kadar adım adım takip edilebiliyor
- Öğrenme akışı,
viewBox,polygon,polylinegibi temel öğelerdenpath, Bézier eğrileri ve arc yapısına doğru genişliyor - Dönüşüm bölümü döndürme, taşıma, yeniden kullanım, ölçekleme ve genel dönüşümleri ele alırken; CSS bölümü animasyon, hover, yol tabanlı animasyon ve CSS içinde inline SVG kullanımını kapsıyor
- İleri konularda metin,
clip-path, gradyanlar işleniyor; JavaScript ile gerçek zamanı gösteren saat, etkileşim, veri odaklı diyagram ve çoklu bileşenlere ayırma pratikleri yapılıyor line,circle,rect,polyline,polygon,textile quadratic/cubic Bézier curve ve arc için editör bağlantıları da sunuluyor; böylece her öğe doğrudan denenebiliyor
Eğitim içeriği
- TLDR: SVG Tutorial Summary: Tüm eğitimin özeti
-
SVG temelleri
-
pathöğesi -
Dönüşümler
-
SVG ve CSS
-
İleri konular
-
SVG ve JavaScript
Uygulama için SVG öğeleri ve path segmentleri
- SVG öğelerine özel editörlerle temel şekilleri doğrudan deneyebilirsiniz
pathöğesi, karmaşık şekilleri birden fazla path segment ile oluşturur
1 yorum
Hacker News yorumları
SVG + React kombinasyonu hafife alınıyor. React’in soyutlamasını ve gücünü aynen kullanırken DOM yerine keyfî grafikler render edebiliyorsunuz; grafik veya chart render etme gibi bazı kullanım alanlarında Canvas’tan çok daha iyi olduğunu düşünüyorum.
Piksel düzeyinde müdahale gibi grafiksel olarak karmaşık bir şeye ihtiyacınız yoksa ve yalnızca biraz etkileşim gerekiyorsa özellikle iyi. Canvas’ta hover efekti yapmak için farenin hangi öğenin üzerinde olduğunu kendiniz hesaplamanız gerekir, bu da zahmetli; SVG’de ise
onmouseovergibi yerleşik özellikleri kullanabilirsiniz.Yön gösterecek veya ilham verecek çalışan örnekler olsa güzel olurdu.
Genel olarak harika bir kaynak ve örnekler gerçekten çok net. Ancak clip-path bölümünde önerilen kod büyük daireyi iki kez tanımlıyor; dairenin boyutunu değiştirmek için iki yeri düzenlemek gerekiyor.
Zaten
defskullanıldığına göre, aynı tanımı yeniden kullanacak şekilde yazmanın daha iyi olduğunu düşünüyorum.clipPathiçinde referanslamak yeterli.Kişisel olarak
<g>ile sarmalamayı da çıkarmak isterdim. Böyle bir yapının neden önerildiğini hiç anlamadım;<defs>içinde değilse render edilecek öğeleri koymak isteyeceğiniz çok nadir durumlar dışında bir kazancı yok gibi görünüyor. Örnektekidefs/circlegibi durumlarda genelde<symbol>kullanmak doğru olur.Gerçekten harika. SVG temiz ve esnek bir format; devam eden yan projemle doğrudan ilgili olduğu için bu öğreticiyi zaman ayırıp takip etmeyi düşünüyorum.
Diğerleri gibi SVG tabanlı React bileşenleri yapmak bana da oldukça eğlenceli geldi. React ve JSX etkileşim eklemeyi kolaylaştırıyor; SVG ise yalnızca HTML ile kolayca yapılamayacak arayüzleri mümkün kılıyor.
Müzik teorisi yan projem için etkileşimli bir Circle of Fifths render eden React bileşenini yayımlamıştım. Hâlâ yapılacak çok iş var ama kullanılabilir durumda: https://github.com/epiccoleman/react-circle-of-fifths
SVG ile Circle of Fifths yapma sürecini anlatan bir yazı da yazdım; karmaşık öğeleri çizme sürecini adım adım izleyen ara açıklama kısmını özellikle seviyorum: https://epiccoleman.com/posts/2023-04-05-svg-circle-of-fifth...
Şimdi benzer bir yaklaşımla fretboard diyagramı oluşturucu yapıyorum; eski yazıya tekrar başvuru kaynağı olarak bakabilmek faydalı oluyor. Çalışmayı yazıya dökmenin güzel yanı, bir problemi nasıl çözdüğünüzü “yeniden oynatabilmek”.
Bu kaynağı beğendim. React’te birkaç inline SVG yapıp etkileşim ekledim; kurcalaması gerçekten çok eğlenceli.
Özellikle
<foreignObject>etiketi kullanışlı. SVG içine normal HTML koyabiliyorsunuz; böylece bağlantılar, görseller, temel flexbox stillendirmesi gibi HTML’in daha iyi yaptığı işleri SVG sanat projesinin içinde halledebiliyorsunuz.Yazara ek olarak: sitedeki bazı bağlantılar çalışmıyor. Sayfanın altındaki bio.link ve Day 11 “How to Draw Quadratic Bézier Curves with SVG” içindeki etkileşimli Bézier eğrisi demosu bağlantısı kapalı.
bio.link tarafında bir sorun göremiyorum; hangi hatayı gördüğünü merak ettim.
/svg/patholarak verilmiş, 404 veriyor; doğru bağlantı/svg/usegibi görünüyor.foreignObject’i ben de bilmiyordum, gerçekten güzelmiş.Birkaç yıl önce arayüz üzerinde çalışırken grafiklerin bir kısmında SVG kullanıyordum. İki renk şeması vardı ama grafiklerden biri yalnızca bir şemadaydı; bu yüzden diğer rengin hex kodunu almak için koridorun karşısına gittim.
Tasarımcının SVG dosyasını açıp ikinci rengi oluşturmak için yalnızca tüm renkleri bulup değiştirdiğini görünce çok şaşırmıştım.
Harika. Özellikle hâlâ zorlandığım eğriler ve clipping örneklerini beğendim.
Kişisel olarak neredeyse her şeyi yapabilen ve diğer yöntemlerden daha az laf kalabalığı olan
path’i tercih ediyorum.Uzun zamandır öğreniyorum ama hâlâ öğrenecek çok şeyim olduğunu hissediyorum. Çizimde gerçekten kötüyüm ve görselleri de pek sevmiyorum; bu yüzden kolaylık ve performans için yan projemin tamamını SVG ile yaptım.
Bugünkü kaynağı gördükten sonra epey refactor etmem gerekecek gibi: https://eddiots.com/1
İyi geri bildirimler için teşekkürler; bulunan birkaç hatayı düzelttim. Hâlâ çalışmayan bir şey varsa haber verirseniz sevinirim. Hâlâ biraz son rötuş aşamasındayım
Örneğin Twitter’da küçük resim önizlemesinin neden çalışmadığını bilen var mı? Alt sayfalarda düzgün çalışıyor
Çok iyi. Şu anda boğuştuğum sorun metin + görsel olduğu için, bununla ilgili bir iki örnek olsa güzel olurdu
Hizalama gerçekten baş ağrıtıcı. Inkscape’i de denedim ama ihtiyacım olan şeyi yapmak için kesinlikle “XML’i doğrudan yazmaya” daha yakın
text-anchorı biliyorum: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/t...Ayrıca burada birisi
foreignObjectetiketinin yararlı olabileceğini önermişti: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/for...svgwriteile tablo üreten Python kodunu aceleyle yazmıştım; metni istediğim konuma yerleştirmek tam bir cehennemdiSonunda çeşitli değerleri kabaca ayarlayıp “bu kadarı yeterli” diyerek bıraktım. Önemsiz olmayan metin yerleşimi örneklerine ihtiyaç olduğu talebine katılıyorum
[0] GitHub bağlantısı profilimde
ctrl+shift+xe basıp koordinatları doğrudan giriyorumInkscape’in XML düzenleyicisi benim ortamımda oldukça sık çöküyor ama her düzenlemeden sonra kaydetmeyi hatırlarsanız kullanılabilir
Genelde nasıl yapılıyor? İnsanlar SVG’yi doğrudan kodluyor mu, yoksa Figma gibi bir yerde çizip SVG dosyası mı oluşturuyor?
http://shapeoko.github.io/Docs/ içindeki dosya boyutlarını makul seviyeye indirmek epey çalışma gerektirmişti
Daha sonra görsele tıklayınca yeni pencerede açılan bir mekanizma da yaptım: http://shapeoko.github.io/Docs/content/tPictures/PS20028-100...
Ayrıca parça listesindeki parça adına tıklayınca diyagramda ilgili parçanın vurgulanmasını sağlayabiliyordum
Karmaşık şekilleri veya eğrileri bazen görselleştirmek için çevrimiçi bir düzenleyiciye koyuyorum; şu araç iyi: https://yqnn.github.io/svg-path-editor/
Bir ok veya hamburger menü ikonu gerekiyorsa doğrudan koda girebilirsiniz. Bazen kâğıt kalemle başlayıp sonra koordinatları ayarlayarak yeterince iyi görünene kadar düzenliyorum
Bazen belirli statik sayfalara özgü grafik gerektiği için sayfanın içine gömdüğüm oldu, ama o durumdaki grafikler çok karmaşık değildi
Yakın zamanda fark ettiğim şeylerden biri, React uygulaması içinde SVG etiketlerini JSX etiketleri gibi satır içi koyabilmekti
Bunun tam olarak birinci sınıf destek mi olduğu yoksa Webpack’in mi hallettiği konusunda emin değilim ama bazı durumlarda içine mantık eklenmiş SVG bileşenleri oluşturma hissi çok iyi. Artık SVG’nin şeklini, renklerini, bazı bölümlerin atlanmasını vb. React tabanlı mantıkla değiştirebiliyorum
Ama SVG kodunu satır içi koyarsanız tarayıcı görseli önbelleğe alamaz. SVG büyükse veya yalnızca birkaç varyasyon varsa, her görsel varyasyonu için ayrı bir endpoint bulundurmak daha iyi olabilir
https://chat.openai.com/share/49e91be6-bdef-4f4d-a263-80a884...
Bu öğreticideki örneklerden biri de React’te üretilen veri tabanlı bir diyagram. İkisini birleştirince epey güzel şeyler yapılabiliyor