मैं सोच रहा हूं कि मैं उत्तरदायी चौकों के साथ एक लेआउट बनाने के बारे में कैसे जाऊंगा । प्रत्येक वर्ग में लंबवत और क्षैतिज रूप से संरेखित सामग्री होगी। विशिष्ट उदाहरण नीचे प्रदर्शित किया गया है ...
मैं सोच रहा हूं कि मैं उत्तरदायी चौकों के साथ एक लेआउट बनाने के बारे में कैसे जाऊंगा । प्रत्येक वर्ग में लंबवत और क्षैतिज रूप से संरेखित सामग्री होगी। विशिष्ट उदाहरण नीचे प्रदर्शित किया गया है ...
जवाबों:
आप केवल सीएसएस के साथ ऊर्ध्वाधर और क्षैतिज केंद्रित सामग्री के साथ वर्गों के उत्तरदायी ग्रिड बना सकते हैं । मैं समझाऊंगा कि कैसे एक स्टेप बाय स्टेप प्रक्रिया होती है लेकिन पहले यहाँ 2 डेमो हैं जो आप प्राप्त कर सकते हैं:
अब देखते हैं कि इन फैंसी उत्तरदायी वर्गों को कैसे बनाया जाए!
तत्वों का वर्ग (या जो भी अन्य पहलू अनुपात) रखने की चाल प्रतिशत का उपयोग करना है padding-bottom
।
साइड नोट: आप टॉप पैडिंग या टॉप / बॉटम मार्जिन का भी उपयोग कर सकते हैं लेकिन तत्व की पृष्ठभूमि प्रदर्शित नहीं होगी।
चूंकि शीर्ष पैडिंग की गणना मूल तत्व की चौड़ाई के अनुसार की जाती है ( संदर्भ के लिए MDN देखें ), तत्व की ऊंचाई इसकी चौड़ाई के अनुसार बदल जाएगी। अब आप इसकी चौड़ाई के अनुसार इसका पहलू अनुपात रख सकते हैं ।
इस बिंदु पर आप कोड कर सकते हैं:
HTML :
<div></div>
सीएसएस
div {
width: 30%;
padding-bottom: 30%; /* = width for a square aspect ratio */
}
यहाँ ऊपर दिए गए कोड का उपयोग करके 3 * 3 वर्ग ग्रिड का एक सरल लेआउट उदाहरण है।
इस तकनीक के साथ, आप किसी भी अन्य पहलू अनुपात बना सकते हैं, यहां एक टेबल है जो पहलू अनुपात और 30% चौड़ाई के अनुसार नीचे पैडिंग का मान देता है।
Aspect ratio | padding-bottom | for 30% width
------------------------------------------------
1:1 | = width | 30%
1:2 | width x 2 | 60%
2:1 | width x 0.5 | 15%
4:3 | width x 0.75 | 22.5%
16:9 | width x 0.5625 | 16.875%
जब आप सीधे वर्ग के अंदर सामग्री नहीं जोड़ सकते हैं (यह उनकी ऊँचाई का विस्तार करेगा और वर्ग अब और वर्ग नहीं होंगे) तो आपको उनके अंदर बाल तत्व (उदाहरण के लिए मैं div का उपयोग कर रहा हूँ) बनाने की आवश्यकता है position: absolute;
और उनके अंदर की सामग्री डालें । यह सामग्री को प्रवाह से बाहर ले जाएगा और वर्ग के आकार को बनाए रखेगा।
position:relative;
माता-पिता divs पर जोड़ना न भूलें, ताकि निरपेक्ष बच्चे अपने माता-पिता के लिए अपेक्षाकृत आकार में तैनात / आकार लें।
चलो वर्गों के हमारे 3x3 ग्रिड में कुछ सामग्री जोड़ें:
HTML :
<div class="square">
<div class="content">
.. CONTENT HERE ..
</div>
</div>
... and so on 9 times for 9 squares ...
सीएसएस :
.square {
float:left;
position: relative;
width: 30%;
padding-bottom: 30%; /* = width for a 1:1 aspect ratio */
margin:1.66%;
overflow:hidden;
}
.content {
position:absolute;
height:80%; /* = 100% - 2*10% padding */
width:90%; /* = 100% - 2*5% padding */
padding: 10% 5%;
}
परिणाम <- यह सुंदर बनाने के लिए कुछ स्वरूपण के साथ!
क्षैतिज रूप से:
यह बहुत आसान है, आपको बस इसमें जोड़ना text-align:center
होगा .content
।
परिणाम
लंबवत संरेखण
यह गंभीर हो जाता है! चाल का उपयोग करना है
display:table;
/* and */
display:table-cell;
vertical-align:middle;
लेकिन हम display:table;
पर .square
या .content
divs का उपयोग नहीं कर सकते क्योंकि यह संघर्ष करता है position:absolute;
इसलिए हमें .content
div के अंदर दो बच्चे पैदा करने की आवश्यकता है । हमारा कोड निम्नानुसार अपडेट किया जाएगा:
HTML :
<div class="square">
<div class="content">
<div class="table">
<div class="table-cell">
... CONTENT HERE ...
</div>
</div>
</div>
</div>
... and so on 9 times for 9 squares ...
सीएसएस:
.square {
float:left;
position: relative;
width: 30%;
padding-bottom : 30%; /* = width for a 1:1 aspect ratio */
margin:1.66%;
overflow:hidden;
}
.content {
position:absolute;
height:80%; /* = 100% - 2*10% padding */
width:90%; /* = 100% - 2*5% padding */
padding: 10% 5%;
}
.table{
display:table;
height:100%;
width:100%;
}
.table-cell{
display:table-cell;
vertical-align:middle;
height:100%;
width:100%;
}
अब हम समाप्त कर चुके हैं और हम यहां परिणाम देख सकते हैं:
* { box-sizing: border-box; }
.content div की ऊंचाई और चौड़ाई को 100% तक समायोजित करने की आवश्यकता होगी। :)
justify-content: center; align-items: center; flex-flow: column nowrap;
आप vw (दृश्य-चौड़ाई) इकाइयों का उपयोग कर सकते हैं, जो स्क्रीन की चौड़ाई के अनुसार वर्गों को उत्तरदायी बना देगा।
इसका एक त्वरित मजाक होगा:
html,
body {
margin: 0;
padding: 0;
}
div {
height: 25vw;
width: 25vw;
background: tomato;
display: inline-block;
text-align: center;
line-height: 25vw;
font-size: 20vw;
margin-right: -4px;
position: relative;
}
/*demo only*/
div:before {
content: "";
position: absolute;
top: 0;
left: 0;
height: inherit;
width: inherit;
background: rgba(200, 200, 200, 0.6);
transition: all 0.4s;
}
div:hover:before {
background: rgba(200, 200, 200, 0);
}
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
margin-left: -4px;
करें margin-right:-4px
। इसके बजाय नाबालिगों के क्षेत्र में असंगतता के साथ खिलवाड़ न करें, लेकिन एक रैपर पैरेंट-फ़ॉन्ट-आकार में 0 पर सेट करें और बच्चे के तत्वों की तुलना में 1rem
(रिलेटिव-एम) पर रीसेट करें
स्वीकृत उत्तर बहुत अच्छा है, हालाँकि इसके साथ किया जा सकता है flexbox
।
यहां BEM सिंटैक्स के साथ एक ग्रिड सिस्टम लिखा गया है जो प्रति पंक्ति 1-10 स्तंभों को प्रदर्शित करने की अनुमति देता है।
यदि अंतिम पंक्ति अधूरी है (उदाहरण के लिए आप प्रति पंक्ति 5 सेल दिखाना चाहते हैं और 7 आइटम हैं), अनुगामी आइटम क्षैतिज रूप से केंद्रित होंगे। अनुगामी वस्तुओं के क्षैतिज संरेखण को नियंत्रित करने के लिए, बस वर्ग के अंतर्गत justify-content
गुण बदलें .square-grid
।
.square-grid {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
.square-grid__cell {
background-color: rgba(0, 0, 0, 0.03);
box-shadow: 0 0 0 1px black;
overflow: hidden;
position: relative;
}
.square-grid__content {
left: 0;
position: absolute;
top: 0;
}
.square-grid__cell:after {
content: '';
display: block;
padding-bottom: 100%;
}
// Sizes – Number of cells per row
.square-grid__cell--10 {
flex-basis: 10%;
}
.square-grid__cell--9 {
flex-basis: 11.1111111%;
}
.square-grid__cell--8 {
flex-basis: 12.5%;
}
.square-grid__cell--7 {
flex-basis: 14.2857143%;
}
.square-grid__cell--6 {
flex-basis: 16.6666667%;
}
.square-grid__cell--5 {
flex-basis: 20%;
}
.square-grid__cell--4 {
flex-basis: 25%;
}
.square-grid__cell--3 {
flex-basis: 33.333%;
}
.square-grid__cell--2 {
flex-basis: 50%;
}
.square-grid__cell--1 {
flex-basis: 100%;
}
फिडल: https://jsfiddle.net/patrickberkeley/noLm1r45/3/
यह एफएफ और क्रोम में परीक्षण किया गया है।
मैं विभिन्न राशन के उत्तरदायी बक्से के लिए इस समाधान का उपयोग करता हूं:
HTML:
<div class="box ratio1_1">
<div class="box-content">
... CONTENT HERE ...
</div>
</div>
सीएसएस:
.box-content {
width: 100%; height: 100%;
top: 0;right: 0;bottom: 0;left: 0;
position: absolute;
}
.box {
position: relative;
width: 100%;
}
.box::before {
content: "";
display: block;
padding-top: 100%; /*square for no ratio*/
}
.ratio1_1::before { padding-top: 100%; }
.ratio1_2::before { padding-top: 200%; }
.ratio2_1::before { padding-top: 50%; }
.ratio4_3::before { padding-top: 75%; }
.ratio16_9::before { padding-top: 56.25%; }
JSfiddle.net पर डेमो देखें