संकट
मेरे पास <select>
इसके <option>
पाठ मूल्यों में से एक बहुत लंबा है। मैं <select>
आकार बदलना चाहता हूं, इसलिए यह अपने माता-पिता की तुलना में कभी व्यापक नहीं है, भले ही उसे अपने प्रदर्शित पाठ को काट देना पड़े। max-width: 100%
ऐसा करना चाहिए।
आकार बदलने से पहले:
मुझे आकार बदलने के बाद क्या चाहिए:
लेकिन अगर आप इस jsFiddle उदाहरण को लोड करते हैं और परिणाम पैनल की चौड़ाई से छोटा होने का आकार बदलते हैं<select>
, तो आप देख सकते हैं कि इसके अंदर का चयन <fieldset>
इसकी चौड़ाई को कम करने में विफल रहता है।
मैं वास्तव में आकार बदलने के बाद क्या देख रहा हूं:
हालांकि, ठीक से एक पैमाने के बजाय के साथ बराबर पृष्ठ<div>
<fieldset>
। आप देख सकते हैं और अधिक आसानी से अपने परिवर्तनों का परीक्षण करता है, तो आप एक <fieldset>
और एक <div>
एक पृष्ठ पर एक दूसरे के बगल । और अगर आप आसपास के <fieldset>
टैग को हटा देते हैं , तो आकार बदलने का काम करता है। <fieldset>
टैग किसी भी तरह क्षैतिज आकार बदलने को तोड़ने के लिए खड़ी कर रहा है।
<fieldset>
कार्य करता है के रूप में अगर वहाँ एक CSS नियम है fieldset { min-width: min-content; }
। ( min-content
इसका मतलब है, मोटे तौर पर, सबसे छोटी चौड़ाई जो एक बच्चे को अतिप्रवाह का कारण नहीं बनाती है।) अगर मैं <fieldset>
एक के <div>
साथmin-width: min-content
प्रतिस्थापित करता हूं , तो यह बिल्कुल वैसा ही दिखता है। फिर भी min-content
मेरी शैलियों में ब्राउज़र डिफ़ॉल्ट स्टाइलशीट में या फ़ायरबग के सीएसएस इंस्पेक्टर में कोई नियम नहीं है । मैंने फायरबग<fieldset>
के सीएसएस इंस्पेक्टर पर और फ़ायरफ़ॉक्स के डिफ़ॉल्ट स्टाइलशीट रूपों में हर दिखने वाली शैली को ओवरराइड करने की कोशिश की । लेकिन इससे कोई फायदा नहीं हुआ। विशेष रूप से ओवरराइडिंग min-width
औरwidth
कुछ भी नहीं किया।
कोड
फ़ील्डसेट का HTML:
<fieldset>
<div class="wrapper">
<select id="section" name="section">
<option value="-1"></option>
<option value="1501" selected="selected">Sphinx of black quartz, judge my vow. The quick brown fox jumps over the lazy dog.</option>
<option value="1480">Subcontractor</option>
<option value="3181">Valley</option>
<option value="3180">Ventura</option>
<option value="3220">Very Newest Section</option>
<option value="1481">Visitor</option>
<option value="3200">N/A</option>
</select>
</div>
</fieldset>
मेरा सीएसएस कि काम किया जाना चाहिए, लेकिन नहीं है:
fieldset {
/* hide fieldset-specific visual features: */
margin: 0;
padding: 0;
border: none;
}
select {
max-width: 100%;
}
चूक के width
गुणों को रीसेट करने से कुछ नहीं होता:
fieldset {
width: auto;
min-width: 0;
max-width: none;
}
आगे सीएसएस जिसमें मैं कोशिश करता हूं और समस्या को ठीक करने में विफल रहता हूं :
/* try lots of things to fix the width, with no success: */
fieldset {
display: block;
min-width: 0;
max-width: 100%;
width: 100%;
text-overflow: clip;
}
div.wrapper {
width: 100%;
}
select {
overflow: hidden;
}
अधिक जानकारी
समस्या इस अधिक व्यापक, अधिक जटिल jsFiddle उदाहरण में भी होती है , जो उस वेब पेज के समान है जो मैं वास्तव में ठीक करने की कोशिश कर रहा हूं। आप देख सकते हैं कि <select>
समस्या यह नहीं है - इनलाइन-ब्लॉक div
भी आकार बदलने में विफल रहता है। हालांकि यह उदाहरण अधिक जटिल है, मैं मानता हूं कि ऊपर के साधारण मामले के लिए फिक्स इस अधिक जटिल मामले को भी ठीक कर देगा।
[संपादित करें: नीचे ब्राउज़र समर्थन विवरण देखें।]
इस समस्या के बारे में एक उत्सुक बात यह है कि यदि आप सेट करते हैंdiv.wrapper { width: 50%; }
, <fieldset>
तो बिंदु पर ही आकार बदलना बंद हो जाता है , तो पूर्ण आकार <select>
व्यूपोर्ट के किनारे से टकरा जाता था। आकार बदलने के रूप में अगर ऐसा <select>
है width: 100%
, भले ही ऐसा <select>
लगता है कि होता है width: 50%
।
आप तो देना <select>
हीwidth: 50%
, उस व्यवहार नहीं होती है; चौड़ाई बस सही ढंग से सेट है।
मैं उस अंतर का कारण नहीं समझता। लेकिन यह प्रासंगिक नहीं हो सकता है।
मुझे यह भी समान प्रश्न मिला कि HTML फ़ील्डसेट बच्चों को अनिश्चित काल तक विस्तारित करने की अनुमति देता है । पूछने वाला कोई समाधान नहीं ढूंढ सका और अनुमान लगाता है कि हटाने के अलावा कोई उपाय नहीं है <fieldset>
। लेकिन मैं सोच रहा हूं, अगर <fieldset>
प्रदर्शन को सही बनाना असंभव है, तो ऐसा क्यों है? क्या में <fieldset>
की कल्पना या डिफ़ॉल्ट सीएसएस ( इस सवाल का रूप ) इस व्यवहार का कारण बनता है? यह विशेष व्यवहार शायद कहीं दस्तावेज़ीकृत किया जाता है, क्योंकि कई ब्राउज़र इस तरह से काम करते हैं।
पृष्ठभूमि लक्ष्य और आवश्यकताओं
जिस कारण से मैं यह करने की कोशिश कर रहा हूं वह एक मौजूदा पृष्ठ के लिए मोबाइल शैलियों को बड़े रूप में लिखने के हिस्से के रूप में है। प्रपत्र में कई खंड होते हैं, और इसका एक भाग एक में लिपटा होता है <fieldset>
। एक स्मार्टफोन पर (या यदि आप अपनी ब्राउज़र विंडो को छोटा बनाते हैं), तो पेज का हिस्सा <fieldset>
बाकी फॉर्म की तुलना में बहुत व्यापक है। अधिकांश रूप इसकी चौड़ाई को ठीक करते हैं, लेकिन यह अनुभाग उस अनुभाग को देखने के <fieldset>
लिए उपयोगकर्ता को ज़ूम आउट या स्क्रॉल करने के लिए बाध्य नहीं करता है।
मैं बस <fieldset>
इसे हटाने से सावधान हूं , क्योंकि यह एक बड़े ऐप में कई पृष्ठों पर उत्पन्न होता है, और मुझे यकीन नहीं है कि सीएसएस या जावास्क्रिप्ट में चयनकर्ता इस पर निर्भर हो सकते हैं।
अगर मुझे जरूरत है तो मैं जावास्क्रिप्ट का उपयोग कर सकता हूं, और एक जावास्क्रिप्ट समाधान कुछ भी नहीं से बेहतर है। लेकिन अगर जावास्क्रिप्ट ऐसा करने का एकमात्र तरीका है, तो मैं केवल सीएसएस और एचटीएमएल का उपयोग करके यह संभव नहीं है, इसके लिए एक स्पष्टीकरण सुनने के लिए उत्सुक हूं।
संपादित करें: ब्राउज़र समर्थन
साइट पर, मुझे इंटरनेट एक्सप्लोरर 8 और बाद में (हमने अभी IE7 के लिए समर्थन छोड़ दिया है), नवीनतम फ़ायरफ़ॉक्स और नवीनतम क्रोम का समर्थन करने की आवश्यकता है। यह विशेष पेज iOS और Android स्मार्टफ़ोन पर भी काम करना चाहिए। इंटरनेट एक्सप्लोरर 8 के लिए थोड़ा अपमानजनक लेकिन अभी भी प्रयोग करने योग्य व्यवहार स्वीकार्य है।
मैंने अलग-अलग ब्राउज़रों पर अपना टूटा fieldset
उदाहरण देखा । यह वास्तव में पहले से ही इन ब्राउज़रों में काम करता है:
- इंटरनेट एक्सप्लोरर 8, 9, और 10
- क्रोम
- Android के लिए क्रोम
यह इन ब्राउज़रों में टूट जाता है:
- फ़ायरफ़ॉक्स
- Android के लिए फ़ायरफ़ॉक्स
- इंटरनेट एक्सप्लोरर 7
इस प्रकार, एकमात्र ब्राउज़र जिसकी मुझे परवाह है कि वर्तमान कोड फ़ायरफ़ॉक्स (डेस्कटॉप और मोबाइल दोनों पर) में है। यदि कोड ठीक किया गया था तो यह फ़ायरफ़ॉक्स में किसी अन्य ब्राउज़र में इसे तोड़ने के बिना काम करता है, जो मेरी समस्या को हल करेगा।
साइट HTML टेम्पलेट इंटरनेट एक्सप्लोरर सशर्त टिप्पणियों का उपयोग इस तरह की .ie8
और तत्वों को जोड़ने के .oldie
लिए करती <html>
है। यदि आप IE में स्टाइल अंतर के आसपास काम करने की आवश्यकता है तो आप अपने सीएसएस में उन कक्षाओं का उपयोग कर सकते हैं। जोड़े गए वर्ग HTML5 बॉयलरप्लेट के इस पुराने संस्करण के समान हैं ।
<fieldset>
(या div.wrapper
) जो भी चौड़ाई की जरूरत है, और select { width:100% }
। max-width
तत्व को अपने माता-पिता की मूल चौड़ाई का कुछ% देने के लिए प्रकट होता है , फिर स्केल नहीं करता है, जबकि width
अपने माता-पिता के साथ स्केल करता है। मुझे लगता है कि वही करेगा जो आप चाहते हैं (लेकिन मुझे गलत समझा जा सकता था)। अपने अधिक जटिल फ़िडल में, बाएं कॉलम में फ़ील्ड्स को%-जोखिम, और मिन-पिक्सेल-चौड़ाई देने की कोशिश करें। फिर खेतों को दाईं ओर 100 - (बाएं-फ़ील्ड -% - चौड़ाई)% चौड़ाई दें।