tl; डॉ: आइटम अलग तरह से आकार बदलने रहे हैं क्योंकि वे एक अलग flex-basis
, जो छवि आकार के आधार पर और मूल्य है कि वे ठोके शुरू कर रहा है (सिकुड़) से। प्रत्येक वस्तु को कम करना पड़ता है, लेकिन बड़ी चीजें एक बड़े शुरुआती बिंदु से कम हो जाती हैं, इसलिए वे सिकुड़ने के बाद भी बड़े होते हैं। (उनके max-width
से बड़े होने से रोकने के लिए देर से इन-द-एल्गोरिदम "क्लैंप" भी है; इस मामले में बड़ी चीजें पागल हो रही हैं। लेकिन महत्वपूर्ण बात यह है कि उनके घटते से उनके flex-basis
, और max-width
क्लैंप एक बाद का विचार है)
ठीक:। आप प्रत्येक फ्लेक्स आइटम एक ही फ्लेक्स-आधार देते हैं, जैसे flex-basis:250px
(उनके max-width
के समान), आपको शायद वह परिणाम मिल जाएगा जो आप ढूंढ रहे हैं। अपडेट किया गया बेला: http://jsfiddle.net/brcrnj80/10/
(के रूप में एक और जवाब में बताया गया है, flex: 1 1 0
(जो और अधिक संक्षेप में flex:1
के रूप में व्यक्त किया जा सकता है) भी काम करेंगे - कि flex-basis
0 के लिए सेटिंग, और को फ्लेक्स आइटम बढ़ने मिलती है (के बजाय है उन्हें करने के लिए मजबूर हटना) वहाँ से, उनकी अधिकतम-चौड़ाई अप करने के लिए उत्पादन एक ही परिणाम है, बस एक अलग मार्ग के माध्यम से)
अधिक व्याख्या:।। यहाँ क्या होता है:
- डिफ़ॉल्ट रूप से, सब कुछ
flex-basis:auto
है, जो इस मामले में है कि प्रत्येक फ्लेक्स आइटम अपनी छवि की आंतरिक चौड़ाई पर फ्लेक्सिंग शुरू करता है। तो आपके विशाल-छवि फ्लेक्स आइटमों में एक बड़ा फ्लेक्स आधार होता है, और आपकी छोटी छवि फ्लेक्स आइटमों में एक छोटा फ्लेक्स आधार होता है।
- हम देखते हैं कि फ्लेक्स आइटम '
flex-basis
मानों का योग कंटेनर से बड़ा है या नहीं। वे हैं (क्योंकि आपकी कुछ छवियां बहुत बड़ी हैं)। तो, हमें चीजों को कम करना है।
- हम प्रत्येक फ्लेक्स आइटम को "काफी", को
flex-basis
से शुरू करते हैं, सभी आइटम फिट करने के लिए जो भी भाग आवश्यक है, उसे कम करें। तो उदा। प्रत्येक आइटम इसकी चौड़ाई का 1/4 खो देता है, उदाहरण के लिए (यदि यह सही कंटेनर फिट करने के लिए सही अंश होता है)।
- अब, हम जांचते हैं कि इनमें से कोई भी "टेंटेटिव" आइटम आकार आइटम के
max-width
का उल्लंघन करता है या नहीं। बड़ी छवियों के साथ आपकी फ्लेक्स आइटम इस स्थिति में उनके max-width
का उल्लंघन करेगा, उदाहरण के लिए भले ही हम अपने आकार के 1/4 (मेरे उदाहरण में) ले जाएं, फिर भी वे अपने max-width:250px
से काफी बड़े हैं।इस तरह के किसी भी उल्लंघन के लिए, हम अपनी अधिकतम चौड़ाई पर आइटम को फ्रीज करें, और हम घटते प्रक्रिया को पुनरारंभ करें। (हम min-width
उल्लंघनों के लिए कुछ ऐसा करते हैं।)
- पुनरारंभ करने वाली प्रक्रिया में, बड़ी छवियां 250px-width पर जमे हुए हैं, और छोटी छवियां सभी सिकुड़ने के लिए ज़िम्मेदार हैं।
इसलिए यदि हर किसी के पास 250px चौड़ाई रखने के लिए पर्याप्त जगह नहीं है, तो आपके छोटे फ्लेक्स आइटम सभी सिकुड़ने के लिए समाप्त होते हैं। (जब तक हम पर्याप्त नहीं हैं कि को कम करने के पहले दौर में बड़े आइटम 250px से कम हो जाएंगे - उदाहरण के लिए यदि हम प्रत्येक आइटम को 90% तक कम कर रहे हैं, तो कहें। हालांकि, छोटी चीजें 90% तक भी कम हो जाएंगे, और वे min-width:60px
से कम होंगे, और वे उस आकार में जमे हुए होंगे और हम ऊपर वर्णित उसी तरह से सिकुड़ने को फिर से शुरू करेंगे)।
यदि आप उत्सुक हैं तो अधिक जानकारी के लिए the "Resolving Flexible Lengths" chunk of the spec देखें।
मुझे एक स्पष्टीकरण की आवश्यकता है। क्या आपका मतलब है कि वे फ्लेक्स कंटेनर की सीमा से अधिक क्यों हैं? या वे अलग-अलग दरों पर कम से कम क्यों कम हो जाते हैं? क्योंकि आपकी पहेली (क्रोम में) को देखते हुए वे एक ही समय में सभी आकार, यहां तक कि जब मैं पहेली चलाता हूं और सबसे बड़ी छवि अभी भी भर रही है, तो वे सभी एक ही समय में आकार बदलते हैं। छोटी छवियां पहले न्यूनतम-चौड़ाई तक लगती हैं, लेकिन यह मेरी तरफ एक धारणा मुद्दा हो सकती है क्योंकि छवियां न्यूनतम मान तक पहुंचती हैं। – fnostro
वर्थ इंगित करता है कि एक वेबकिट बग है (सभी सफारी संस्करण जहां फ्लेक्सबॉक्स समर्थित है, मोबाइल शामिल है) जो एक फ्लेक्स कंटेनर को फ्लेक्स आइटम को लपेटने से रोकता है जब उन्हें फ्लेक्स आइटम की न्यूनतम चौड़ाई (https://bugs.webkit.org/ show_bug.cgi? id = 136,041)। यह एक बहुत ही बुरा बग है और 'मिनी-चौड़ाई' फ्लेक्स आइटमों के साथ फ्लेक्सबॉक्स का उपयोग करने की कोशिश करता है जो लगभग बेकार है (मोबाइल उपकरणों पर सफारी की सर्वव्यापी प्रकृति के कारण)। – Adam
@fnostro (कम से कम एफएफ में) फूल तब तक आकार बदलने शुरू नहीं होता जब तक कि मशरूम काफी छोटे न हों। क्या यह क्रोम में नहीं है (इस समय क्रोम तक कोई पहुंच नहीं है) –