इनपुट प्रकार के अंदर पाठ लपेटना = "पाठ" तत्व एचटीएमएल / सीएसएस


98

नीचे दिखाया गया HTML,

<input type="text"/>

ब्राउज़र में ऐसा प्रदर्शित किया जाता है:


जब मैं निम्नलिखित पाठ जोड़ता हूं,

फुर्तीली भूरी लोमड़ी आलसी कुत्ते के उपर से कूद गई।

नीचे दिए गए HTML का उपयोग करते हुए,

<input type="text" value="The quick brown fox jumped over the lazy dog."/>

यह ब्राउज़र में ऐसा प्रदर्शित होता है:


लेकिन मैं चाहूंगा कि इसे किसी ब्राउज़र में प्रदर्शित किया जाए:


मैं चाहता हूं कि मेरे इनपुट तत्व में पाठ लपेटा जाए। क्या यह बिना किसी बनावट के पूरा किया जा सकता है?


3
नहीं, मुझे नहीं लगता कि यह हो सकता है। लेकिन एक textarea एक विकल्प क्यों नहीं है?
पेक्का

37
एक textarea का उपयोग करना कभी-कभी एक विकल्प नहीं होता है क्योंकि आप पाठ की कई पंक्तियों के इनपुट की अनुमति नहीं देना चाहते हैं। बस पाठ की एक पंक्ति को लपेटने के लिए (नोट: वे एक ही बात नहीं हैं)।
फ्लैटलाइनर DOA

मानकीकरण के लिए CSSWG के साथ इस सटीक उद्देश्य के लिए चर्चा की गई एक समाधान है , दुख की बात है कि मैं इस मुद्दे को नहीं पा सकता हूं।
नल

मुझे यह मिला; github.com/w3c/csswg-drafts/issues/2141
Null

1
@Pekka that ऐसा नहीं है कि यह प्रासंगिक है, लेकिन कुछ कारणों में शामिल हैं: हम textareas पर html5 सत्यापन का उपयोग नहीं कर सकते हैं; हम textareas को मान्य करने के लिए पैटर्न की कमी का उपयोग नहीं कर सकते हैं; एक textarea एक इनपुट प्रकार = टेक्स्ट के लिए एक अनावश्यक पर्याय है (यह एक इनपुट है जो टाइप टेक्स्ट है!) जिसका अर्थ है कि दो बार स्टाइलिंग, आदि, आदि। संक्षेप में कई कारण हैं।
पीटर कियोंगा-कमाउ

जवाबों:


63

यह textareaमल्टीलाइन टेक्स्ट इनपुट के लिए काम है। ऐसा input नहीं होगा ; यह करने के लिए डिज़ाइन नहीं किया गया था।

तो एक का उपयोग करें textarea। उनके दृश्य अंतर के अलावा, उन्हें उसी तरह जावास्क्रिप्ट के माध्यम से एक्सेस किया जाता है ( valueसंपत्ति का उपयोग करें )।

आप inputघटना के माध्यम से और बस एक का उपयोग करके दर्ज की जा रही newlines को रोक सकते हैं replace(/\n/g, '')


74
यह वास्तव में इस सवाल का जवाब नहीं देता है कि प्रविष्टि के दौरान लिपटे हुए प्रदर्शित करते समय इनपुट की एक पंक्ति को कैसे इकट्ठा किया जाए।
ehdv

3
इसके साथ एक बड़ी समस्या यह है कि एक textarea मोबाइल उपकरणों पर जाने वाले बटन को दबा देता है।
दान

2
@alex बिल्कुल। इसलिए यदि आप वास्तविक मल्टीलाइन इनपुट चाहते हैं, तो एक टेक्स्टारिया बेहतर है, लेकिन यदि आप केवल शब्द-लिपटे इनपुट चाहते हैं, तो सीएसएस समाधान बेहतर है।
डेन

1
मैं यह कहने वाला था कि <textarea>jQuery के स्वत: पूर्ण जैसी चीजों से काम नहीं चलेगा, लेकिन बस इसमें बदलाव करना <input>चाहिए <textarea>और यह सब आवश्यक है। मानकों के लिए हुर्रे!
सेबलफॉस्टे

9
जैसा कि ऊपर कहा गया है: एक लाइन लपेटना! == एक बहु-पंक्ति स्ट्रिंग। मुझे यकीन नहीं है कि यह स्वीकृत उत्तर क्यों है क्योंकि यह प्रश्न का उत्तर नहीं देता है।
मैटलुमुस

36

वर्ड ब्रेक इरादे के कुछ नकल करेंगे

    input[type=text] {
        word-wrap: break-word;
        word-break: break-all;
        height: 80px;
    }
<input type="text" value="The quick brown fox jumped over the lazy dog" />

एक समाधान के रूप में, इस समाधान ने कुछ ब्राउज़रों पर अपनी प्रभावशीलता खो दी। कृपया डेमो देखें: http://cssdesk.com/dbCSQ


7
मैंने अभी इसे फ़ायरफ़ॉक्स 43.0.4 में परीक्षण किया है और यह सफारी 9 और क्रोम 48 में काम नहीं करता है लेकिन यह काम करने लगता है: cssdesk.com/dbCSQ
जेसन स्पर्सके

6
@JasonSperske द्वारा अटैच डेमो मेरे लिए फ़ायरफ़ॉक्स 45 में क्रोम 50 में न तो काम नहीं करता है।
czerny

डेमो मेरे लिए क्रोम 48 में क्रोम पर काम करता है, लेकिन मेरे अपने पेज में एक ही सीएसएस नहीं है।
Mnebuerquo

43
समाधान कम से कम क्रोम 50 से पुराना हो गया :(
userlond

5
इस समाधान के बारे में भूल जाएं: क्रोम 74/75, फ़ायरफ़ॉक्स 63/67, एज 42, IE 11 और UCBrowser 7.0 के साथ काम नहीं करता है (लेकिन GNOME वेब 3.28 के साथ काम करता है - AppleWebKit / 605.1.15)
tangua_k

10

आप इसके लिए इनपुट का उपयोग नहीं कर सकते हैं , आपको इसके बजाय textarea का उपयोग करने की आवश्यकता है। wrap="soft"कोड के साथ textarea का उपयोग करें और इस तरह के बाकी विशेषताओं को वैकल्पिक करें:

<textarea name="text" rows="14" cols="10" wrap="soft"> </textarea>

विशेषताएँ: इसमें पाठ की मात्रा को उदाहरण के लिए "40" वर्णों तक सीमित करने के लिए आप maxlength="40"इस तरह की विशेषता जोड़ सकते हैं : <textarea name="text" rows="14" cols="10" wrap="soft" maxlength="40"></textarea> इसके लिए शैली को छिपाने के लिए। अगर आप केवल का उपयोग overflow:scroll;या overflow:hidden;या overflow:auto;यह केवल एक स्क्रॉल पट्टी के लिए प्रभावित कर ले जाएगा। यदि आप प्रत्येक स्क्रॉल बार के लिए अलग-अलग विशेषताएँ चाहते हैं, तो overflow:scroll; overflow-x:auto; overflow-y:hidden;शैली क्षेत्र में इस तरह की विशेषताओं का उपयोग करें : बनावट को पुन: प्रयोज्य नहीं बनाने के लिए आप resize:none;इस तरह से शैली का उपयोग कर सकते हैं :

<textarea name="text" rows="14" cols="10" wrap="soft" maxlength="40" style="overflow:hidden; resize:none;></textarea>

इस तरह से आपके पास 14 पंक्तियों और 10 कॉल के साथ एक टेक्स्टारिया हो सकता है या वर्ड रैप और "40" वर्णों की अधिकतम वर्ण लंबाई है जो बिल्कुल एक इनपुट टेक्स्ट बॉक्स की तरह काम करता है लेकिन इनपुट टेक्स्ट का उपयोग किए बिना और इसके बिना पंक्तियों के साथ।

नोट: textarea इनपुट के विपरीत पंक्तियों के साथ काम करता है <input type="text" name="tbox" size="10"></input>जो कि उन पंक्तियों के साथ काम नहीं करने के लिए बना है ।


7

एक पाठ इनपुट बनाने के लिए जिसमें हुड के नीचे का मूल्य एक एकल पंक्ति स्ट्रिंग है, लेकिन उपयोगकर्ता को एक शब्द-लिपटे प्रारूप में प्रस्तुत किया जाता है, आप एक या अन्य तत्व पर सामग्रीयुक्त विशेषता का उपयोग कर सकते हैं <div>:

const el = document.querySelector('div[contenteditable]');

// Get value from element on input events
el.addEventListener('input', () => console.log(el.textContent));

// Set some value
el.textContent = 'Lorem ipsum curae magna venenatis mattis, purus luctus cubilia quisque in et, leo enim aliquam consequat.'
div[contenteditable] {
  border: 1px solid black;
  width: 200px;
}
<div contenteditable></div>

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