2017-08-02 24 views
6

क्या मैं हासिल करना चाहते हैं:सीएसएस ग्रिड लेआउट में कॉलम की अधिकतम चौड़ाई कैसे सेट करें?

CSS Grid Layout का उपयोग करना, एक अधिकार स्तम्भ जो आकार अपनी सामग्री से ली गई है के साथ एक पृष्ठ के लिए, लेकिन केवल खिड़की चौड़ाई का 20% तक।

मैं कैसे सोचा था कि यह काम करेगा:

div { 
 
    border-style: solid; 
 
} 
 

 
#container { 
 
    width: 300px; 
 
    height: 300px; 
 
    display: grid; 
 
    grid-template-columns: 1fr minmax(auto, 20%); 
 
}
<div id="container"> 
 
    <div> 
 
    some content 
 
    </div> 
 
    <div> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec cursus eu leo ac ultrices. Vivamus ornare, orci sed pretium sollicitudin 
 
    </div> 
 
</div>

यह अच्छा लग रहा है, लेकिन फिर जब मैं दूसरे div की सामग्री हटा दें, बाएँ स्तंभ ढह नहीं करता है:

div { 
 
    border-style: solid; 
 
} 
 

 
#container { 
 
    width: 300px; 
 
    height: 300px; 
 
    display: grid; 
 
    grid-template-columns: 1fr minmax(auto, 20%); 
 
}
<div id="container"> 
 
    <div> 
 
    some content 
 
    </div> 
 
    <div></div> 
 
</div>

मेरा प्रश्न:

मैं यह धारणा थी कि न्यूनतम करने के बाद से minmax()

(...) एक आकार सीमा बराबर या उससे अधिक परिभाषित करता है और कम से कम या बराबर अधिकतम।

इसका मतलब होगा मेरे मामले में चौड़ाई auto से सेट किया गया है (= 0 जब div खाली है) 20% करने के लिए। हालांकि यह 20% पर रहता है। ऐसा क्यों है?

+0

* मैं एक अधिकार स्तम्भ * वहाँ इस लक्ष्य को हासिल करने के लिए कई अन्य तरीके हैं के साथ एक पृष्ठ करना चाहते हैं, वहाँ 'ग्रिड टेम्पलेट columns' उपयोग करने के लिए किसी भी विशेष कारण है ? –

+0

@ अभिषेक पांडेय: हाँ, पूरा ऐप सीएसएस ग्रिड पर आधारित है (मैं इस प्रश्न में स्पष्ट करता हूं) – WoJ

+0

[कॉलम पूर्ण चौड़ाई कैसे बना सकता है जब दूसरा कॉलम नहीं होता है?] (Https://stackoverflow.com/क्यू/43301 9 4 9/35 9 7276) –

उत्तर

2

आप minmax समारोह को गलत समझा गया है। यह पहले अधिकतम मूल्य लागू करने का प्रयास करता है और जब यह संभव नहीं होता है तो यह न्यूनतम लागू होता है।

तो तुम लेआउट तुम सिर्फ अपने कंटेनर चौड़ाई के 20% गणना करने के लिए और फिर आप ग्रिड आइटम के लिए max-width संपत्ति का उपयोग कर इसे लागू करते हैं और दूसरे स्तंभ के लिए अपने grid-template-columns संपत्ति परिभाषा auto का उपयोग की जरूरत है ठीक करने के लिए। डेमो:

div { 
 
    outline: 1px dotted gray; 
 
} 
 

 
.container { 
 
    width: 300px; 
 
    height: 300px; 
 
    display: grid; 
 
    grid-template-columns: 1fr auto; 
 
} 
 

 
.container > :nth-child(2) { 
 
    max-width: 60px; /* 20% x 300px */ 
 
}
<div class="container"> 
 
    <div> 
 
    some content 
 
    </div> 
 
    <div> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec cursus eu leo ac ultrices. Vivamus ornare, orci sed pretium sollicitudin 
 
    </div> 
 
</div> 
 

 
<div class="container"> 
 
    <div> 
 
    some content 
 
    </div> 
 
    <div></div> 
 
</div>

+0

आह। मैंने पढ़ा है * मिनट से अधिक या बराबर आकार सीमा को परिभाषित करता है और न्यूनतम * से कम या बराबर * न्यूनतम से अधिकतम तक के रूप में परिभाषित करता है। आपकी व्याख्या रास्ता अधिक सटीक है। धन्यवाद। उस स्थिति में 'अधिकतम-चौड़ाई' वास्तव में जाने का तरीका होगा (मैं कॉलम पर समान आयाम-सेटिंग कार्रवाई के लिए दो प्रविष्टियों से बचने की उम्मीद कर रहा था) – WoJ

5

आपको कंटेनर पर max-width सेट करने की आवश्यकता हो सकती है और इसके कॉलम को auto पर सेट करने दें।

div, 
 
aside { 
 
    border-style: solid; 
 
} 
 

 
#container { 
 
    width: 300px; 
 
    height: 300px; 
 
    display: grid; 
 
    grid-template-columns: 1fr auto; 
 
} 
 

 
aside { 
 
    max-width: 60px; /* 60px is 20% of 300px*/ 
 
    /* max-width:20%; 20% of window's */ 
 
    font-size: 0; 
 
    transition: 0.25s; 
 
} 
 

 
#container:hover aside { 
 
    font-size: 1em; 
 
}
<div id="container"> 
 
    <div> 
 
    Hover it to see aside grow till 20% average width 
 
    </div> 
 
    <aside>lets give a try to resize it from content</aside> 
 
</div>

संबंधित मुद्दे