प्रदर्शन का उपयोग करने के लाभ: इनलाइन-ब्लॉक बनाम फ्लोट: सीएसएस में छोड़ दिया गया


127

आम तौर पर, जब हम DIVsएक पंक्ति में एक से अधिक होना चाहते हैं तो हम उपयोग करेंगे float: left, लेकिन अब मुझे इसकी चाल का पता चलाdisplay:inline-block

उदाहरण लिंक यहाँ । यह मुझे लगता है कि एक पंक्ति में एक display:inline-blockबेहतर तरीका है align DIVs, लेकिन क्या कोई कमियां हैं? यह दृष्टिकोण कम लोकप्रिय क्यों है फिर floatचाल?


@ मोहक वह विशेष प्रश्न है inline, जिसके बारे में नहीं inline-block। लेकिन संबंधित में पहला अच्छा है: stackoverflow.com/a/11823622/918414
थिंकिंगस्टिफ़


2
उदाहरण लिंक मर चुका है
information_interchange

जवाबों:


156

3 शब्दों में: inline-blockबेहतर है।

इनलाइन ब्लॉक

display: inline-blockदृष्टिकोण के लिए एकमात्र दोष यह है कि IE7 में और एक तत्व के नीचे केवल तभी प्रदर्शित किया जा सकता है inline-blockजब यह पहले inlineसे ही डिफ़ॉल्ट रूप से हो। इसका मतलब यह है कि एक <div>तत्व का उपयोग करने के बजाय आपको एक तत्व का उपयोग करना होगा <span>। यह वास्तव में एक बहुत बड़ी कमी नहीं है क्योंकि शब्दार्थ <div>पृष्ठ को विभाजित करने के लिए है, जबकि एक पृष्ठ के <span>एक अंतराल को कवर करने के लिए है, इसलिए बहुत बड़ा शब्दार्थ अंतर नहीं है। की एक बड़ी लाभ display:inline-blockयह है कि जब अन्य डेवलपर्स बाद में किसी समय अपने कोड को बनाए रखने रहे हैं, यह बहुत अधिक स्पष्ट क्या है display:inline-blockऔर text-align:right एक से पूरा करने के लिए कोशिश कर रहा है float:leftया float:rightबयान। inline-blockदृष्टिकोण का मेरा पसंदीदा लाभ यह है कि इसका उपयोग करना आसान है vertical-align: middle, line-heightऔरtext-align: centerतत्वों को पूरी तरह से केंद्र में, एक तरह से जो सहज है। मुझे मोज़िला ब्लॉग पर क्रॉस-ब्राउज़र इनलाइन-ब्लॉक को लागू करने के तरीके पर एक शानदार ब्लॉग पोस्ट मिला । यहाँ ब्राउज़र संगतता है

फ्लोट

कारण यह है कि floatविधि का उपयोग करना आपके पृष्ठ के लेआउट के लिए अनुकूल नहीं है, क्योंकि floatCSS संपत्ति मूल रूप से केवल एक छवि (पत्रिका शैली) के आसपास पाठ लपेटने के लिए थी और डिजाइन द्वारा, सामान्य पृष्ठ लेआउट उद्देश्यों के लिए सबसे उपयुक्त नहीं है। बाद में फ्लोट किए गए तत्वों को बदलते समय, कभी-कभी आपके पास पोज़िशनिंग समस्याएँ होंगी क्योंकि वे पृष्ठ प्रवाह में नहीं हैं । एक और नुकसान यह है कि इसे आम तौर पर एक उपसर्ग की आवश्यकता होती है अन्यथा यह पृष्ठ के पहलुओं को तोड़ सकता है। स्पष्ट उपसर्ग के लिए आवश्यक तत्व के बाद एक तत्व जोड़ने के लिए उनके माता-पिता को उनके आसपास गिरने से रोकने के लिए है जो सामग्री से शैली को अलग करने के बीच अर्थ रेखा को पार करता है और इस प्रकार वेब विकास में एक विरोधी पैटर्न है

ऊपर दी गई लिंक में बताई गई किसी भी श्वेत स्थान की समस्या को आसानी से white-spaceCSS संपत्ति के साथ तय किया जा सकता है।

संपादित करें:

साइट डिज़ाइन वेब डिज़ाइन सलाह के लिए एक बहुत विश्वसनीय स्रोत है और उन्हें लगता है कि मेरे पास एक ही राय है:

यदि आप CSS लेआउट के लिए नए हैं, तो आपको यह सोचने के लिए क्षमा कर दिया जाएगा कि कल्पनाशील तरीकों से CSS फ्लोट का उपयोग करना कौशल की ऊंचाई है। यदि आपने कई सीएसएस लेआउट ट्यूटोरियल के रूप में उपभोग किया है, तो आप पा सकते हैं, आप मान सकते हैं कि मास्टरिंग फ़्लोट्स बीतने का एक संस्कार है। आप सरलता से चकित हो जाएंगे, जटिलता से चकित हो जाएंगे, और जब आप अंततः समझ जाएंगे कि कैसे काम करता है तो आप उपलब्धि हासिल करेंगे।

मूर्ख मत बनो। आपका ब्रेनवॉश किया जा रहा है।

http://www.sitepoint.com/give-floats-the-flick-in-css-layouts/

2015 अपडेट - फ्लेक्सबॉक्स आधुनिक ब्राउज़रों के लिए एक अच्छा विकल्प है :

.container {
  display: flex; /* or inline-flex */
}

.item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

और जानकारी

21 दिसंबर, 2016 अपडेट

बूटस्ट्रैप 4 IE9 के लिए समर्थन को हटा रहा है, और इस प्रकार पंक्तियों से फ़्लोट्स से छुटकारा पा रहा है और फुल फ्लेक्सबॉक्स जा रहा है।

पुल अनुरोध # 21389


4
"क्लियरफिक्स" सिर्फ एक नाम है; "फिक्स" गलत अपेक्षाओं और / या गलत ब्राउज़र कार्यान्वयन को ठीक करने का संकेत देता है। मैं (खुशी से) सहमत हूं कि तैरने / समाशोधन के विकल्प हैं, लेकिन इसके बारे में स्वाभाविक रूप से टूट या तय नहीं है।
टिम मेडोरा

10
@ एलेक्स - क्या इनलाइन-ब्लॉक तत्वों के बीच व्हाट्सएप को हटाने के लिए एक गैर-हैकी, क्रॉस-ब्राउज़र-संगत तरीका है जो अलग-अलग लाइनों पर हैं? मैं फ़्लोट्स का उपयोग बंद करने में सक्षम होना चाहता हूं लेकिन इस समस्या के बारे में सबसे अच्छी लिंक जो मैं पा सकता हूं ( यहां और यहां ) असंतोषजनक है। आप white-spaceसंपत्ति का उल्लेख करते हैं - क्या आप इसे समझा सकते हैं?
एंटीइनोम

3
@ एलेक्स - धन्यवाद, यह बहुत अच्छा है, लेकिन मुझे अभी भी फ्लोट-के-साथ-आधुनिक-स्पष्ट दृष्टिकोण थोड़ा अधिक बनाए रखने योग्य लगता है, क्योंकि किसी दिन मैं letter-spacingअपने सीएसएस में कहीं और अनुकूलित करने के लिए नहीं टूटूंगा।
एंटीइनोम

1
क्यों बूटस्ट्रैप अभी भी अपने ग्रिड सिस्टम के लिए फ्लोट का उपयोग कर रहा है? क्या वे लेआउट नहीं हैं?
अज़ादिस्त

2
ध्यान रखें कि इनलाइन-ब्लॉक तत्वों के आसपास सफेद स्थान जोड़ता है। यदि आप इसे ग्रिड के लिए उपयोग कर रहे हैं, या इस सफेद स्थान को नहीं चाहते हैं, तो आपको इसके लिए अतिरिक्त स्टाइलिंग / HTML हैक को जोड़ना होगा। देखें: css-tricks.com/fighting-the-space-between-inline-block-elements/...
kretzm

23

जब मैं मानता हूं कि सामान्य रूप inline-blockसे बेहतर है, तो एक अतिरिक्त बात यह है कि यदि आप प्रतिशत ग्रिड का उपयोग कर रहे हैं तो एक उत्तरदायी ग्रिड बनाने के लिए (या यदि आप पिक्सेल-परिपूर्ण चौड़ाई चाहते हैं):

यदि आप inline-blockउस ग्रिड का उपयोग कर रहे हैं जो कुल 100% या 100% चौड़ाई के पास है, तो आपको यह सुनिश्चित करने की आवश्यकता है कि आपके HTML मार्कअप में कॉलम के बीच कोई सफेद स्थान नहीं है

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

यदि किसी भी कारण से आप HTML मार्कअप (जैसे एक प्रतिबंधक सीएमएस) को नियंत्रित नहीं कर सकते हैं, तो आप यहां बताए गए ट्रिक्स को आजमा सकते हैं, या आपको इनलाइन-ब्लॉक के बजाय फ्लोट से समझौता करने और उपयोग करने की आवश्यकता हो सकती है। वहाँ भी बदसूरत सीएसएस चाल है कि केवल चरम परिस्थितियों में इस्तेमाल किया जाना चाहिए, जैसे font-size:0;स्तंभ कंटेनर पर फिर प्रत्येक स्तंभ के भीतर फ़ॉन्ट आकार फिर से

उदाहरण के लिए:


क्या नो-व्हाट्सएप के बीच कोई संभावित बदलाव है, बीच में, शायद div+(whitespace) {display:none}या कुछ और?
NoBugs

1
इसके पहले वाक्य के बाद तीसरा पैराग्राफ देखें ... विशेष रूप से जुड़ा हुआ प्रश्न देखें
user56reinstatemonica8

@ नोट केवल फ़ॉन्ट-आकार लागू करते हैं: 0; युक्त तत्व के लिए, यदि आप इनलाइन-ब्लॉक के भीतर तत्वों पर सेट विशिष्ट फ़ॉन्ट आकार हैं, तो बस देखते रहें !!
जय

@ जय बिल्कुल, और चूंकि स्टाइलिंग / दृश्य एचटीएमएल / मॉडल बनाने की प्रक्रिया से विमुख होना चाहिए, जो एक बुरा अभ्यास है। (क्या होगा यदि आप एक सेवा का उपयोग करते हैं जो आपको दिया है <div class="inlinething">hi</div> <div class="inlinething">there</div> more content here... ?)
NoBugs

4

यदि आप divपिक्सेल के साथ सटीक संरेखित करना चाहते हैं , तो फ्लोट का उपयोग करें। inline-blockहमेशा लगता है कि आपको कुछ पिक्सेल काट लेना चाहिए (कम से कम IE में)


6
हाँ ऐसा इसलिए है क्योंकि आपको तत्वों के बीच रिक्त स्थान का उपयोग करने से बचना होगा क्योंकि इनलाइन-ब्लॉक इनलाइन तत्वों के समान ही रिक्त स्थान को लेते हैं। इनलाइन-ब्लॉक टैग्स को एक-दूसरे से कसकर रखें और पिक्सल की कोई समस्या न हो।
बेन सिनक्लेयर

इसके अलावा यह तत्वों पर डिफ़ॉल्ट पैडिंग / मार्जिन के साथ एक ब्राउज़र अंतर हो सकता है .. खैर कम से कम अतीत में मैंने हमेशा किया है * {padding:0px; margin:0px; }क्योंकि इससे मेरी कोडिंग को संतुलित करने में मदद मिलती है
गुस्सा 84

क्या यही कारण है कि बूटस्ट्रैप (शायद अन्य) इसका उपयोग इनलाइन-ब्लॉक I आश्चर्य के बजाय करते हैं?
NoBugs 15

1

आप यहाँ गहराई में उत्तर पा सकते हैं ।

लेकिन सामान्य तौर पर floatआपको जागरूक होने और आसपास के तत्वों और inline-blockलाइन तत्वों के लिए सरल तरीके की देखभाल करने की आवश्यकता है ।

धन्यवाद


1

इनलाइन-ब्लॉक के बारे में एक विशेषता है जो हालांकि सीधे-आगे नहीं हो सकती है। वह यह है कि CSS में वर्टिकल-अलाइन के लिए डिफ़ॉल्ट वैल्यू बेसलाइन है। यह कुछ अप्रत्याशित संरेखण व्यवहार का कारण हो सकता है। इस लेख को देखें।

http://www.brunildo.org/test/inline-block.html

इसके बजाय, जब आप फ्लोट करते हैं: बाएं, div एक दूसरे से स्वतंत्र होते हैं और आप आसानी से मार्जिन का उपयोग करके उन्हें संरेखित कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.