입력 유형 = "텍스트"요소 HTML / CSS 내부 텍스트 감싸기


99

아래에 표시된 HTML,

<input type="text"/>

다음과 같이 브라우저에 표시됩니다.


다음 텍스트를 추가하면

빠른 갈색 여우가 게으른 개를 뛰어 넘었습니다.

아래 HTML을 사용하여

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

다음과 같이 브라우저에 표시됩니다.


그러나 다음과 같이 브라우저에 표시되기를 바랍니다.


내 입력 요소의 텍스트를 래핑하고 싶습니다. 텍스트 영역없이이 작업을 수행 할 수 있습니까?


3
아뇨, 안될 것 같아요. 그러나 텍스트 영역이 옵션이 아닌 이유는 무엇입니까?
Pekka 2011 년

37
여러 줄의 텍스트를 입력하는 것을 원하지 않기 때문에 텍스트 영역을 사용하는 것은 때때로 옵션이 아닙니다. 한 줄의 텍스트를 줄 바꿈하는 것뿐입니다 (참고 : 동일하지 않음).
Flatliner DOA 2013 년

표준화 를 위해 CSSWG 와 정확한 목적으로 논의 된 솔루션이 있지만 슬프게도 문제를 찾을 수 없습니다.
Null


1
@Pekka 웃은 관련성이 없지만 몇 가지 이유는 다음과 같습니다. 텍스트 영역에서 html5 유효성 검사를 사용할 수 없습니다. 텍스트 영역의 유효성을 검사하기 위해 패턴 제약을 사용할 수 없습니다. 텍스트 영역은 입력 유형 = 텍스트 (텍스트 유형의 입력입니다!)에 대한 불필요한 동의어입니다. 이는 두 배의 스타일링 등을 의미합니다. 요컨대 많은 이유가 있습니다.
Peter Kionga-Kamau

답변:


65

그것이 여러 줄 textarea텍스트 입력에 대한 작업입니다. 는 input 그것을하지 않을 것이다 ; 그렇게하도록 설계되지 않았습니다.

따라서 textarea. 시각적 차이 외에도 JavaScript를 통해 동일한 방식으로 액세스됩니다 ( value속성 사용 ).

input이벤트 를 통해 그리고 단순히 replace(/\n/g, '').


74
이것은 실제로 입력하는 동안 줄 바꿈을 표시하면서 한 줄의 입력을 수집하는 방법에 대한 질문에 실제로 대답하지 않습니다.
ehdv

3
이것의 주요 문제는 텍스트 영역이 모바일 장치의 이동 버튼을 억제한다는 것입니다.
Dan

2
@alex 정확합니다. 따라서 실제 여러 줄 입력을 원하면 텍스트 영역이 더 좋지만 단어 줄 바꿈 입력을 원하면 CSS 솔루션이 더 좋습니다.
Dan

1
그 말에 대해 나는이었다 <textarea>jQuery의 자동 완성과 같은 것들로하지 않습니다 일을하지만, 단지 변경 <input><textarea>해당 필수적인 모든. 표준 만세!
Sablefoste 2016-06-03

9
위에서 말했듯이 : 줄 바꿈! == 여러 줄 문자열. 질문에 대한 답변이 아니기 때문에 이것이 왜 받아 들여지는 대답인지 잘 모르겠습니다.
mattLummus

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
제이슨 Sperske

6
@JasonSperske로 첨부 데모는하지 크롬 50에서 파이어 폭스 (45)의 어느 쪽도 아니 나를 위해 일을하지하지 않는다
체르니

데모는 Linux의 Chrome 48에서 작동하지만 내 페이지의 동일한 CSS는 그렇지 않습니다.
Mnebuerquo 2016

43
솔루션은 적어도 크롬 50에서 구식이되었습니다 :(
userlond

5
이 솔루션 잊어 :하지가 크롬 75분의 74, 파이어 폭스 67분의 63, 에지 (42), IE 11 UCBrowser 7.0에서 작동 하나 (그러나 그놈 웹 3.28와 작품 - AppleWebKit / 605.1.15)
tanguy_k

11

입력을 사용할 수 없으며 대신 텍스트 영역을 사용해야합니다. wrap="soft"코드와 함께 텍스트 영역을 사용하고 다음과 같은 나머지 속성은 선택 사항입니다.

<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>

이렇게하면 입력 텍스트 상자와 똑같이 작동하지만 입력 텍스트를 사용하지 않고 행을 사용하는 "40"문자의 최대 문자 길이와 단어 줄 바꿈이있는 14 개 행과 10 개 열이있는 텍스트 영역을 만들 수 있습니다.

참고 : 입력과 같은 달리 행 텍스트 영역의 작품 <input type="text" name="tbox" size="10"></input>으로 구성되어 있지 전혀 행이 작동합니다.


7

내부 값이 단일 행 문자열이지만 사용자에게 단어 줄 바꿈 형식으로 표시되는 텍스트 입력을 생성하려면 또는 다른 요소 에 contenteditable 속성을 사용할 수 있습니다 <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>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.