प्रॉम्प्ट और संदर्भ
एक मार्केटिंग कार्ड को एक ऐसे कर्व्ड किनारे की आवश्यकता है जो अपने कंटेनर की चौड़ाई के अनुसार रिस्पॉन्सिव हो। डिज़ाइन एक पाथ प्रदान करता है, लेकिन सजावट से सामग्री (content), कीबोर्ड फ़ोकस, या पुराने ब्राउज़रों के लेआउट में कोई रुकावट नहीं आनी चाहिए। समझाएं कि clip-path के साथ shape() का उपयोग कैसे करें, path() और polygon() के साथ इसकी तुलना करें, और एक प्रोग्रेसिव-एन्हांसमेंट योजना प्रदान करें।
इंटरव्यूअर क्या जांच रहा है
- यह जानना कि
shape()एक CSS बेसिक-शेप फ़ंक्शन है, SVG पाथ स्ट्रिंग नहीं। - यूनिट्स, CSS गणित, कंटेनर साइज़ और ब्राउज़र समर्थन के अंतरों को संभालना।
- क्लिपिंग को सजावट के रूप में मानना जबकि सिमेंटिक सामग्री, फ़ोकस और पठनीय फ़ॉलबैक को सुरक्षित रखना।
पहले स्पष्ट करने योग्य प्रश्न
- क्या यह आकार केवल सजावट है, या इसमें कोई जानकारी, हिट एरिया, या पढ़ने का क्रम शामिल है?
- क्या ब्राउज़र मैट्रिक्स ऐसे CSS Shapes Level 2 फ़ीचर की अनुमति देता है जो व्यापक रूप से उपलब्ध नहीं है?
- असंपोषित होने पर, क्या एक आयत (rectangle), एक
polygon()अनुमान (approximation), या एक इमेज एसेट स्वीकार्य है?
30-सेकंड का उत्तर
मैं सामान्य बॉक्स मॉडल के साथ सामग्री को लेआउट करूंगा और विज़ुअल एन्हांसमेंट के रूप में clip-path: shape(...) जोड़ूंगा। shape() CSS यूनिट्स और गणित को स्वीकार करता है, जो रिस्पॉन्सिव ज्योमेट्री में मदद करता है; path() एक SVG पाथ स्ट्रिंग का उपयोग करता है, जबकि polygon() पर फ़ॉलबैक करना आसान है लेकिन यह केवल कर्व्स का अनुमान लगाता है। मैं @supports या फ़ीचर डिटेक्शन के साथ एन्हांसमेंट को लागू करूंगा, एक पठनीय आयत बनाए रखूंगा, और परीक्षण करूंगा कि क्लिपिंग से फ़ोकस, हिट टारगेट या सिमेंटिक सामग्री न छिपे।
चरण-दर-चरण विस्तृत विश्लेषण
1. सामग्री को क्लिपिंग से अलग करें
हेडिंग, कॉपी और बटन को सामान्य DOM क्रम में रखें। clip-path रेंडर किए गए क्षेत्र को बदलता है; इसे सामग्री को छिपाना या पढ़ने के क्रम को बदलना नहीं चाहिए। बैकग्राउंड, किनारों और चित्रों को एक सजावटी लेयर में रखें, जबकि सामग्री लेयर स्क्रॉल करने योग्य और फ़ोकस करने योग्य बनी रहे।
2. shape() क्यों चुनें
shape() CSS-शैली के कमांड का उपयोग करता है और प्रतिशत, लंबाई और CSS गणित को जोड़ सकता है। SVG path() स्ट्रिंग की तुलना में, इसे कंटेनर आयामों और डिज़ाइन टोकन के साथ ट्यून करना आसान है। polygon() की तुलना में, यह कर्व्स और अधिक समृद्ध पाथ कमांड को व्यक्त कर सकता है।
3. एक स्कोप्ड एन्हांसमेंट लिखें
.card {
background: var(--surface);
overflow: clip;
}
@supports (clip-path: shape(from 0 0, line to 100% 0, close)) {
.card {
clip-path: shape(
from 0 0,
line to 100% 0,
line to 100% 82%,
curve to 0 100% with 52% 88%,
close
);
}
}फ़ेंस्ड कोड कमांड केवल उदाहरण के लिए है; प्रोडक्शन सिंटैक्स को लक्षित ब्राउज़रों और विनिर्देशों के अनुसार जांचा जाना चाहिए। बेस नियम उपयोगी रंग, स्पेसिंग और टेक्स्ट प्रदान करता है, ताकि एन्हांसमेंट विफल होने पर भी कार्ड खाली न रहे।
4. फ़ॉलबैक लेयर्स डिज़ाइन करें
सबसे सुरक्षित फ़ॉलबैक एक आयत है। जहाँ polygon() समर्थित है, वह किनारे का अनुमान लगा सकता है। यदि कोई कर्व अनिवार्य है, तो CSS रंग और टेक्स्ट कंट्रास्ट बनाए रखते हुए एक कंप्रेस्ड बैकग्राउंड एसेट का उपयोग करें। किसी अप्रमाणित जटिल पाथ को एकमात्र लेआउट न बनाएं।
5. रिस्पॉन्सिव साइज़ और ओवरफ़्लो को संभालें
महत्वपूर्ण बिंदुओं को प्रतिशत और कंटेनर आयामों के साथ व्यक्त करें, फिर अत्यधिक संकीर्ण और चौड़े कंटेनरों, लैंडस्केप और उच्च ज़ूम पर परीक्षण करें। clip-path पेंट किए गए क्षेत्र को छोटा बना सकता है लेकिन अतिरिक्त लेआउट स्थान आरक्षित नहीं करता है; सामग्री को अभी भी पैडिंग, न्यूनतम ऊंचाई और एक स्क्रॉलिंग रणनीति की आवश्यकता होती है।
6. एक्सेसिबिलिटी सीमा सत्यापित करें
क्लिपिंग DOM सिमेंटिक्स, स्क्रीन-रीडर क्रम, या कीबोर्ड क्रम को नहीं बदलती है, लेकिन यह विज़ुअल रूप से फ़ोकस रिंग, त्रुटि संदेश या पॉइंटर टारगेट को कवर कर सकती है। कीबोर्ड नेविगेशन, ज़ूम, स्क्रीन रीडर और उच्च कंट्रास्ट का परीक्षण करें; आवश्यकता पड़ने पर बिना क्लिप किए गए रैपर पर फ़ोकस स्टाइलिंग लगाएं।
7. मोशन और परफ़ॉर्मेंस लागत प्रबंधित करें
यदि आकार एनिमेट होता है, तो सुनिश्चित करें कि इससे असुविधा न हो या सामग्री न छिपे और prefers-reduced-motion का सम्मान करें। लो-एंड डिवाइस और लंबी सूचियों पर पेंट लागत पर ध्यान दें; लगातार जटिल रीड्रॉ की तुलना में स्थिर सजावट बेहतर है।
मॉडल उत्तर
मैं कार्ड को पहले सामान्य बॉक्स-मॉडल लेआउट पूरा करने दूंगा, इसके हेडिंग, कॉपी और बटन को सिमेंटिक रखूंगा, फिर केवल सजावट के रूप में clip-path का उपयोग करूंगा। shape() रिस्पॉन्सिव ज्योमेट्री के अनुकूल है क्योंकि यह CSS यूनिट्स और गणित को स्वीकार करता है; path() एक SVG स्ट्रिंग के करीब है, जबकि polygon() एक रूढ़िवादी अनुमान है। मैं @supports के साथ एन्हांसमेंट को नियंत्रित करूंगा, विफल होने पर एक आयत या परीक्षण किए गए अनुमान को बनाए रखूंगा, और अत्यधिक चौड़ाई, ज़ूम, कीबोर्ड फ़ोकस, स्क्रीन रीडर, उच्च कंट्रास्ट और कम मोशन का परीक्षण करूंगा। क्लिप किया गया किनारा कभी भी फ़ोकस रिंग या हिट टारगेट को नहीं छिपाना चाहिए।
सामान्य गलतियाँ
shape()को ऐसे सिंटैक्स के रूप में मानना जो SVGpath()स्ट्रिंग को बिना बदलाव के स्वीकार करता है।- केवल एन्हांसमेंट लिखना और कोई पठनीय आयताकार बेस स्टाइल न बनाना।
- क्लिप किनारे को किसी बटन, त्रुटि संदेश या फ़ोकस इंडिकेटर को कवर करने देना।
- प्रत्येक कंटेनर चौड़ाई और टेक्स्ट लंबाई के लिए निश्चित-पिक्सेल ज्योमेट्री का उपयोग करना।
- बिना टारगेट मैट्रिक्स और फ़ीचर डिटेक्शन के सार्वभौमिक समर्थन का दावा करना।
फ़ॉलो-अप प्रश्न और उत्तर
केवल एक SVG इमेज का उपयोग क्यों न करें?
एक निश्चित ब्रांड एसेट के लिए, SVG अधिक स्थिर हो सकता है। shape() तब चुनें जब CSS यूनिट्स, कंटेनर रिस्पॉन्सिवनेस और थीम टोकन मायने रखते हों, फिर समर्थन, रखरखाव और परफ़ॉर्मेंस का मूल्यांकन करें।
क्या होगा यदि @supports पास हो जाए लेकिन आकार गलत हो?
फ़ीचर डिटेक्शन को केवल एक सिंटैक्स गेट मानें, यह प्रमाण नहीं कि प्रत्येक पाथ कमांड समान रूप से व्यवहार करता है। मुख्य कमांड के लिए वास्तविक-ब्राउज़र स्क्रीनशॉट और इंटरैक्शन परीक्षणों का उपयोग करें, जिसमें एक सरल फ़ॉलबैक पाथ शामिल हो।
क्या क्लिपिंग हिट एरिया को प्रभावित कर सकती है?
विज़ुअल क्लिपिंग अनुभव किए गए हिट व्यवहार को प्रभावित कर सकती है, इसलिए लक्षित ब्राउज़रों में इसे सत्यापित करें। कंट्रोल्स को बड़ा और स्पष्ट रूप से फ़ोकस रखें, और आवश्यकता पड़ने पर इंटरैक्शन लेयर को बिना क्लिप किए गए रैपर में ले जाएं।
क्या होगा यदि टेक्स्ट को कर्व का अनुसरण करना पड़े?
clip-path केवल एक क्षेत्र को क्लिप करता है; यह किसी पाथ के साथ टेक्स्ट को लेआउट नहीं करता है। क्लिपिंग को टाइपोग्राफी एपीआई के रूप में मानने के बजाय एक अलग टेक्स्ट-लेआउट तकनीक का उपयोग करें या सामग्री संरचना बदलें।
आप स्थानीयकृत (localized) सामग्री का परीक्षण कैसे करते हैं?
सबसे लंबे अनुवाद, विभिन्न वज़न, अरबी या CJK मिश्रण और उपयोगकर्ता ज़ूम का परीक्षण करें। आकार केवल सजावट है, इसलिए संयोग से एक छोटे अंग्रेज़ी स्ट्रिंग का फिट हो जाना पर्याप्त प्रमाण नहीं है।
आपको shape() का उपयोग कब छोड़ देना चाहिए?
जब समर्थन, एनीमेशन लागत, या विज़ुअल निरंतरता आवश्यकताओं को पूरा न कर सके, तो polygon(), एक ग्रेडिएंट, SVG, या एक आयत का उपयोग करें। हर कीमत पर एक नए फ़ीचर का बचाव करने के बजाय रुकने की स्थिति निर्धारित करें।