लंबे समय से, वेब डिज़ाइनर को रेक्टैंगल के दायरे में ही काम करना पड़ता था. वेब पर मौजूद ज़्यादातर कॉन्टेंट अब भी सामान्य बॉक्स में फंसा हुआ है, क्योंकि ज़्यादातर क्रिएटिव, बिना रेक्टैंगल वाले लेआउट में काम नहीं करते. हालांकि, सीएसएस आकार की सुविधा के लॉन्च होने के बाद, यह बदलने वाला है. यह सुविधा, Chrome 37 से उपलब्ध है.
सीएसएस शेप की मदद से, वेब डिज़ाइनर सर्कल, दीर्घवृत्त, और पॉलीगॉन जैसे कस्टम पाथ के आस-पास कॉन्टेंट को रैप कर सकते हैं. इससे, उन्हें रेक्टैंगल की सीमाओं से मुक्ति मिलती है.
आकार मैन्युअल तरीके से तय किए जा सकते हैं या इमेज से अनुमान लगाया जा सकता है.
आइए, एक बहुत ही आसान उदाहरण देखते हैं.
शायद आप भी मेरी तरह ही थे, जब आपने पहली बार पारदर्शी हिस्सों वाली इमेज को फ़्लोट किया था. आपको उम्मीद थी कि कॉन्टेंट, खाली जगहों को भरने के लिए रैप हो जाएगा. हालांकि, आपको एलिमेंट के चारों ओर मौजूद रेक्टैंगल रैप के आकार से निराशा हुई होगी. इस समस्या को हल करने के लिए, सीएसएस शेप का इस्तेमाल किया जा सकता है.
shape-outside: url(image.png) सीएसएस एलान, ब्राउज़र को इमेज से कोई आकार निकालने के लिए कहता है.
shape-image-threshold प्रॉपर्टी, पिक्सल के कम से कम ओपैसिटी लेवल को तय करती है. इसका इस्तेमाल आकार बनाने के लिए किया जाएगा. इसकी वैल्यू, 0.0 (पूरी तरह से पारदर्शी) और 1.0 (पूरी तरह से अपारदर्शी) के बीच होनी चाहिए. इसलिए, shape-image-threshold: 0.5 का मतलब है कि आकार बनाने के लिए, सिर्फ़ 50% और उससे ज़्यादा ओपैसिटी वाले पिक्सल का इस्तेमाल किया जाएगा.
यहां float प्रॉपर्टी अहम है. shape-outside प्रॉपर्टी से उस जगह का आकार तय होता है जिसके आस-पास कॉन्टेंट रैप होगा. हालांकि, फ़्लोट के बिना, आपको आकार के असर नहीं दिखेंगे.
एलिमेंट के float वैल्यू के दूसरी तरफ़ एक फ़्लोट एरिया होता है. उदाहरण के लिए, अगर कॉफ़ी कप की इमेज वाले किसी एलिमेंट को बाईं ओर फ़्लोट किया जा रहा है, तो फ़्लोट एरिया कप की दाईं ओर बनेगा. दोनों ओर गैप वाली इमेज बनाई जा सकती है. हालांकि, कॉन्टेंट सिर्फ़ उस तरफ़ मौजूद आकार के चारों ओर रैप होगा जिसे फ़्लोट प्रॉपर्टी से तय किया गया है. यह बाईं या दाईं ओर सेट किया जा सकता है, दोनों ओर नहीं.
आने वाले समय में, उन एलिमेंट पर shape-outside का इस्तेमाल किया जा सकेगा जो सीएसएस एक्सक्लूज़न के साथ फ़्लोट नहीं किए गए हैं.
मैन्युअल तरीके से आकार बनाना
इमेज से आकार निकालने के अलावा, उन्हें मैन्युअल तरीके से भी कोड किया जा सकता है. आकार बनाने के लिए, फ़ंक्शन वाली इन वैल्यू में से किसी एक को चुना जा सकता है: circle(), ellipse(), inset(), और polygon(). हर शेप फ़ंक्शन, निर्देशांक का एक सेट स्वीकार करता है. साथ ही, इसे रेफ़रंस बॉक्स के साथ जोड़ा जाता है, जो निर्देशांक सिस्टम को सेट करता है. रेफ़रंस बॉक्स के बारे में थोड़ी देर में ज़्यादा जानकारी दी जाएगी.
circle() फ़ंक्शन
सर्कल आकार की वैल्यू के लिए पूरा नोटेशन circle(r at cx cy) है, जहां r सर्कल की त्रिज्या है, जबकि cx और cy, X-ऐक्सिस और Y-ऐक्सिस पर सर्कल के केंद्र के निर्देशांक हैं. सर्कल के बीच के निर्देशांक देना ज़रूरी नहीं है. अगर इन पैरामीटर को शामिल नहीं किया जाता है, तो एलिमेंट के बीच (उसके डायगनल के इंटरसेक्शन) का इस्तेमाल डिफ़ॉल्ट तौर पर किया जाएगा.
ऊपर दिए गए उदाहरण में, कॉन्टेंट को सर्कुलर पाथ के बाहर की ओर रैप किया जाएगा. सिंगल आर्ग्युमेंट 50%, सर्कल की त्रिज्या के बारे में बताता है. इस मामले में, यह एलिमेंट की चौड़ाई या ऊंचाई का आधा होता है. एलिमेंट के डाइमेंशन बदलने पर, सर्कल के आकार की त्रिज्या पर असर पड़ेगा. यह एक बुनियादी उदाहरण है कि सीएसएस शेप, रिस्पॉन्सिव कैसे हो सकते हैं.
आगे बढ़ने से पहले, एक अहम बात: यह याद रखना ज़रूरी है कि सीएसएस शेप, सिर्फ़ किसी एलिमेंट के चारों ओर मौजूद फ़्लोट एरिया के आकार पर असर डालते हैं. अगर एलिमेंट में बैकग्राउंड है, तो उसे शेप के हिसाब से काटा नहीं जाएगा. ऐसा करने के लिए, आपको सीएसएस मास्किंग की प्रॉपर्टी का इस्तेमाल करना होगा. जैसे, clip-path या mask-image. clip-path प्रॉपर्टी का इस्तेमाल करना काफ़ी आसान है, क्योंकि यह CSS शेप के नोटेशन का इस्तेमाल करती है. इसलिए, इसकी वैल्यू का फिर से इस्तेमाल किया जा सकता है.
इस दस्तावेज़ में मौजूद इलस्ट्रेशन में, आकार को हाइलाइट करने और इफ़ेक्ट को समझने में आपकी मदद करने के लिए क्लिपिंग का इस्तेमाल किया गया है.
सर्कल आकार पर वापस जाएं.
सर्कल की त्रिज्या के लिए प्रतिशत का इस्तेमाल करने पर, वैल्यू का हिसाब थोड़े ज़्यादा मुश्किल फ़ॉर्मूला से लगाया जाता है: sqrt(width^2 + height^2) / sqrt(2). इसे समझना ज़रूरी है, क्योंकि इससे आपको यह अनुमान लगाने में मदद मिलेगी कि अगर एलिमेंट के डाइमेंशन बराबर नहीं हैं, तो सर्कल का आकार कैसा होगा.
शेप फ़ंक्शन के निर्देशांक में, सीएसएस की सभी यूनिट टाइप का इस्तेमाल किया जा सकता है - px, em, rem, vw, vh वगैरह. अपनी ज़रूरतों के हिसाब से, कोई भी नीति चुनी जा सकती है.
सर्कल के बीच के निर्देशांक के लिए खास वैल्यू सेट करके, सर्कल की पोज़िशन में बदलाव किया जा सकता है.
.element{
shape-outside: circle(50% at 0 0);
}
इससे सर्कल का सेंटर, निर्देशांक सिस्टम के ऑरिजिन पर सेट हो जाता है. कोऑर्डिनेट सिस्टम क्या है? यहां हम रेफ़रंस बॉक्स की सुविधा पेश कर रहे हैं.
सीएसएस शेप के लिए रेफ़रंस बॉक्स
रेफ़रंस बॉक्स, एलिमेंट के चारों ओर एक वर्चुअल बॉक्स होता है. यह बॉक्स, आकार को खींचने और उसकी पोज़िशन तय करने के लिए इस्तेमाल किए जाने वाले कोऑर्डिनेट सिस्टम को सेट करता है. निर्देशांक सिस्टम का ऑरिजिन, उसके ऊपरी बाएं कोने में होता है. X-ऐक्सिस दाईं ओर और Y-ऐक्सिस नीचे की ओर होता है.
याद रखें कि shape-outside, फ़्लोट एरिया के आकार में बदलाव करता है. इस एरिया के आस-पास कॉन्टेंट रैप होगा. फ़्लोट एरिया, margin प्रॉपर्टी से तय किए गए बॉक्स के बाहरी किनारों तक फैला होता है. इसे margin-box कहा जाता है. अगर किसी आकार के लिए साफ़ तौर पर कोई रेफ़रंस बॉक्स नहीं दिया गया है, तो यह डिफ़ॉल्ट रेफ़रंस बॉक्स होता है.
नीचे दिए गए दो सीएसएस एलान के नतीजे एक जैसे हैं:
.element{
shape-outside: circle(50% at 0 0);
/* identical to: */
shape-outside: circle(50% at 0 0) margin-box;
}
हमने अभी तक एलिमेंट पर मार्जिन सेट नहीं किया है. इस बिंदु पर यह मान लेना सही होगा कि निर्देशांक सिस्टम का ऑरिजिन और सर्कल का सेंटर, एलिमेंट के कॉन्टेंट एरिया के ऊपरी बाएं कोने में है. मार्जिन सेट करने पर, यह बदल जाता है:
.element{
shape-outside: circle(50% at 0 0) margin-box;
margin: 100px;
}
निर्देशांक सिस्टम का ऑरिजिन अब एलिमेंट के कॉन्टेंट एरिया (100 पिक्सल ऊपर और 100 पिक्सल बाईं ओर) के बाहर है. सर्कल का सेंटर भी इसी तरह बाहर है. margin-box रेफ़रंस बॉक्स से तय किए गए निर्देशांक सिस्टम के बढ़े हुए हिस्से को ध्यान में रखते हुए, सर्कल के त्रिज्या की कैलकुलेट की गई वैल्यू भी बढ़ जाती है.