2013-09-06 24 views
5

मैंने अभी देखा है http://csswizardry.com/2013/02/introducing-csswizardry-grids/ और इसके लिए डेमो (http://csswizardry.com/csswizardry-grids/)। मुझे लगता है कि यह सीएसएस में ग्रिड को हल करने के लिए एक बहुत अच्छा तरीका है। इसलिए मैंने स्रोत कोड को देखने के लिए जांच की, यह कैसे किया गया और मैंने एक छोटी सी चीज़ देखी, जिसे मैं वास्तव में नहीं समझ सकता कि यह कैसे किया गया था।ग्रिड सिस्टम और इनलाइन-ब्लॉक स्पेसिंग

यह ग्रिड सिस्टम फ्लोट्स का उपयोग नहीं कर रहा है लेकिन इनलाइन-ब्लॉक तत्व, जो एक अच्छी बात है। लेकिन हर बार जब मैं प्रतिशत चौड़ाई कॉलम/ग्रिड इत्यादि के लिए इनलाइन ब्लॉक का उपयोग कर रहा हूं, तो मेरे पास यह इनलाइन ब्लॉक स्पेसिंग है। मुझे पता है कि इस दूरी से छुटकारा पाने के लिए कई तरीके हैं (अधिकतर केवल आपके एचटीएमएल में बदलाव): http://css-tricks.com/fighting-the-space-between-inline-block-elements/

लेकिन ग्रिड सिस्टम में मैंने आपको दिखाया कि इनमें से कोई भी फिक्स नहीं है (जहां तक ​​मैं देख सकता हूं) और अभी भी यदि आप स्रोत कोड की जांच करते हैं तो कोई इनलाइन-ब्लॉक स्पेसिंग नहीं है। बस आप समस्या मैं ज्यादातर यहाँ दिखाने के लिए एक त्वरित बेला है: http://jsfiddle.net/nN8mV/

एचटीएमएल

<p>Floating columns (width 33.3%)</p> 
<div class="grid cf"> 
    <div class="grid__item">Test</div> 
    <div class="grid__item">Test</div> 
    <div class="grid__item">Test</div> 
</div> 
<p>Inline Block columns (width 33.3%)</p> 
<div class="grid grid--inlineblock"> 
    <div class="grid__item">Test</div> 
    <div class="grid__item">Test</div> 
    <div class="grid__item">Test</div> 
</div> 

सीएसएस

.grid { 
    margin-bottom: 20px; 
} 
    .grid__item { 
     float: left; 
     width: 33.3%; 
     background: red; 
    } 
    .grid--inlineblock .grid__item { 
     float: none; 
     display: inline-block; 
    } 

आप शायद जानते हैं कि, लेकिन 33.3% चौड़ाई काम नहीं करता है , इस दूरी के कारण। ग्रिड सिस्टम में यह समस्या प्रतीत नहीं होती है, हालांकि यह "डिस्प्ले: इनलाइन-ब्लॉक" का भी उपयोग कर रहा है। तो मेरा सवाल: सीएसएस जादूगर ने इस समस्या को कैसे हल किया? मैं इसे समझ नहीं सकता और HTML को बदल नहीं सकता (ऊपर सीएसएस ट्रिक्स लिंक देखें) वास्तव में सीएमएस उत्पन्न सामग्री या अन्य सामान की वजह से वास्तव में काम नहीं करता है, जहां आप अपने एचटीएमएल को अनुकूलित नहीं कर सकते हैं।

आपकी मदद के लिए अग्रिम धन्यवाद।

Csswizardry से

उत्तर

4

डेमो आप लिंक का उपयोग करता टिप्पणी एचटीएमएल हैक:

<div class="grid__item"></div><!-- 
--><div class="grid__item"></div> 

उनके डेमो स्रोत की जाँच करें।

भी अद्यतन अपने jsfiddle

+0

ओह मेरा बुरा, स्रोत के अंदर टिप्पणियों की पूरी तरह से निगरानी करें। मैं इसके बजाय सीएसएस पर भी केंद्रित था :) धन्यवाद, यह मेरे प्रश्न का उत्तर देता है। – Daniel

1

आप अपने HTML को बदल नहीं सकते हैं, तो आप कंटेनर font-size: 0 देना और स्तंभों में font-size रीसेट या स्तंभों नकारात्मक हाशिए देने के लिए (परेशानी हो सकता है) होगा।

अधिक विवरण: http://css-tricks.com/fighting-the-space-between-inline-block-elements/

+0

आप सही हैं, लेकिन इस विधि में बहुत सारे नुकसान हैं (सफारी 5 + सर्च इंजन + ओल्ड एंड्रॉइड)। जहां तक ​​मैं लाल हूं, अभी तक कोई अच्छा सीएसएस-फ़िक्स नहीं है, इसलिए हमें अब HTML टिप्पणियों के साथ रहना होगा ... – Daniel

+0

हाँ, मुझे पता है। मैं बस सीएसएस "हैक्स" को इंगित कर रहा था क्योंकि पोस्टर ने उद्धृत किया कि वह HTML को नहीं बदल सका। –

0

आप निम्न कर सकता है:

.grid--inlineblock { 
    word-spacing: -4px; 
} 

और बच्चे मद पर रीसेट शब्द-रिक्ति

.grid--inlineblock .grid__item { 
    float: none; 
    display: inline-block; 
    word-spacing: normal; 
} 

आप चेकआउट कर सकते हैं this बेवकूफ।

मुझे यकीन है कि यह सबसे अच्छी तकनीक है लेकिन ऐसा लगता है कि यह काम करता है।

+0

धन्यवाद, लेकिन दुर्भाग्य से यह हमेशा आपके द्वारा उपयोग किए जा रहे फ़ॉन्ट पर निर्भर करता है। जहां तक ​​मुझे पता है कि अभी तक कोई विश्वसनीय सीएसएस हैक नहीं है। अब आपको अपने एचटीएमएल में व्हाइटस्पेस को हटाने की जरूरत है। लेकिन यह बहुत अच्छी तरह से काम करता है। – Daniel

+0

आह हाँ मेरा बुरा है, लेकिन मुझे लगता है कि यह तब तक एक काम है जब तक कि आप कुछ बेहतर नहीं पाते हैं, यदि आप टिप्पणियों का उपयोग करना पसंद नहीं करते हैं। –

+0

फ्लेक्सबॉक्स के पास सभ्य समर्थन होने से पहले किसी को समाधान के साथ आने की जरूरत है। इसके बाद हमें शायद ग्रिड सिस्टम के लिए इनलाइन-ब्लॉक/फ्लोट की आवश्यकता नहीं होगी :) – Daniel

0

फ्लेक्सबॉक्स आजकल इस समस्या को हल करता है।

इसके बजाय आप निम्नलिखित कर सकता है:

.grid--inlineblock .grid__item { 
     display: flex; 
} 

और वह रिक्ति मुद्दों को हल करना चाहिए।

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