SVG ट्यूटोरियल
(svg-tutorial.com)- यह HTML के भीतर इमेज को सीधे कोड से बनाने के लिए SVG सीखने की सामग्री है, जिसमें बेसिक शेप्स से लेकर इंटरैक्शन तक चरणबद्ध तरीके से सीखा जा सकता है
- सीखने की रूपरेखा
viewBox,polygon,polylineजैसे बुनियादी एलिमेंट्स से शुरू होकरpath, Bézier curves, arc तक फैलती है - transformation भाग में rotation, translation, reuse, scale और सामान्य transforms शामिल हैं, और CSS भाग में animation, hover और path-based animation के साथ CSS inline SVG तक जोड़ा गया है
- उन्नत विषयों में text,
clip-path, gradients शामिल हैं, और JavaScript से वास्तविक समय दिखाने वाली घड़ी, इंटरैक्शन, data-driven diagram, multi-component decomposition का अभ्यास कराया गया है line,circle,rect,polyline,polygon,textतथा quadratic/cubic Bézier curve और arc के लिए editor links भी दिए गए हैं, ताकि हर एलिमेंट पर तुरंत प्रयोग किया जा सके
ट्यूटोरियल संरचना
- TLDR: SVG Tutorial Summary: पूरे ट्यूटोरियल का सार
-
SVG की बुनियाद
-
pathएलिमेंट -
transformation
-
SVG और CSS
-
उन्नत विषय
-
SVG और JavaScript
अभ्यास के लिए SVG elements और path segments
- SVG एलिमेंट-आधारित editors के जरिए basic shapes पर तुरंत प्रयोग किया जा सकता है
pathएलिमेंट कई path segments के जरिए जटिल आकार बनाता है
1 टिप्पणियां
Hacker News की राय
SVG + React का कॉम्बिनेशन काफ़ी अंडररेटेड है। React की abstraction और ताकत को वैसे ही इस्तेमाल करते हुए DOM की जगह मनचाही graphics render की जा सकती हैं, और graph या chart rendering जैसे कुछ उपयोगों में यह Canvas से कहीं बेहतर लगता है।
अगर pixel-level manipulation जैसी graphically complex चीज़ों की ज़रूरत न हो और बस थोड़ी-सी interaction चाहिए, तो यह खास तौर पर अच्छा है। Canvas में hover effect बनाना झंझट भरा होता है क्योंकि आपको खुद हिसाब लगाना पड़ता है कि mouse किस element के ऊपर है, जबकि SVG में
onmouseoverजैसी built-in सुविधा इस्तेमाल की जा सकती हैदिशा या प्रेरणा देने वाले कुछ working examples मिल जाएँ तो अच्छा होगा
कुल मिलाकर बेहतरीन resource है और examples वाकई बहुत साफ़ हैं। लेकिन clip-path वाले हिस्से में सुझाया गया code बड़े circle को दो बार describe करता है, इसलिए circle का size बदलना हो तो दो जगह edit करना पड़ेगा।
चूँकि इसमें पहले से
defsइस्तेमाल हो रहा है, इसलिए मेरा मानना है कि उसी definition को reuse करने वाले रूप में लिखना बेहतर होगाclipPathके अंदर reference किया जा सकता है।व्यक्तिगत रूप से मैं
<g>wrapper भी हटाना चाहूँगा। मैंने कभी नहीं समझा कि ऐसी संरचना क्यों recommend की जाती है, और बहुत ही दुर्लभ मामलों को छोड़ दें जहाँ आप<defs>के अंदर न होने पर भी render होने वाला element रखना चाहते हों, इससे कुछ खास हासिल नहीं होता। उदाहरण जैसेdefs/circleवाले मामले में आम तौर पर<symbol>इस्तेमाल करना ज़्यादा सही हैवाकई शानदार। SVG एक साफ़-सुथरा और flexible format है, और यह मेरे चल रहे side project से सीधे जुड़ा हुआ है, इसलिए मैं समय निकालकर इस tutorial को follow करने वाला हूँ।
दूसरों की तरह SVG-आधारित React components बनाना मुझे भी काफ़ी मज़ेदार लगा। React और JSX interaction जोड़ना आसान बनाते हैं, और SVG ऐसा UI संभव बनाता है जिसे सिर्फ HTML से आसानी से नहीं बनाया जा सकता।
मैंने music theory side project के लिए interactive Circle of Fifths render करने वाला एक React component public किया था। अभी बहुत काम बाकी है, लेकिन यह usable state में है: https://github.com/epiccoleman/react-circle-of-fifths
SVG से Circle of Fifths बनाने की प्रक्रिया पर मैंने एक लेख भी लिखा था, और मुझे उसमें complex elements draw करने की प्रक्रिया को follow करने वाला बीच का explanation section खास तौर पर पसंद है: https://epiccoleman.com/posts/2023-04-05-svg-circle-of-fifth...
अभी मैं इसी तरह fretboard diagram generator बना रहा हूँ, और पुराने लेख को reference material की तरह फिर से देख पाना उपयोगी लग रहा है। काम को लिखकर रखने का एक बड़ा फ़ायदा यह है कि आप समस्या को कैसे हल किया था, उसे “replay” कर सकते हैं
यह resource मुझे पसंद आया। React में मैंने कुछ inline SVG बनाकर उनमें interaction जोड़ी है, और उनके साथ खेलना सच में बहुत मज़ेदार है।
खास तौर पर
<foreignObject>tag उपयोगी है। SVG के अंदर सामान्य HTML डाला जा सकता है, इसलिए link, image, basic flexbox styling जैसी चीज़ें—जो HTML बेहतर करता है—उन्हें SVG art project के भीतर handle किया जा सकता है।लेखक के लिए एक जोड़: साइट के कुछ links काम नहीं कर रहे हैं। पेज के नीचे bio.link और Day 11 “How to Draw Quadratic Bézier Curves with SVG” में interactive Bézier curve demo का link डाउन है
bio.link की तरफ़ मुझे कोई समस्या नहीं दिख रही, जानना चाहूँगा कि आपको कौन-सी error दिख रही है
/svg/pathपर जा रहा है, इसलिए 404 आ रहा है, और सही link शायद/svg/useहोना चाहिएforeignObjectके बारे में मुझे भी नहीं पता था, यह सच में अच्छा हैकुछ साल पहले interface पर काम करते समय graphics के कुछ हिस्सों में SVG इस्तेमाल कर रहा था। दो color schemes थीं, लेकिन एक graphic सिर्फ एक scheme में था, इसलिए मैं दूसरे रंग का hex code लेने के लिए hallway पार करके गया।
designer ने SVG file खोली और सारे colors ढूँढकर बदल दिए, और इस तरह दूसरा रंग बना दिया—यह देखकर मैं काफ़ी हैरान रह गया
बेहतरीन। खासकर curves और clipping के examples पसंद आए, जिनसे मैं अब भी जूझता हूँ।
व्यक्तिगत रूप से मैं
pathको पसंद करता हूँ, क्योंकि उससे लगभग सब कुछ किया जा सकता है और यह दूसरे तरीकों से कम verbose होता है।मैं इसे लंबे समय से सीख रहा हूँ, लेकिन अब भी लगता है कि बहुत कुछ सीखना बाकी है। मैं drawing में बहुत कमज़ोर हूँ और images भी ज़्यादा पसंद नहीं करता, इसलिए convenience और performance की वजह से मैंने पूरा side project SVG में बना दिया।
आज का resource देखकर लग रहा है कि मुझे काफ़ी refactoring करनी पड़ेगी: https://eddiots.com/1
अच्छी प्रतिक्रिया के लिए धन्यवाद, और आपने जो कुछ गलतियाँ ढूँढीं उन्हें मैंने ठीक कर दिया है। अगर अब भी कुछ काम नहीं कर रहा हो तो बताइए। अभी थोड़ा final polishing चल रहा है
उदाहरण के लिए, क्या किसी को पता है कि Twitter पर thumbnail preview क्यों काम नहीं कर रहा? नीचे के pages पर यह ठीक से काम करता है
बहुत बढ़िया। अभी मैं जिस समस्या से जूझ रहा हूँ वह text + image है, इसलिए इससे जुड़े एक-दो examples अच्छे रहेंगे
alignment सच में सिरदर्द है। मैंने Inkscape भी आज़माया, लेकिन जो चाहिए उसे बनाने के लिए बात काफ़ी हद तक “XML को सीधे लिखने” तक पहुँच जाती है
text-anchorके बारे में जानता हूँ: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/t...और यहाँ किसी ने सुझाया कि
foreignObjecttag उपयोगी हो सकता है: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/for...svgwriteसे tables generate करने के लिए जल्दी में Python code बनाया था, और text को मनचाही जगह रखना किसी नरक से कम नहीं थाआख़िर में कई values को जैसे-तैसे adjust किया और “इतना काफ़ी है” पर छोड़ दिया। non-trivial text layout examples की ज़रूरत वाले अनुरोध से मैं सहमत हूँ
[0] GitHub link प्रोफ़ाइल में है
ctrl+shift+xदबाकर coordinates सीधे दर्ज करता हूँInkscape का XML editor मेरे environment में काफ़ी बार crash हो जाता है, लेकिन अगर हर edit पर save करना याद रहे तो यह उपयोगी है
आम तौर on लोग यह कैसे करते हैं? क्या लोग SVG को सीधे code करते हैं, या Figma जैसी किसी चीज़ में बनाकर SVG file generate करते हैं?
http://shapeoko.github.io/Docs/ की file size को reasonable स्तर तक लाने में काफ़ी काम लगा
बाद में मैंने ऐसा mechanism भी बनाया कि image पर click करने से वह नई window में खुल जाए: http://shapeoko.github.io/Docs/content/tPictures/PS20028-100...
और parts list में किसी part name पर click करने से diagram में वही part highlight हो जाता था
complex shapes या curves को कभी-कभी visualise करने के लिए online editor में डालता हूँ, और यह tool अच्छा है: https://yqnn.github.io/svg-path-editor/
अगर arrow या hamburger menu icon चाहिए, तो सीधे code में जाना आसान है। कभी-कभी कागज़ और pen से शुरू करके coordinates मिलाते हुए तब तक adjust करता हूँ जब तक वह काफ़ी अच्छा न लगे
कभी-कभी किसी खास static page के लिए unique graphics चाहिए होती थीं, इसलिए उन्हें page के अंदर embed भी किया, लेकिन ऐसे मामलों में graphics बहुत complex नहीं थीं
हाल में मैंने जो चीज़ें समझीं, उनमें एक यह थी कि React application के अंदर SVG tags को JSX tags की तरह inline रखा जा सकता है
यह ठीक-ठीक first-class support है या Webpack इसे संभालता है, यह नहीं जानता, लेकिन कुछ मामलों में logic वाले SVG components बनाना बहुत अच्छा लगता है। अब SVG की shape, color, कुछ sections को छोड़ना आदि React-based logic से बदला जा सकता है
लेकिन अगर SVG code को inline डालते हैं, तो browser image को cache नहीं कर सकता। अगर SVG बड़ा हो या variations कम हों, तो हर image variation के लिए अलग endpoint रखना बेहतर हो सकता है
https://chat.openai.com/share/49e91be6-bdef-4f4d-a263-80a884...
इस tutorial के examples में से एक भी React में generate किया गया data-driven diagram है। दोनों को मिलाकर काफ़ी बढ़िया चीज़ें की जा सकती हैं