एक slanted पक्ष के साथ आकार (उत्तरदायी)


92

मैं नीचे की ओर केवल एक तरफ (उदाहरण के लिए, नीचे की ओर) झुका हुआ किनारे के साथ छवि में एक आकृति बनाने की कोशिश कर रहा हूं जबकि अन्य किनारे सीधे बने हुए हैं।

CSS div तिरछे पक्ष के साथ

मैंने सीमा विधि का उपयोग करने की कोशिश की (कोड नीचे दिया गया है) लेकिन मेरे आकार के आयाम गतिशील हैं और इसलिए मैं इस पद्धति का उपयोग नहीं कर सकता।

.shape {
    position: relative;
    height: 100px;
    width: 200px;
    background: tomato;
}
.shape:after {
    position: absolute;
    content: '';
    height: 0px;
    width: 0px;
    left: 0px;
    bottom: -100px;
    border-width: 50px 100px;
    border-style: solid;
    border-color: tomato tomato transparent transparent;
}
<div class="shape">
    Some content
</div>


मैंने पृष्ठभूमि के लिए ढ़ाल का उपयोग करने की भी कोशिश की है (जैसे नीचे दिए गए कोड में) लेकिन यह आयाम बदलते ही गड़बड़ हो जाता है। आप नीचे दिए गए स्निपेट में आकृति पर मँडरा करके देख सकते हैं कि मेरा क्या मतलब है।

मैं इस आकार को एक तिरछे पक्ष के साथ कैसे बना सकता हूं और गतिशील आकारों का समर्थन करने में भी सक्षम हो सकता हूं ?

जवाबों:


128

केवल एक तरफ एक कटे हुए किनारे के साथ आकार बनाने के कई तरीके हैं।

निम्नलिखित विधियां गतिशील आकारों का समर्थन नहीं कर सकती हैं जैसा कि पहले से ही प्रश्न में वर्णित है:

  • के लिए पिक्सेल मूल्यों के साथ बॉर्डर त्रिकोण विधि border-width
  • कोण सिंटैक्स (जैसे 45 डिग्री, 30 डिग्री आदि) के साथ रैखिक ग्रेडिएंट।

गतिशील आकार का समर्थन करने वाले तरीके नीचे वर्णित हैं।


विधि 1 - एसवीजी

( ब्राउज़र संगतता )

एसवीजी का उपयोग आकृति बनाने के लिए किया जा सकता है या तो polygonएस या pathएस का उपयोग करके । नीचे दिए गए स्निपेट का उपयोग करता है polygon। आवश्यक किसी भी पाठ सामग्री को आकृति के शीर्ष पर स्थित किया जा सकता है।

पेशेवरों

  • एसवीजी को स्केलेबल ग्राफिक्स का उत्पादन करने के लिए डिज़ाइन किया गया है और सभी आयाम परिवर्तनों के साथ अच्छी तरह से काम कर सकता है।
  • न्यूनतम कोडिंग ओवरहेड के साथ बॉर्डर और होवर प्रभाव प्राप्त किया जा सकता है।
  • आकृति को छवि या ढाल पृष्ठभूमि भी प्रदान की जा सकती है।

विपक्ष

  • ब्राउज़र समर्थन शायद केवल नकारात्मक पक्ष है क्योंकि IE8- एसवीजी का समर्थन नहीं करता है लेकिन राफेल और वीएमएल जैसे पुस्तकालयों का उपयोग करके इसे कम किया जा सकता है। इसके अलावा, ब्राउज़र समर्थन अन्य विकल्पों की तुलना में किसी भी तरह से बदतर नहीं है।

विधि 2 - ग्रेडिएंट बैकग्राउंड

( ब्राउज़र संगतता )

लीनियर ग्रेडिएंट का उपयोग अभी भी आकृति बनाने के लिए किया जा सकता है, लेकिन कोण के साथ नहीं जैसा कि प्रश्न में उल्लेख किया गया है। हमें कोणों को निर्दिष्ट करने के बजाय to [side] [side]सिंटैक्स ( वैल्यू के लिए धन्यवाद ) का उपयोग करना होगा। जब पक्षों को निर्दिष्ट किया जाता है, तो ग्रेड के आयामों के आधार पर ग्रेडिएंट एंगल्स को स्वचालित रूप से समायोजित किया जाता है।

पेशेवरों

  • कंटेनर के आयाम गतिशील होने पर भी आकार प्राप्त और बनाए रखा जा सकता है।
  • हॉवर प्रभाव को ढाल रंग बदलकर जोड़ा जा सकता है।

विपक्ष

  • होवर इफेक्ट तब भी ट्रिगर किया जाएगा जब कर्सर आकार के बाहर हो लेकिन कंटेनर के भीतर।
  • सीमाओं को जोड़ने के लिए मुश्किल ढाल जोड़तोड़ की आवश्यकता होगी।
  • जब चौड़ाई (या ऊँचाई) बहुत बड़ी होती है, तो रोगी दांतेदार कोनों के निर्माण के लिए जाने जाते हैं।
  • आकृति पर चित्र पृष्ठभूमि का उपयोग नहीं किया जा सकता है।

विधि 3 - तिरछा रूपांतरण

( ब्राउज़र संगतता )

इस विधि में, एक छद्म तत्व जोड़ा जाता है, तिरछा और इस तरह से लगाया जाता है कि ऐसा लगता है कि किनारों में से एक को तिरछा किया गया है / angled.If ऊपर या नीचे का किनारा धीमा है, तिरछा Y अक्ष के साथ होना चाहिए, अन्यथा रोटेशन एक्स अक्ष के साथ होना चाहिए। transform-originSlanted पक्ष की ओर विपरीत होनी चाहिए।

पेशेवरों

  • सीमाओं के साथ भी आकार प्राप्त किया जा सकता है।
  • आकार के भीतर होवर का प्रभाव प्रतिबंधित होगा।

विपक्ष

  • आयाम क्योंकि एक तत्व विषम है जब आकार के लिए आनुपातिक वृद्धि करने के लिए बनाए रखा जा करने की जरूरत है अपने रूप Y- अक्ष बढ़ जाती है में ऑफसेट widthबढ़ जाती है और इसके विपरीत (बढ़ाने की कोशिश widthकरने के लिए 200pxस्निपेट में)। आप इसके बारे में अधिक जानकारी यहाँ पा सकते हैं ।

विधि 4 - परिप्रेक्ष्य ट्रांसफ़ॉर्म

( ब्राउज़र संगतता )

इस पद्धति में, मुख्य कंटेनर को X या Y अक्ष के साथ थोड़ा परिप्रेक्ष्य के साथ घुमाया जाता है। उचित मूल्य निर्धारित करने से transform-originकेवल एक तरफ एक कटे हुए किनारे का उत्पादन होगा।

यदि ऊपर या नीचे की ओर का हिस्सा धीमा है, तो रोटेशन Y अक्ष के साथ होना चाहिए, अन्यथा रोटेशन X अक्ष के साथ होना चाहिए। transform-originSlanted पक्ष की ओर विपरीत होनी चाहिए।

पेशेवरों

  • सीमाओं के साथ आकार प्राप्त किया जा सकता है।
  • आकार बनाए रखने के लिए आयामों को आनुपातिक रूप से बढ़ाने की आवश्यकता नहीं है।

विपक्ष

  • सामग्री को भी घुमाया जाएगा और इसलिए उन्हें सामान्य दिखने के लिए काउंटर घुमाया जाएगा।
  • यदि आयाम स्थिर नहीं हैं तो पोजिशनिंग पाठ थकाऊ होगा।

विधि 5 - सीएसएस क्लिप पथ

( ब्राउज़र संगतता )

इस पद्धति में, मुख्य कंटेनर को बहुभुज का उपयोग करके आवश्यक आकार में क्लिप किया जाता है। बहुभुज के बिंदुओं को उस पक्ष के आधार पर संशोधित किया जाना चाहिए जहां झुका हुआ किनारा आवश्यक है।

पेशेवरों

  • जब कंटेनर को गतिशील रूप से आकार दिया जा रहा हो तब भी आकार बनाए रखा जा सकता है।
  • हॉवर प्रभाव पूरी तरह से आकार की सीमाओं के भीतर प्रतिबंधित होगा।
  • आकृति के लिए छवि को पृष्ठभूमि के रूप में भी इस्तेमाल किया जा सकता है।

विपक्ष

  • वर्तमान में ब्राउज़र समर्थन बहुत खराब है।
  • आकार के शीर्ष पर एक बिल्कुल तैनात तत्व रखकर और इसे आवश्यक क्लिप देकर सीमाएं जोड़ी जा सकती हैं लेकिन एक बिंदु से परे यह गतिशील रूप से पुन: आकार देने पर अच्छी तरह से फिट नहीं होती है।

विधि 6 - कैनवस

( ब्राउज़र संगतता )

कैनवस का उपयोग ड्राइंग पथ द्वारा आकार का उत्पादन करने के लिए भी किया जा सकता है। नीचे दिए गए स्निपेट में एक डेमो है। आवश्यक किसी भी पाठ सामग्री को आकृति के शीर्ष पर स्थित किया जा सकता है।

पेशेवरों

  • कंटेनर के आयाम गतिशील होने पर भी आकार प्राप्त और बनाए रखा जा सकता है। सीमाएँ भी जोड़ी जा सकती हैं।
  • हॉवर प्रभाव को pointInpathविधि का उपयोग करके आकार की सीमाओं के भीतर प्रतिबंधित किया जा सकता है ।
  • आकृति को छवि या ढाल पृष्ठभूमि भी प्रदान की जा सकती है।
  • बेहतर विकल्प अगर वास्तविक समय एनीमेशन प्रभाव की जरूरत है क्योंकि यह डोम हेरफेर की आवश्यकता नहीं है।

विपक्ष

  • कैनवास रेखापुंज आधारित है और इसलिए कोणीय किनारों pixelated हो जाएगा या जब एक सीमा के बाद बढ़ाया धुंधला *

* - जब भी व्यूपोर्ट का आकार बदला जाता है, तो पिक्सेलेशन से बचना चाहिए। यहाँ इसका एक उदाहरण है लेकिन यह एक उपरि है।


35

मैंने सीमा पद्धति का उपयोग करने की कोशिश की लेकिन मेरे आकार के आयाम गतिशील हैं और इसलिए मैं इस पद्धति का उपयोग नहीं कर सकता।


विधि 7 - व्यूपोर्ट इकाइयाँ (सीमा Redux )

( ब्राउज़र संगतता )

सीएसएस 3 में व्यूपोर्ट इकाइयां एक बेहतरीन नवाचार हैं। जब आप आमतौर पर अपने गुणों को गतिशील करने के लिए प्रतिशत मानों का उपयोग कर सकते हैं, तो आप इसे border-widths ( न ही font-sizes ) के लिए नहीं कर सकते ।

व्यूपोर्ट इकाइयों की तुलना में, आप व्यूपोर्ट आयाम की तुलना में, अपनी वस्तुओं के आकार के साथ-साथ अपनी सीमा की चौड़ाई को गतिशील रूप से निर्धारित कर सकते हैं

नोट: प्रतिशत मान पेरेंट ऑब्जेक्ट के लिए संदर्भित होते हैं, व्यूपोर्ट (विंडो का दृश्य क्षेत्र) के लिए नहीं।

विधि का परीक्षण करने के लिए, निम्नलिखित स्निपेट पूर्ण पृष्ठ लॉन्च करें और इसे क्षैतिज और लंबवत रूप से आकार दें।

.shape {
    position: relative;
    height: 20vh;
    width: 40vw;
    background: tomato;
}
.shape:after {
    position: absolute;
    content: '';
    left: 0px;
    right: 0px;
    top: 20vh;
    border-width: 10vh 20vw;
    border-style: solid;
    border-color: tomato tomato rgba(0,0,0,0) rgba(0,0,0,0);
}
<div class="shape">Some content</div>

पेशेवरों - (1) सब कुछ गतिशील है, ब्राउज़र कवरेज विस्तृत है।

विपक्ष - (1) आप पर ध्यान देना चाहिए कि कैसे अपने ओएस स्क्रॉलबार संभालती के साथ overflow: auto;


3
यह क्रोम के नवीनतम संस्करण में दांतेदार लगता है।
Mr_Green

सच! मुझे लगता है कि ब्राउज़र इंजन को अभी भी इसे सुचारू रूप से प्रस्तुत करने के लिए कुछ समय चाहिए। व्यूपोर्ट इकाइयों के बजाय पिक्सेल के साथ इस तकनीक का उपयोग करते समय फ़ायरफ़ॉक्स की भी यह समस्या है, लेकिन पारदर्शी के बजाय आरजीबीए (,, 0) का उपयोग करके इसे ठीक किया जाता है। सौभाग्य से हमारे पास अभी अन्य विकल्प हैं;)
एंड्रिया लिगियोस

1

मेरा समाधान इस पृष्ठ में ऊपर एंड्रिया लिगियोस द्वारा व्यू 7 की विधि 7 नामक एक से प्रेरित है ।

मैंने ऊँचाई के लिए "क्षैतिज" इकाई का भी उपयोग किया ( height:10vw) नेविगेशन विंडो की चौड़ाई का आकार बदलने के दौरान ट्रेपोज़ॉइड में दिए गए अनुपात को रखने के लिए। हम इस विधि को 7b - व्यूपोर्ट चौड़ाई कह सकते हैं ।

इसके अलावा, divएक और :afterचयनकर्ता के बजाय दो नेस्टेड एस का उपयोग करते हुए , मेरी राय में (जैसे text-align, आदि), पाठ सामग्री शैलियों की बेहतर ट्यूनिंग की अनुमति देता है ।

.dtrapz {
  position: relative;
  margin: 10px 40vw;
  width: 0;
  height: 10vw;
  border: none;
  border-right: 20vw solid #f22;
  border-bottom: 5vw solid transparent;
}

.dtcont {
  position: absolute;
  width: 20vw;
  height: 10vw;
  text-align: center;
  color: #fff;/* just aesthetic */
}
<div class="dtrapz">
  <div class="dtcont">Some content</div>
</div>


@ नीचेवाला हाय! मुझे बताएं कि मेरे उत्तर में क्या गलत है, इसलिए मैं इसे संपादित या हटा सकता हूं यदि यह समझ में आता है! मैं कोई विशेषज्ञ नहीं हूं, लेकिन ऐसा लगता है कि इसे कई पृष्ठों में लागू किया जा सकता है, लंबे समय तक केवल सामग्री के आधार पर, पाठ्य सामग्री के साथ काम किया जा सकता है :)
मैटलएग्रो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.