छवि के तहत पाठ रैपिंग को रोकने के लिए सीएसएस


86

मेरे पास निम्नलिखित मार्कअप हैं:

<li id="CN2787">
  <img class="fav_star" src="images/fav.png">
  <span>Text, text and more text</span>
</li>

मैं यह चाहता हूं कि यदि पाठ लपेटता है, तो यह छवि के लिए 'कॉलम' में नहीं जाता है। मुझे पता है कि मैं इसे एक table(जो मैं कर रहा था) के साथ कर सकता हूं लेकिन यह इस कारण से काम करने योग्य नहीं है

मैंने सफलता के बिना निम्नलिखित की कोशिश की है:

li span {width: 100px; margin-left: 20px}
.fav_star {width: 20px}

मैंने भी कोशिश की float: right

धन्यवाद।

संपादित करें: मैं इसे इस तरह देखना चाहता हूं:

IMG   Text starts here and keeps going... and
      wrap starts here.

इस तरह नहीं:

IMG   Text starts here and keeps going... and 
wrap starts in the space left for the image.

1
क्या आप अपना कोड jsfiddle में डाल सकते हैं?
हार्दिक

मुझे लगता है कि आपको यहां अपने इरादों के बारे में थोड़ा स्पष्ट होने की जरूरत है। आप पाठ तो रैप करने के लिए नहीं करना चाहते हैं तो आप बस का उपयोग कर सकते white-space: nowrap;में li span {...}है, लेकिन मैं धारणा है कि आप कुछ और करने के लिए कोशिश कर रहे हैं मिलता है
मेरे सिर में दर्द

@MyHeadHurts माफी - मुझे स्पष्ट लग रहा था :) मुझे लाइन में दो कॉलम चाहिए। बाईं ओर 20px एक छवि के लिए है। शेष पाठ के लिए है। यदि पाठ लपेटता है, तो मैं चाहता हूं कि वह बाईं ओर से (जहां प्रारंभिक पाठ शुरू हुआ था) 20-20 के रैप की दूसरी पंक्ति शुरू करे।
निक

1
राहगीरों के लिए, आपको चौड़ाई से निपटने की आवश्यकता नहीं है क्योंकि स्वीकृत उत्तर से पता चलता है। यह बहुत सरल है: एक नया स्वरूपण संदर्भ कहा जाता है बनाएँ । देखिए जो कोनलिन का जवाब। फ़्यूचर बैकग्राउंड के लिए, मेरा देखें।
हक्कासन नोवा

1
@hqcasanova रिकॉर्ड के लिए, डैन के जवाब को 9 महीने पहले स्वीकार कर लिया गया था, जो जो ने पोस्ट किया था और 16 महीने पहले आपका। मैं डैन के जवाब को अस्वीकार नहीं करने जा रहा हूं, हालांकि विकल्प जोड़ने के लिए धन्यवाद।
निक

जवाबों:


35

चूंकि यह प्रश्न बहुत सारे विचार प्राप्त कर रहा है और यह स्वीकृत उत्तर था, इसलिए मुझे निम्नलिखित अस्वीकरण जोड़ने की आवश्यकता महसूस हुई:

यह उत्तर ओपी के प्रश्न (उदाहरणों में चौड़ाई निर्धारित किया गया था) के लिए विशिष्ट था। जब यह काम करता है, तो आपको प्रत्येक तत्व, छवि और पैराग्राफ पर एक चौड़ाई की आवश्यकता होती है। जब तक आपकी आवश्यकता नहीं है, मैं जो कॉनलिन के समाधान का उपयोग करने की सलाह देता हूं जो इस प्रश्न पर एक और उत्तर के रूप में पोस्ट किया गया है।

spanतत्व एक इनलाइन तत्व, आप सीएसएस में इसकी चौड़ाई परिवर्तित नहीं कर सकता है।

आप अपनी अवधि में निम्न सीएसएस जोड़ सकते हैं ताकि आप इसकी चौड़ाई बदल सकें।

display: block;

एक और तरीका, जो आमतौर पर अधिक समझ में आता है, वह है <p>अपने माता-पिता के रूप में एक तत्व का उपयोग करना <span>

<li id="CN2787">
  <img class="fav_star" src="images/fav.png">
  <p>
     <span>Text, text and more text</span>
  </p>
</li>

चूंकि <p>एक blockतत्व है, आप सीएसएस का उपयोग करके इसकी चौड़ाई निर्धारित कर सकते हैं, बिना कुछ भी बदलने के लिए।

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

li p{width: 100px; margin-left: 20px}
.fav_star {width: 20px;float:left}

पुनश्च के बजाय float:leftछवि पर, आप भी रख सकते हैं float:rightपर li pलेकिन इस मामले में, आप भी आवश्यकता होगी text-align:leftसही ढंग से पाठ फिर से संगठित करना है।

PSS यदि आप <p>तत्व नहीं जोड़ने के पहले समाधान के साथ आगे बढ़े हैं , तो आपका सीएसएस ऐसा दिखना चाहिए:

li span{width: 100px; margin-left: 20px;display:block}
.fav_star {width: 20px;float:left}

यह वास्तव में मददगार है। मैं spanएक pतत्व में बदल गया । तो बस इन दो चाल करने के लिए लग रहा था: li p {margin-left: 40px} .fav_star {float: left}। छवि के लिए चौड़ाई छवि द्वारा ही सेट की गई है, pतत्व स्वचालित रूप से एक है blockऔर मैंने चौड़ाई को अकेला छोड़ दिया है। इसके लिए धन्यवाद।
निक

2
यदि आप इसका उपयोग करने जा रहे हैं, तो आप इसका उपयोग display:blockकर सकते हैं divक्योंकि यह आपके लिए है (या pजैसा कि आप भी सुझाव देते हैं) का उपयोग करें। पाठ को दोहराए जाने की कोई आवश्यकता नहीं है - यदि आप उपयोग कर रहे हैं तो pआप इसे खो सकते हैं span
गारेथ

IMO, आपको अपने पृष्ठों का डिज़ाइन बदलने के लिए HTML का उपयोग नहीं करना चाहिए। यह सीएसएस के लिए काम है (पाठ्यक्रम के अपवाद हैं, खासकर जब आपको क्रॉस-ब्राउज़र संगतता की आवश्यकता होती है)। मेरा मानना ​​है कि उचित HTML का उपयोग करना, और "अच्छा शब्दार्थ" होना अधिक महत्वपूर्ण है। इसलिए मैं divइस मामले में, pअधिक समझ में नहीं आता। खो spanथोड़े मुझे करने के लिए मामूली बात है, और कैसे आप अपनी सामग्री बिछाने रहे हैं पर निर्भर करता है।
डैन

एक <span>में लपेटकर एक <p>जादू टोना सीधे होग्वार्ट्ज से बाहर है! खूबसूरती से काम करता है!
जानूस

251

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

<img src="url-to-image">
<p>Nullam id dolor id nibh ultricies vehicula ut id elit.</p>

    img {
        float: left;
    }
    p {
        overflow: hidden;
    }

उदाहरण देखें: http://jsfiddle.net/vandigroup/upKGe/132/


11
यह इस सवाल का सही जवाब है। इस तकनीक को पैराग्राफ के लिए एक निश्चित चौड़ाई निर्धारित करने की आवश्यकता नहीं है। बहुत सरल और आसान समाधान। IE8 में भी पूरी तरह से काम करता है।
चॉकलेटी

4
ठीक है, वास्तव में यह काम नहीं करेगा यदि पाठ वाले तत्व एक span(ओपी का मामला) थे। A की display: blockआवश्यकता होगी span। लेकिन, इसे बचाने के लिए, मैं मानता हूं कि यह एक और अधिक सुंदर समाधान है। अगर किसी को आश्चर्य हो कि पीछे क्या जादू है overflow: hidden, तो नीचे मेरा जवाब देखें।
हिक्कासनोवा

7
यह वह व्यवहार नहीं है जिसकी मैं अपेक्षा करूंगा, लेकिन यह बहुत बढ़िया है।
गैविन

2
रिकॉर्ड के लिए, यह उत्तर मुझे टिक करने के 8 महीने बाद आया :)
निक

2
वाह। पूरी तरह से काम किया। मुझे विश्वास नहीं हो रहा है कि मैं यह पहले कभी नहीं जानता था।
एसएफगैग सेप

25

जो लोग कुछ पृष्ठभूमि जानकारी चाहते हैं, उनके लिए यहां एक छोटा लेख है जो बताता है कि क्यों overflow: hiddenकाम करता है। इसका तथाकथित ब्लॉक फॉर्मेटिंग संदर्भ के साथ करना है । यह W3C की कल्पना का हिस्सा है (यानी हैक नहीं है) और मूल रूप से ब्लॉक-प्रकार के प्रवाह के साथ एक तत्व द्वारा कब्जा कर लिया गया क्षेत्र है।

जब भी इसे लागू किया जाता है, overflow: hiddenएक नया ब्लॉक स्वरूपण संदर्भ बनाता है । लेकिन यह उस व्यवहार को ट्रिगर करने में सक्षम एकमात्र संपत्ति नहीं है। सिडनी वेब एप्स ग्रुप से फियोना चान द्वारा एक प्रस्तुति का उद्धरण :

  • फ्लोट: बाएं / दाएं
  • अतिप्रवाह: छिपा हुआ / ऑटो / स्क्रॉल
  • डिस्प्ले: टेबल-सेल और टेबल-संबंधित मान / इनलाइन-ब्लॉक
  • स्थिति: पूर्ण / निश्चित

1
यदि आप लिंक मृत हो जाता है, तो क्या आप उस लेख से कुछ विवरण जोड़ सकते हैं?

गुड मॉर्निंग ऑस्ट्रेलिया! टिप्पणी के लिए धन्यवाद।
हक्कासन नोवा

यह उन कोड ब्लॉक को प्रदर्शित करने के लिए उत्कृष्ट है, जिनमें आस-पास के चित्रों या फ्लोटिंग साइडबार के साथ संघर्ष करना पड़ सकता है।
एलेक्सा

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

3

यदि आप margin-leftएक spanतत्व पर काम करना चाहते हैं तो आपको इसे display: inline-blockया display:blockसाथ ही बनाना होगा ।


शायद vertical-align: top;इस के साथ छवि पर भी जरूरत है ।
थिंकिंगस्टिफ

2

display:flexपाठ के लिए सेटिंग ने मेरे लिए काम किया।


यह सेटिंग का एक और अधिक आधुनिक समकक्ष प्रतीत होता है overflow:auto। मुझे यकीन है कि यह सभी स्थितियों में बिल्कुल समान काम नहीं करता है, लेकिन यह मेरे लिए भी काम करता है।
मैट ब्राउन ने

1

छवि और अवधि के चारों ओर एक लपेटें और सीएसएस को निम्न में जोड़ें जैसे:

एचटीएमएल

        <li id="CN2787">
          <div><img class="fav_star" src="images/fav.png"></div>
          <div><span>Text, text and more text</span></div>
        </li>

सीएसएस

            #CN2787 > div { 
                display: inline-block;
                vertical-align: top;
            }

            #CN2787 > div:first-of-type {
                width: 35%;
            }

            #CN2787 > div:last-of-type {
                width: 65%;
            }

कम से

        #CN2787 {
            > div { 
                display: inline-block;
                vertical-align: top;
            }

            > div:first-of-type {
                width: 35%;
            }
            > div:last-of-type {
                width: 65%;
            }
        }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.