मेरी सूची आइटम बुलेट फ़्लोटिंग तत्वों को ओवरलैप क्यों करती है


166

मेरे पास एक (XHTML स्ट्रिक्ट) पेज है जहां मैं टेक्स्ट के नियमित पैराग्राफ के साथ एक इमेज फ्लोट करता हूं। जब पैराग्राफ के बजाय किसी सूची का उपयोग किया जाता है, तब तक सब ठीक रहता है। सूची की बुलेट फ्लोट की गई छवि को ओवरलैप करती है।

सूची या सूची आइटम के मार्जिन को बदलने से कोई मदद नहीं मिलती है। मार्जिन पृष्ठ के बाईं से की जाती है, लेकिन नाव सही करने के लिए सूची आइटम धक्का अंदरli ही। इसलिए मार्जिन केवल तभी मदद करता है जब मैं इसे छवि की तुलना में व्यापक बनाता हूं।

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

सेटिंग li { list-style-position: inside }सामग्री के साथ-साथ गोलियों को स्थानांतरित करती है, लेकिन यह उन रेखाओं का कारण भी बनती है जो बुलेट के साथ गठबंधन करने के लिए ऊपर पंक्ति के साथ गठबंधन करने के बजाय लपेटना शुरू करती हैं।

समस्या स्पष्ट रूप से बॉक्स के बाहर दी गई बुलेट के कारण होती है, बॉक्स की सामग्री को दाईं ओर धकेलती है (स्वयं बॉक्स नहीं)। यह कैसे IE और FF स्थिति को संभालता है, और जहाँ तक मुझे पता है, कल्पना के अनुसार गलत नहीं है। सवाल यह है कि मैं इसे कैसे रोक सकता हूं?

जवाबों:


280

मुझे इस समस्या का हल मिल गया है। यह सुनिश्चित ul { overflow: hidden; }करने के लिए ulकि बॉक्स को सामग्री के बजाय फ्लोट द्वारा अलग धकेल दिया जाए, को लागू करना ।

लेआउट को ul { zoom: 1; }सुनिश्चित करने के लिए केवल IE6 को हमारी सशर्त टिप्पणियों में आवश्यकता है ul


1
+1: ग्रेट सीएसएस, मैंने एक गुड वर्सेटाइल सॉल्यूशन के लिए एक पागल की तरह खोज की और यहां यह एसओ पर है। केवल छोटी ड्रा बैक यह है कि ज़ूम प्रॉपर्टी सीएसएस को मान्य नहीं करती है, लेकिन मैंने परीक्षण किया और IE7 पर, IE8 आवश्यक नहीं है, इसलिए यह शायद IE6 के लिए ही है।
मार्को डेमायो

14
वास्तव में काम करने के लिए इसे प्राप्त करने के लिए मुझे भी आवेदन करना था: उल, राजभाषा {अतिप्रवाह: छिपा हुआ; पैडिंग-लेफ्ट: 40 पीएक्स; मार्जिन-वाम: 0; } ol li, ul li {सूची-शैली-स्थिति: बाहर; गद्दी-वाम: 0; } इसने ब्राउज़र में लगातार रेंडरिंग को मजबूर किया और IE6 को बुलेट दिखाने के लिए मजबूर किया। गोलियों को अन्यथा छिपा दिया गया था। उल {ज़ूम: 1; } अभी भी ie6 विशिष्ट सेटिंग्स में आवश्यक था।
मंडराके

1
तो MSIE में ऐसे हास्यास्पद BUG का हास्यास्पद सरल समाधान है।
एसएफ।

10
यह एक सही समाधान नहीं है। जैसा कि ब्लेज़मॉन्गर ने झटका का उल्लेख किया है, अगर छवि छोटी है और सूची बहुत लंबी है, तो सूची फ्लोटिंग छवि के आसपास नहीं बहेगी। यदि छवि बहुत चौड़ी है तो सूची में ऊपर से अंत तक एक बड़ा मार्जिन होगा।
यांग

2
अच्छा! मैं यह नहीं देख सकता कि यह कैसे समझ में आता है, हालांकि, जब ओवरफ्लो पर W3C डॉक पढ़ रहा है: w3schools.com/cssref/pr_pos_overflow.asp
MSC

66

Glen E. Ivey के समाधान में सुधार जोड़ना :

ul {
    list-style: outside disc;
    margin-left: 1em;
}
ul li {
    position: relative;
    left: 1em;
    padding-right: 1em;    
}​

http://jsfiddle.net/mblase75/TJELt/

मैं इस तकनीक को पसंद करता हूं, क्योंकि यह काम करता है जब सूची को फ्लोटिंग छवि के चारों ओर प्रवाह करने की आवश्यकता होती है, जबकि overflow: hiddenतकनीक नहीं होगी। हालांकि, यह भी जोड़ने के लिए आवश्यक है padding-right: 1emकरने के लिए liउन्हें अपने कंटेनर बह निकला से रखने के लिए।


मैं इस फिक्स को भी पसंद करता हूं क्योंकि शीर्ष ने मेरे ट्विटर बूटस्ट्रैप ड्रॉप डाउन को तोड़ दिया और मुझे हमेशा यह पता लगाने में मदद मिली कि उपरोक्त विधि अपराधी थी।
इयान होउर

2
इसके लिए धन्यवाद। अतिप्रवाह लागू करना: छिपा हुआ; कंटेनर उल ने फ्लोटेड ब्लॉक के चारों ओर ठीक से चलने से व्यक्तिगत लाइन आइटम में टेक्स्ट को रोका। इस उपाय ने किया टोटका!
१०

1
मैं इस समाधान के साथ एक छोटी लेकिन महत्वपूर्ण समस्या में भाग गया, और मैं आपके सुधार के लिए सुझाव देना चाहूंगा। मुझे यकीन नहीं है कि क्यों, लेकिन जब आप position: relative;लाइन आइटम में जोड़ते हैं , तो यह फ्लोटेड सामग्री के साथ एक स्टैकिंग समस्या पैदा करता है। मैंने पाया कि (क्रोम और फ़ायरफ़ॉक्स में) यह होवर करने के लिए कठिन था और फ्लोटेड सामग्री में लिंक पर क्लिक करें। मेरे लिए फिक्स position: relative; z-index: 1;फ्लोटेड तत्व को जोड़ना था , जो स्टैकिंग समस्या को हल करने के लिए लग रहा था।
jsdalton

7
दुर्भाग्य से, IE 10 पर, गोलियां फ्लोटिंग तत्व के साथ ओवरलैप करती हैं।
मुनव्वर

1
जबकि ul {overflow: hidden;}सभी ब्राउज़रों में इस समस्या को हल किया गया था, उपरोक्त समाधान प्रिंस एक्सएमएल के साथ इस मुद्दे के लिए एकमात्र कार्यशील उपाय था , पीडीएफ कनवर्टर के लिए एक एक्सएचटीएमएल + सीएसएस 3।
सर्ग स्ट्रोबंड्ट

36

यह वह जगह है जहां "प्रदर्शन" संपत्ति अपने आप में आती है। फ़्लोट की गई सामग्री के साथ सूची कार्य करने के लिए नीचे CSS सेट करें।

प्रदर्शन: टेबल; फ्लोटेड सामग्री के साथ काम करता है (अंतर को भरना) लेकिन इसके पीछे सामग्री को छिपाए बिना। एक मेज की तरह बहुत :-)

.img {
  float: left;
}

.table {
  display: table;
}
<img class="img" src="https://via.placeholder.com/350x350" alt="">
<ul>
  <li>Test content</li>
  <li>Test content</li>
  <li>Test content</li>
</ul>
<ul class="table">
  <li>Test content</li>
  <li>Test content</li>
  <li>Test content</li>
</ul>

EDIT: अलग करने के लिए एक वर्ग जोड़ने के लिए याद रखें जो आपके लिए ऐसा करने की इच्छा रखता है। उदाहरण के लिए "ul.in-content" या आम तौर पर ".content ul"


29

सूची-शैली-स्थिति आज़माएँ : गोलियों के लेआउट को बदलने के लिए अंदर


3
list-style-position:insideएक महान समाधान होगा, लेकिन उन रेखाओं का कारण बनता है जो ऊपर की रेखा के साथ संरेखित होने के बजाय, बुलेट के साथ गठबंधन करना शुरू करते हैं।
मार्को डेमैयो

छिपा हुआ सैलाब; मेरी बाईं फ्लोट छवि के लिए काम न करें, लेकिन सूची-शैली-स्थिति: अंदर यह किया! धन्यवाद
menardmam

यह एकमात्र समाधान था जो अभी भी मेरे लिए IE में लिपटे हुए थे। धन्यवाद!
jordan314

जब आपकी गोलियों और बुलेट सामग्री के बीच सामग्री तैर रही हो, तो यह एक बढ़िया समाधान है।
1

यह चुना हुआ उत्तर होना चाहिए।
स्लीक गीक

18

पर http://archivist.incutio.com/viewlist/css-discuss/106382 शैली के साथ 'ली' तत्व: मैं एक सुझाव है कि मेरे लिए काम किया पाया:

position: relative;
left: 1em;

जहाँ आप "1 एएम" को लेफ्ट पैडिंग / मार्जिन की चौड़ाई के साथ बदलते हैं, जो कि आपके लिस्ट आइटमों में होता अगर फ्लोट मौजूद नहीं होते। यह मेरे आवेदन में बहुत अच्छा काम करता है, यहां तक ​​कि उस मामले को भी संभालता है जहां फ्लोट के निचले हिस्से को सूचियों के बीच में होता है - गोलियां वापस (स्थानीय) बाएं मार्जिन पर दाईं ओर शिफ्ट होती हैं।


2
शानदार समाधान, एक आकर्षण की तरह काम करता है! हालाँकि मुझे IE7 के साथ अपने हाथ गंदे करने पड़े क्योंकि यह सूची आइटम नंबर को दिखाने में विफल रहा जो कि एक फ्लोटेड तत्व के बगल में नहीं थे।
मेरिसडीड

@maryisdead IE7 के लिए आपका समाधान क्या है?
टीजे

IE7 को सूची आइटम्स पर एक अतिरिक्त मार्जिन-लेफ्ट की आवश्यकता थी। इस फिडेल jsfiddle.net/maryisdead/wu6ew/5 को देखें और दो IE7 हैक्स पर ध्यान दें। पहले इस पर नहीं जोड़ने के लिए क्षमा करें।
मैरीसाइड

18

क्यों overflow: hiddenकाम करता है

समाधान उतना ही आसान है:

ul {overflow: hidden;}

अपनी सामग्री के लिए एक नया ब्लॉक फ़ॉर्मेटिंग प्रसंग स्थापित करने केoverflow: अलावा एक ब्लॉक बॉक्स । डब्ल्यू 3 सी सिफारिश: http://www.w3.org/TR/CSS2/visuren.html#block-formattingvisible

उदाहरण

मेरी वेबसाइट के बटन , जो <li>भेस में हैं, इस तरह से बने हैं। कार्रवाई में इंडेंटिंग देखने के लिए अपने ब्राउज़र का व्यूपोर्ट (विंडो) छोटा करें ।

एक उदाहरण के रूप में मेरी वेबसाइट

संबंधित उत्तर

उदाहरण सहित लेख


1
यह समझाने के लिए धन्यवाद कि यह क्यों काम करता है (स्वीकार किए गए समाधान में उल्लेख नहीं किया गया है)
schellmax

17

कम से कम मेरे overflow: auto;लिए आपके ulकामों को जोड़कर ।

अपडेट करें

मैंने अपनी jsfiddle को कल्पना की है कि क्या चल रहा है। ulफ्लोटिंग के पास होने पर img, ulवसीयत की सामग्री को फ्लोट द्वारा धकेल दिया जाएगा, लेकिन वास्तविक कंटेनर को नहीं। overflow: autoपूरा-पूरा जोड़कर ulकेवल सामग्री के बजाय फ्लोट द्वारा धकेल दिया जाएगा।


13

आप आवंटित कर सकते हैं position: relative; left: 10px;करने के लिए li। (आप अतिरिक्त रूप से इसे देना चाहते हैं margin-right: 10px;, अन्यथा यह दाईं ओर बहुत चौड़ा हो सकता है।)

या, यदि आप अन्य लोगों द्वारा सुझाए गए floatअनुसार ul- के लिए उपयोग करना चाहते हैं, तो आप संभवतया उल का सही उपयोग clear: leftकरने से बाकी को रोक सकते हैं जो उल का अनुसरण करता है।


धन्यवाद क्रिस, उस स्थिति: रिश्तेदार काम किया। उल के बाद तत्व को साफ़ करने से उत्पन्न होने वाली समस्या यह है कि तत्व बाएँ तैरते हुए div को भी साफ़ कर देगा।
सुपरनटाइटल


7

अस्वीकरण

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

पैराग्राफ के बीच केंद्रित छवियां होने का एक सरल डिजाइन बहुत आकर्षक लगेगा और बहुत अधिक फैंसी होने की तुलना में समर्थन करने के लिए बहुत आसान होगा। यह भी एक कदम दूर है <figure>

लेकिन मैं वास्तव में मंगाई गई छवियां चाहता हूं!

ठीक है, इसलिए यदि आप इस मार्ग को जारी रखने के लिए पर्याप्त रूप से पागल हैं, तो कुछ तकनीकें हैं जिनका उपयोग किया जा सकता है।

सबसे सरल यह है कि सूची का उपयोग करें overflow: hiddenया overflow: scrollताकि सूची अनिवार्य रूप से लिपटे हुए है जो गद्दी को वापस खींचती है जहां यह उपयोगी है:

img {
  float: left;
}
.wrapping-list {
  overflow: hidden;
  padding-left: 40px;
}
<img src="http://placehold.it/100x100"/>
<ul class="wrapping-list">
  <li>lorem</li>
  <li>ipsum</li>
  <li>dolor</li>
  <li>sit</li>
  <li>amet</li>
</ul>

इस तकनीक में कुछ समस्याएं हैं। यदि सूची लंबी हो जाती है, तो यह वास्तव में छवि के चारों ओर नहीं लपेटता है, जो floatछवि पर उपयोग करने के पूरे उद्देश्य को हरा देता है ।

img {
  float: left;
}
.wrapping-list {
  overflow: hidden;
  padding-left: 40px;
}
<img src="http://placehold.it/100x100"/>
<ul class="wrapping-list">
  <li>lorem</li>
  <li>ipsum</li>
  <li>dolor</li>
  <li>sit</li>
  <li>amet</li>
  <li>lorem</li>
  <li>ipsum</li>
  <li>dolor</li>
  <li>sit</li>
  <li>amet</li>
  <li>lorem</li>
  <li>ipsum</li>
  <li>dolor</li>
  <li>sit</li>
  <li>amet</li>
</ul>

लेकिन मैं वास्तव में सूची लपेटना चाहता हूँ!

ठीक है, इसलिए यदि आप भी कर रहे हैं उन्मादपूर्ण अधिक लगातार और आप पूरी तरह से करना चाहिए इस मार्ग नीचे जारी रखने के लिए, वहाँ एक और तकनीक है कि सूची आइटम लपेटो और गोलियों बनाए रखने के लिए इस्तेमाल किया जा सकता है।

पैडिंग के बजाय <ul>और इसे गोलियों के साथ अच्छी तरह से व्यवहार करने के लिए प्राप्त करने की कोशिश करें (जो ऐसा कभी नहीं करना चाहता था), उन गोलियों को दूर ले जाएं <ul>और उन्हें <li>एस को दें। बुलेट खतरनाक हैं, और <ul>उन्हें ठीक से संभालने के लिए बस जिम्मेदार नहीं है।

img {
  float: left;
}
.wrapping-list {
  padding: 0;
  list-style-position: inside;
}
.wrapping-list li {
  overflow: hidden;
  padding-left: 25px;
}
<img src="http://placehold.it/100x100"/>
<ul class="wrapping-list">
  <li>lorem</li>
  <li>ipsum</li>
  <li>dolor</li>
  <li>sit</li>
  <li>amet</li>
  <li>lorem</li>
  <li>ipsum</li>
  <li>dolor</li>
  <li>sit</li>
  <li>amet</li>
  <li>lorem</li>
  <li>ipsum</li>
  <li>dolor</li>
  <li>sit</li>
  <li>amet</li>
</ul>

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


मुझे दूसरा विकल्प पसंद है, लेकिन पाठ वास्तव में लंबे पाठों (2 पंक्तियों) पर बुलेट बिंदुओं के साथ शुरू होता है :-(
अरनी

4

अपने यूएल टैग पर निम्नलिखित का प्रयास करें। यह आपकी छवि को उपर रखते हुए गोलियों का ध्यान रखना चाहिए और आपको अपने बचे हुए गठबंधन को गड़बड़ करने की आवश्यकता नहीं है list-position: inside

overflow: hidden; 
padding-left: 2em; 

मुझे ब्लेज़मॉन्गर के समाधान (# 2 ऊपर) के साथ इसका उपयोग करना था। BLazemonger अकेले IE 9-11 और ओपेरा में काम नहीं किया। इसके साथ, यह सभी ब्राउज़रों में काम करता है। कामिल का (# 1) समाधान मेरे काम नहीं आया क्योंकि इसने मेरी गोलियों को छुपा दिया। शायद बूटस्ट्रैप के साथ संघर्ष।
लैरा

3

इससे खुद ही जूझते रहे। सर्वश्रेष्ठ मैंने प्रबंधित किया है निम्नलिखित है:

ul {
    list-style-position: inside;
    padding-left: 1em;
    text-indent: -1em;
}

पाठ वास्तव में इंडेंट नहीं है लेकिन बुलेट दिखाता है।


2

ओपी की टिप्पणी के आधार पर अपडेट करने के लिए संपादित किया गया

ठीक है, तो बस इसे एक साथ नेस्टेड 2 divs में तोड़ दें

ul  {background: blue; position:static;}
.therest {position:relative; width:100%}
.indent {float:left; }

<div class="therest">
<p>
Est tincidunt doming iis nobis nibh. Ullamcorper eorum elit lius me delenit. 
</p>
<hr />
<h3>Lorem</h3>
<div class="indent">
<ul>
<li>list element</li>
<li>list element</li>
<li>list element</li>
</ul> 
<div>
the rest now under the UL
</div>

उल ली सीएसएस को बदलने की कोशिश करें

उल {फ्लोट: बाएं; पृष्ठभूमि: नीला; }


धन्यवाद, यह काम करता है, हालांकि, अब नीचे के पैराग्राफ सही पक्ष के खिलाफ चल रहे हैं।
सुपरयूंटेड

2

कई परियोजनाओं में इस दिलचस्प मुद्दे से लड़ने के बाद, और यह जांच करने के लिए कि ऐसा क्यों होता है, मुझे अंततः विश्वास है कि मैंने दोनों को पाया: एक कार्यशील और 'उत्तरदायी' समाधान।

यहाँ जादू की चाल है, लाइव उदाहरण: http://jsfiddle.net/superKalo/phabbtnx/

ul {
    list-style: none;
    position: relative;
    padding-left: 0; /* remove any left padding */
    margin-left: 0; /* remove any left margin */
    left: 35px;
}
li {
    padding-left: 0; /* remove any left padding */
    margin-left: 0; /* remove any left margin */
    text-indent: -19px; /* adjust as much as needed */
}
li:before {
    content: '•\00a0\00a0\00a0';
    color: #000; /* bonus: you can customize the bullet color */
}

मैं जोड़ा display: flex;करने के लिए liइतना है कि bulletpoint लंबवत रूप से केंद्रित है, जब मैं की font-size बदलने के लिए, :beforeभाग।
अरनी

1

डॉक्टर के सिर के बिना एक एलएमएस के अंदर काम करना margin-right: 20px, छवि के लिए इनलाइन शैली के साथ जाना आसान पाया । जो मैं इस साइट के लिए एहसानमंद हूं ।


0

इसे इस्तेमाल करे:

li{
    margin-left:5px;
}

यदि आप चाहते हैं कि वे बाईं ओर जाएं, तो बस - ## px मान डालें।


0

या आप ऐसा कर सकते हैं:

 #content ul {
        background:none repeat scroll 0 0 #AACCDD;
        float:left;
        margin-right:10px;
        padding:10px;

और फिर ली से सभी स्टाइल को हटा दें


1
फ़्लोटिंग अल उल वास्तव में समस्या को हल करता है, हालांकि, एक और समस्या पैदा होती है ... उल के बाद आने वाले सभी पैराग्राफ तत्व उल के दाईं ओर तैरते हैं।
17

आपको इसके लिए +1 दिया गया ... मैं इस प्रश्न से जुड़ी लिंक को देखकर यहां एक धारणा बना रहा था कि <p> <ul> के दाईं ओर तैर रहा होगा। अच्छी पकड़।
रीस


0
width: 300px;
height: 30px;
margin-left: auto;
right: 10px;

मार्जिन-लेफ्ट: ऑटो अपने आप एलीमेंट को राइट एलाइन कर देगा। आप जिस तत्व को चाहते हैं उसकी ऊँचाई और चौड़ाई निर्धारित करें - यह मेरे अंदर की पृष्ठभूमि की पृष्ठभूमि छवि है


0

आप ulबाईं ओर तैरने की भी कोशिश कर सकते हैं , और widthइसके लिए एक उपयुक्त परिभाषित कर सकते हैं, ताकि यह छवि के बगल में तैर जाए।

इस jsfiddle की तरह थोड़ा सा ?




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