html (+ css): लाइन ब्रेक के लिए पसंदीदा जगह को दर्शाते हुए


109

मान लें कि मेरे पास यह टेक्स्ट है जिसे मैं एक HTML टेबल सेल में प्रदर्शित करना चाहता हूं:

Honey Nut Cheerios, Wheat Chex, Grape-Nuts, Rice Krispies, Some random cereal with a very long name, Honey Bunches of Oats, Wheaties, Special K, Froot Loops, Apple Jacks

और मैं चाहता हूं कि एक अल्पविराम के बाद लाइन अधिमानतः टूट जाए।

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

मैं <span>तत्वों में पाठ टुकड़े लपेटने की कोशिश की, लेकिन यह कुछ भी उपयोगी नहीं लगता है।

<html>
  <head>
      <style type="text/css">
        div.box { width: 180px; }
        table, table td { 
          border: 1px solid; 
          border-collapse: collapse; 
        }
      </style>
  </head>
  <body>
    <div class="box">
      <table>
      <tr>
          <td>lorem ipsum</td>
          <td>lorem ipsum</td>
          <td>lorem ipsum</td>
      </tr>
      <tr>
          <td>lorem ipsum</td>
          <td>
            <span>Honey Nut Cheerios,</span>
            <span>Wheat Chex,</span>
            <span>Grape-Nuts,</span>
            <span>Rice Krispies,</span>
            <span>Some random cereal with a very long name,</span>
            <span>Honey Bunches of Oats,</span>
            <span>Wheaties,</span>
            <span>Special K,</span>
            <span>Froot Loops,</span>
            <span>Apple Jacks</span>
          </td>
          <td>lorem ipsum</td>
      </tr>
      </table>
    </div>
  </body>
</html>

नोट: ऐसा लगता है कि CSS3 काtext-wrap: avoid व्यवहार वही है जो मैं चाहता हूं, लेकिन मुझे यह काम करने के लिए नहीं मिल सकता है।


आप स्पैन के अंदर गैर-ब्रेकिंग-स्पेस का उपयोग कर सकते हैं ।
गेब्रियल पेट्रीओली

3
लेकिन मैं गैर- रिक्त स्थान का उपयोग नहीं करना चाहता । मैं "नहीं-टू-ब्रेक-टू-ब्रेक-ए-आई-विल-आई-इफ-ए-है-टू" स्पेस का उपयोग करना पसंद करेगा, लेकिन जहां तक ​​मुझे पता है, वे मौजूद हैं।
जेसन एस

@ जेसन .. मैं आपको महसूस करता हूं .. लेकिन यह संभव नहीं है .. एक जवाब जोड़ा।
गेब्रियल पेट्रीओली

drat, ऐसा तब होता है जब कंप्यूटर वैज्ञानिक टाइपोग्राफर्स से रेंडरिंग एल्गोरिदम w / o इनपुट लिखते हैं।
जेसन एस

1
आपको @ EggertJóhannesson से उत्तर स्वीकार करना चाहिए क्योंकि यह एक अच्छा समाधान प्रदान करता है!
गेब्रियल पेट्रीओली

जवाबों:


156

का उपयोग करके

span.avoidwrap { display:inline-block; }

और जिस पाठ को मैं एक साथ रखना चाहता हूं उसे लपेटकर

<span class="avoidwrap"> Text </span>

यह पहले पसंदीदा ब्लॉकों में और फिर आवश्यकतानुसार छोटे टुकड़ों में लपेटेगा।


16
बहुत अच्छा काम करता है! केवल एक अतिरिक्त नोट: इनलाइन-ब्लॉक के प्रारंभ और अंत में रिक्त स्थान को अनदेखा किया जाता है, ताकि ब्लॉक द्वारा पाठ को उस स्थान पर परिसीमित कर दें, जिसे आपको इनलाइन-ब्लॉक के बीच रखना होगा। उदाहरण के लिए, यदि स्पैन को इनलाइन-ब्लॉक बनने के लिए स्टाइल किया गया था, तो <span>Hello </span><span> world</span>यह होगा Helloworld, और <span>Hello</span> <span>world</span>सामान्य होगा Hello world
उपयोगकर्ता

2
<wbr> ब्राउज़र में अधिक अर्थ और पत्तियों का नियंत्रण है, जो आमतौर पर एक अच्छी बात है। इस मामले में यह ब्रेकिंग-जब-महत्वपूर्ण संभव बनाता है।
Lodewijk

महान काम करता है - जब यह महत्वपूर्ण होता है, तो वह चार्ट जैसे "-" गैर ब्रेक। उदाहरण: पेरिकल्स <स्पैन क्लास = "परिहार"> (um & nbsp; 500-429 & nbsp; v.Chr।) </ span>
सारा पेड़

10
@Lodewijk: लाइन को तोड़ने के लिए <wbr>एक पसंदीदा जगह का संकेत नहीं देता है, लेकिन एक संभव है।
डेन डैस्कलेस्कु

1
ध्यान दें कि यह तकनीक नेस्टेड <span>s के लिए भी काम करती है, इसलिए आप (प्रभाव में) पसंदीदा ब्रेकपॉइंट्स के पदानुक्रम को निर्दिष्ट कर सकते हैं ।
माइकल डाइक

24

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

<span>Honey Nut Cheerios, <br class="rwd-break">Wheat Chex, etc.</span>

और आप मीडिया क्वेरी में CSS की एक पंक्ति:

@media screen and (min-width: 768px) {
    .rwd-break { display: none; }
}

7

शून्य-चौड़ाई वाले अंतरिक्ष वर्ण का उपयोग करने के लिए एक आसान उत्तर &#8203;यह है कि इसका उपयोग विशिष्ट बिंदुओं पर शब्दों के अंदर ब्रेकस्पेस बनाने के लिए किया जाता है

क्या ठीक विपरीत की गैर तोड़ने अंतरिक्ष &nbsp; (ठीक है, वास्तव में शब्द-योजक &#8288; ) ( शब्द-योजक के शून्य चौड़ाई संस्करण है नॉन-ब्रेकिंग स्पेस )

( गैर-ब्रेकिंग हाइफ़न की तरह अन्य गैर-ब्रेकिंग कोड भी हैं &#8209;) (यहाँ nbsp के विभिन्न 'वेरिएंट पर एक व्यापक जवाब है )

यदि आप HTML- केवल (कोई CSS / JS) समाधान नहीं चाहते हैं, तो आप शून्य-चौड़ाई वाले स्थान और गैर-ब्रेकिंग स्पेस के संयोजन का उपयोग कर सकते हैं , हालाँकि यह वास्तव में गड़बड़ होगा , और मानव-पठनीय संस्करण को लिखने के लिए थोड़े प्रयास की आवश्यकता होती है ।

ctrl+ c, ctrl+ vमदद करता है

उदाहरण:

   Honey&nbsp;Nut&nbsp;Cheerios,<!---->&#8203;<!--
-->Wheat&nbsp;Chex,<!---->&#8203;<!--
-->Grape&#8209;Nuts,<!---->&#8203;<!--
-->Rice&nbsp;Krispies,<!---->&#8203;<!--
-->Some&nbsp;random&nbsp;cereal&nbsp;with&nbsp;a&nbsp;very&nbsp;long&nbsp;name,<!---->&#8203;<!--
-->Honey&nbsp;Bunches&nbsp;of&nbsp;Oats,<!---->&#8203;<!--
-->Wheaties,<!---->&#8203;<!--
-->Special&nbsp;K,<!---->&#8203;<!--
-->Froot&nbsp;Loops,<!---->&#8203;<!--
-->Apple&nbsp;Jacks

अपठनीय? यह वही HTML है जिसमें कोई टिप्पणी नहीं है:

   Honey&nbsp;Nut&nbsp;Cheerios,&#8203;Wheat&nbsp;Chex,&#8203;Grape&#8209;Nuts,&#8203;Rice&nbsp;Krispies,&#8203;Some&nbsp;random&nbsp;cereal&nbsp;with&nbsp;a&nbsp;very&nbsp;long&nbsp;name,&#8203;Honey&nbsp;Bunches&nbsp;of&nbsp;Oats,&#8203;Wheaties,&#8203;Special&nbsp;K,&#8203;Froot&nbsp;Loops,&#8203;Apple&nbsp;Jacks

हालाँकि, चूंकि ईमेल html रेंडरिंग पूरी तरह से मानकीकृत नहीं है, इसलिए इसका उपयोग उस तरह के उपयोग के लिए अच्छा है क्योंकि यह समाधान कोई CSS / JS का उपयोग नहीं करता है

इसके अलावा, यदि आप किसी भी- <span>आधारित समाधान के साथ संयोजन में इसका उपयोग करते हैं, तो आपके पास लाइन-ब्रेकिंग एल्गोरिदम का पूर्ण नियंत्रण होगा

(संपादकीय नोट :)

एकमात्र समस्या जो मैं आपको देख सकता था वह यह है कि क्या आप पसंदीदा ब्रेक्जिट के बिंदुओं को गतिशील रूप से बदलना चाहते हैं। इसके लिए प्रत्येक स्पैन आनुपातिक आकार के निरंतर JS मैनिपुलेशन की आवश्यकता होती है, और उन HTML संस्थाओं को टेक्स्ट में हैंडल करना होता है।


1
स्पैन हैक क्या हैं?
जेसन एस

स्पैन टैग का लाभ उठाते हुए अन्य उत्तर।

मैं यह भी नोट करना चाहता हूं कि जबकि यह समाधान सबसे सरल नहीं लगता है, यह सबसे भरोसेमंद है, क्योंकि उन संस्थाओं को ब्राउज़र, ईमेल पार्सर, या किसी अन्य HTML पार्सर में अक्सर अर्थ प्रतिनिधित्व नहीं बदलना चाहिए।

3

इसका उत्तर है ( आप उपयोग की गई लाइन ब्रेकिंग एल्गोरिथ्म को बदल नहीं सकते )।

लेकिन कुछ वर्कअराउंड हैं ( सबसे अच्छा एक स्वीकृत उत्तर है )

आप नॉन-ब्रेकिंग-स्पेस के साथ जा सकते हैं, &nbsp;लेकिन केवल उन शब्दों के बीच जो एक साथ चलते हैं ( जो आपके पास स्पैन में हैं, लेकिन कॉमा के बाद नहीं ), या आप white-space:nowrap@Marcel के रूप में उल्लिखित का उपयोग कर सकते हैं ।

दोनों समाधान एक ही काम करते हैं, और दोनों शब्दों के समूह को नहीं तोड़ेंगे यदि यह अपने आप फिट नहीं होता है।


अरे। :-( कि बदबू आ रही है, इसका मतलब है कि मुझे या तो इसके साथ रहना है, या मुझे लाइन-ब्रेकिंग एल्गोरिदम को हराने के लिए अपने दम पर लंबी लाइनों का पता लगाने की कोशिश करने की जरूरत है।
जेसन एस

मैंने वर्कअराउंड के लिए एक लिंक प्रदान करने के लिए आपके उत्तर को संपादित किया, क्योंकि मैंने आपकी पहली पंक्ति को जिस तरह से प्रकाशित किया है, उसके कारण मैंने लगभग पढ़ना जारी नहीं रखा।
एरोटबीयर

@arootbeer: मैं आपके संपादन का समर्थन करता हूं, लेकिन गेबी ने इसे वापस कर दिया। गैबी: क्यों? क्या आप उपयोगकर्ताओं को भ्रमित करना चाहते हैं?
D:53 पर डैन डस्केलस्क्यू

@DanDascalescu, क्या सभी उत्तर को SO को उसी पृष्ठ में स्वीकार किए गए बिंदु पर बदलना चाहिए? मेरे जवाब में 1 ( योग ) वोट है और 48 वोटों के साथ एक स्वीकृत जवाब है। मुझे पूरा यकीन है कि जो स्वीकार किया गया है वह ध्यान आकर्षित करने वाला है ( और ठीक ही ऐसा )। इसके अलावा, मैं जोर देकर कहता हूं कि इस्तेमाल किए जाने वाले ब्रेकिंग एल्गोरिदम को बदलने का कोई तरीका नहीं है ( जैसा कि ओपी पूछते हैं )
गेब्रियल पेट्रीओली

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

2

अपने मार्क-अप के उपयोग के साथ span { white-space:nowrap }। यह उतना ही अच्छा है जितना आप वास्तव में उम्मीद कर सकते हैं।


धन्यवाद, लेकिन यह काम नहीं करेगा क्योंकि यह मूल रूप से एक spanतत्व के भीतर रिक्त स्थान का अनुवाद करता है &nbsp;, और रिक्त स्थान को बिल्कुल भी टूटने से बचाता है। मैं सिर्फ रेंडर करने वाले को अपने एक आइटम के बीच में टूटने से बचाना चाहता हूं, लेकिन अगर यह करना है, तो मैं चाहता हूं कि ऐसा हो।
जेसन एस

@ जैसन एस: मैंने अपने जवाब में अन्य विकल्प जोड़े हैं।
मार्सेल

&nbsp;<wbr>किसी अंतरिक्ष से अलग कैसे है ? मैं जो बता सकता हूं, उसमें से विकल्प या तो यह है कि किसी दिए गए चरित्र को विराम देता है या नहीं। तो '-' और '' और &#8203;और <wbr>और &shy;जबकि सभी एक ब्रेक (एक हाइफन, अंतरिक्ष, कुछ भी नहीं है, कुछ भी नहीं है, और हाइफन-केवल-ऑन-तोड़ मुद्रण, क्रमशः) अनुमति देते हैं, &nbsp;नहीं करता है।
जेसन एस

@ जेसन एस: उदाहरण का उपयोग जोड़ा गया।
मार्सेल

मैंने अभी इसकी कोशिश की, और यह लाइन-ब्रेकिंग के लिए रिक्त स्थान पर प्राथमिकता लेने के लिए प्रतीत नहीं होता है। प्राथमिकता वही है जो मुझे चाहिए। यदि एक अलग चरित्र या तत्व के लिए टूटता व्यवहार या तो हां या नहीं है, तो मेरी समस्या का कोई समाधान नहीं है। यदि कोई रिश्तेदार लाइन-ब्रेकिंग प्राथमिकताएं हैं, तो मेरे पास एक समाधान हो सकता है।
जेसन एस

0

नया उत्तर अब हमारे पास HTML5 है:

HTML5 <wbr>टैग का परिचय देता है । (यह वर्ड ब्रेक अपॉर्चुनिटी के लिए खड़ा है।)

जोड़ना एक <wbr>ब्राउज़र बताता है से पहले कहीं और, वहाँ तोड़ने के लिए तो यह शब्द अल्पविराम के बाद तोड़ बनाने के लिए आसान है:

Honey Nut Cheerios,<wbr> Wheat Chex,<wbr> Grape-Nuts,<wbr> Rice Krispies,<wbr> Some random cereal with a very long name,<wbr> Honey Bunches of Oats,<wbr> Wheaties,<wbr> Special K,<wbr> Froot Loops,<wbr> Apple Jacks

यह IE के अलावा मेरे सभी प्रमुख ब्राउज़रों का समर्थन करता है।


12
-1। आपने सलाह देने से पहले परीक्षण क्यों नहीं किया? यह काम नहीं करता है। <wbr>एक और उद्देश्य है। ऐसा नहीं है कि इस सवाल का जवाब एक का डुप्लिकेट है उल्लेख करने के लिए जवाब है कि बहुत पहले से ही अस्तित्व में।
उपयोगकर्ता

1
WBR का दूसरा उद्देश्य नहीं है। developer.mozilla.org/en-US/docs/Web/HTML/Element/wbr
Lodewijk

13
<wbr>बस एक ब्रेक का अवसर सेट करता है; यह "ब्राउज़र को कहीं और से पहले वहाँ तोड़ने के लिए नहीं कहता है"। एक स्थान से पहले उपयोग किया जाता है, यह सामान्य रूप से बेकार है, क्योंकि रिक्त स्थान सामान्य रूप से लाइन ब्रेक के अवसर हैं।
जुक्का के। कोर्पेला

5
यह किसी भी ब्राउज़र में बिल्कुल भी काम नहीं करता है। जवाब गलत है: <wbr>करता नहीं साधारण खाली स्थान के ऊपर एक लाइन ब्रेक को प्राथमिकता। इसलिए रैपिंग केवल उदाहरण में सामान्य होती है।
एड्रियन

3
स्पष्ट करने के लिए, <wbr> को संकेत दिया जाता है "यहां वह स्थान है जिसे आप तोड़ सकते हैं", जब उस स्थिति को अन्यथा एक शब्द के अंदर माना जाएगा । यह कहता है कि "इन दो पात्रों के बीच की जगह का इलाज करें जैसे कि वहां कोई जगह थी", "यहां तोड़ना पसंद नहीं करते"। यदि पहले से ही कोई स्थान है, तो <wbr> का कोई अर्थ नहीं है।
सेमीकॉलन

-1

आप सीएसएस में मार्जिन सेटिंग्स को समायोजित कर सकते हैं (इस मामले में मार्जिन-राइट)।

text {
    margin-right: 20%;
}

-3

<div>इसके बजाय का उपयोग करें <span>, या स्पैन के लिए एक वर्ग निर्दिष्ट करें और इसे प्रदर्शन दें: ब्लॉक विशेषता।


-5

उस ™ के लिए एक HTML तत्व है: (अब मानकीकृत) <wbr>तत्व

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


3
-1: <wbr>बहुत लंबे शब्दों में ब्रेक पॉइंट को चिह्नित करने के लिए है, यह पसंदीदा लाइन ब्रेक के साथ समस्या को हल नहीं करता है
उपयोगकर्ता

4
@ user3075942 कल्पना से प्रत्यक्ष उद्धरण : " wbrतत्व एक लाइन ब्रेक अवसर का प्रतिनिधित्व करता है।" यह वही है जो ओपी ने मांगा था। विकी पर जो आप पढ़ते हैं, उसके आधार पर लोगों को नीचा दिखाना बंद करें।
मथियास बीनेंस

3
हाँ, अवसर । लेकिन ब्राउज़र में पहले से ही रिक्त स्थान को तोड़ने का अवसर है। सवाल यह है कि एक ब्राउज़र को कैसे बताया जाए कि किन जगहों पर इसे तोड़ना बेहतर है।
उपयोगकर्ता

1
... और उत्तर का उपयोग करना है <wbr>
मथियास बीनेंस

8
नहीं, वह उत्तर नहीं है। यह किसी विशेष पूर्व-विद्यमान विराम बिंदु सकारात्मकता के उपयोग की संभावना नहीं बढ़ाता है; यह केवल एक नया ब्रेक पॉइंट पॉज़िबिलिटी जोड़ता है, जहाँ कोई पहले से मौजूद नहीं है। एक पंक्ति में दो सकारात्मकता रखने से कोई फायदा नहीं है। developer.mozilla.org/en-US/docs/Web/HTML/Element/wbr
टोरिन फिनमन्नन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.