उत्तरदायी वर्गों की ग्रिड


170

मैं सोच रहा हूं कि मैं उत्तरदायी चौकों के साथ एक लेआउट बनाने के बारे में कैसे जाऊंगा । प्रत्येक वर्ग में लंबवत और क्षैतिज रूप से संरेखित सामग्री होगी। विशिष्ट उदाहरण नीचे प्रदर्शित किया गया है ...

सामग्री के साथ उत्तरदायी वर्ग


मुझे नफरत है कि कैसे महान जवाब के साथ सवाल बस बेतरतीब ढंग से बंद हो जाते हैं जो स्टैकओवरफ्लो की तरह होना चाहिए। अगर उनके पास अच्छे, स्वीकृत, उत्कीर्ण उत्तर हैं ... तो इसे बंद क्यों करें ??? भ्रम कहाँ होना था? निश्चित रूप से, अपने स्वयं के "उत्तरदायी चौकों के ग्रिड" पर थोड़ा या बहुत कुछ समझाने की आवश्यकता हो सकती है, लेकिन यह 7 साल का है, 160+ प्रश्न 400+ उत्तर के साथ। मैं फिर से मतदान कर रहा हूं।
leinaD_natipaC

जवाबों:


416

आप केवल सीएसएस के साथ ऊर्ध्वाधर और क्षैतिज केंद्रित सामग्री के साथ वर्गों के उत्तरदायी ग्रिड बना सकते हैं । मैं समझाऊंगा कि कैसे एक स्टेप बाय स्टेप प्रक्रिया होती है लेकिन पहले यहाँ 2 डेमो हैं जो आप प्राप्त कर सकते हैं:

उत्तरदायी 3x3 वर्ग ग्रिड 3x3 ग्रिड में उत्तरदायी चौकोर चित्र

अब देखते हैं कि इन फैंसी उत्तरदायी वर्गों को कैसे बनाया जाए!



1. उत्तरदायी वर्ग बनाना:

तत्वों का वर्ग (या जो भी अन्य पहलू अनुपात) रखने की चाल प्रतिशत का उपयोग करना है 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%




2. वर्गों के अंदर सामग्री जोड़ना

जब आप सीधे वर्ग के अंदर सामग्री नहीं जोड़ सकते हैं (यह उनकी ऊँचाई का विस्तार करेगा और वर्ग अब और वर्ग नहीं होंगे) तो आपको उनके अंदर बाल तत्व (उदाहरण के लिए मैं 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%;
}

परिणाम <- यह सुंदर बनाने के लिए कुछ स्वरूपण के साथ!



3. सामग्री प्रस्तुत करना

क्षैतिज रूप से:

यह बहुत आसान है, आपको बस इसमें जोड़ना text-align:centerहोगा .content
परिणाम

लंबवत संरेखण

यह गंभीर हो जाता है! चाल का उपयोग करना है

display:table;
/* and */
display:table-cell;
vertical-align:middle;

लेकिन हम display:table;पर .squareया .contentdivs का उपयोग नहीं कर सकते क्योंकि यह संघर्ष करता है position:absolute;इसलिए हमें .contentdiv के अंदर दो बच्चे पैदा करने की आवश्यकता है । हमारा कोड निम्नानुसार अपडेट किया जाएगा:

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%;
}




अब हम समाप्त कर चुके हैं और हम यहां परिणाम देख सकते हैं:

LIVE फुलस्क्रिन परिणाम

यहाँ संपादन योग्य बेला



2
@ d.raev हाँ। पेरेंटेज पैडिंग और मार्जिन की गणना पैरेंट की चौड़ाई के अनुसार की जाती है। गद्दी डेवलपर के
web-tiki

4
यह भी खूब रही। दूसरों के लिए बस एक सिर-अप: यदि आप उपयोग कर रहे हैं, तो आपको * { box-sizing: border-box; }.content div की ऊंचाई और चौड़ाई को 100% तक समायोजित करने की आवश्यकता होगी। :)
रोब फ्लॉर्टी

2
मार्जिन मान के पीछे पथरी क्या है? क्या होगा अगर मैं एक ग्रिड 5x5 सेट करना चाहता हूं?
कीवी १३४२

2
@ kiwi1342 एक पंक्ति में सभी मार्जिन + सभी चौड़ाई का योग 100% के बराबर होना चाहिए। तो 5x5 ग्रिड के लिए, आप तत्वों के प्रत्येक पक्ष पर 1% मार्जिन के साथ 18% चौड़ाई का उपयोग कर सकते हैं।
वेब-टिकी

1
बहुत खुबस। बस एक सिर: क्षैतिज और लंबवत केंद्र में, बस .content एक फ्लेक्सबॉक्स के साथjustify-content: center; align-items: center; flex-flow: column nowrap;
NonameSL

14

आप 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>


4
उपयोग न margin-left: -4px;करें margin-right:-4px। इसके बजाय नाबालिगों के क्षेत्र में असंगतता के साथ खिलवाड़ न करें, लेकिन एक रैपर पैरेंट-फ़ॉन्ट-आकार में 0 पर सेट करें और बच्चे के तत्वों की तुलना में 1rem(रिलेटिव-एम) पर रीसेट करें
रोको सी। बुल्जन

9

स्वीकृत उत्तर बहुत अच्छा है, हालाँकि इसके साथ किया जा सकता है 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/

यह एफएफ और क्रोम में परीक्षण किया गया है।


3
फिर भी, आप ऊँचाई को ठीक करने के लिए पैडिंग-बॉटम का उपयोग कर रहे हैं, इसलिए यह वास्तव में, उसी उत्तर को स्वीकार किया जाता है। फर्क सिर्फ इतना है कि ग्रिड कैसे बनाया जाता है, न कि स्क्वायर्ड ग्रिड।
निकाल दें

0

मैं विभिन्न राशन के उत्तरदायी बक्से के लिए इस समाधान का उपयोग करता हूं:

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 पर डेमो देखें


2
यह फायदेमंद होगा यदि आप अपने उत्तर के बारे में अधिक बताते हैं ... या एक JSFiddle भी शामिल करें
वेवसैलर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.