편집 가능한 DIV를 텍스트 필드처럼 보이게하려면 어떻게합니까?


82

내가있어 DIV이있는 contentEditable=true사용자가 편집 할 수 있습니다. 문제는 텍스트 필드처럼 보이지 않기 때문에 편집 할 수 있다는 것이 사용자에게 명확하지 않을 수 있다는 것입니다.

DIV사용자에게 텍스트 입력 필드처럼 보이도록 스타일을 지정할 수있는 방법이 있습니까?


2
배경 : 흰색; 테두리 : 1px 단색 # 666; 커서 : 텍스트; ? : P 내 데모보기
mkk

나는 그것을 어떻게 보이게 textarea할까요? jsfiddle.net/vwPgT
Jared Farrish

1
@mkk- 샘플 텍스트를 추가 하면 조금 도움이 될 수 있습니다 : jsfiddle.net/ZevvE/1
Jared Farrish

@Jared :) 잘 했어! ;-) 이제 div와 혼동하기가 훨씬 더 어렵습니다. 오 div입니다. 잊었습니다. :)
mkk

@mkk- 개인적으로 내 데모가 더 명확하다고 생각하지만, 그것이 바로 그것입니다.
Jared Farrish

답변:


125

이것들은 Safari, Chrome 및 Firefox의 실제 대응 물과 동일하게 보입니다. 그들은 우아하게 저하되고 Opera와 IE9에서도 괜찮아 보입니다.

데모 : http://jsfiddle.net/ThinkingStiff/AbKTQ/

CSS :

textarea {
    height: 28px;
    width: 400px;
}

#textarea {
    -moz-appearance: textfield-multiline;
    -webkit-appearance: textarea;
    border: 1px solid gray;
    font: medium -moz-fixed;
    font: -webkit-small-control;
    height: 28px;
    overflow: auto;
    padding: 2px;
    resize: both;
    width: 400px;
}

input {
    margin-top: 5px;
    width: 400px;
}

#input {
    -moz-appearance: textfield;
    -webkit-appearance: textfield;
    background-color: white;
    background-color: -moz-field;
    border: 1px solid darkgray;
    box-shadow: 1px 1px 1px 0 lightgray inset;  
    font: -moz-field;
    font: -webkit-small-control;
    margin-top: 5px;
    padding: 2px 3px;
    width: 398px;    
}

HTML :

<textarea>I am a textarea</textarea>
<div id="textarea" contenteditable>I look like textarea</div>

<input value="I am an input" />
<div id="input" contenteditable>I look like an input</div>

산출:

여기에 이미지 설명 입력


1
-webkit-small-controlmedium -moz-fixed 는 정확히 무엇을 합니까? Firefox v13.0에서 글꼴이 고정 폭으로 보이게하는 것 같습니다
Hengjie

1
@Hengjie 브라우저가 입력 필드를 표시 할 때 사용하는 기본 스타일입니다.
ThinkingStiff

1
여기에 유스 케이스가 있습니다. html 내용을 복사하여 붙여 넣으십시오. 차이를 볼 수 있습니다.
Praveen 2014 년

1
또한 추가해야합니다-background : white;
Brana

1
이 div 안에 다른 div를 원하는 경우 편집 할 수 없게하려면 어떻게해야합니까?
FrenkyB

21

부트 스트랩을 사용하는 경우 form-control클래스를 추가하십시오 . 예를 들면 :

class="form-control" 

이것은 훌륭한 대답이며 가장 깨끗하다고 ​​느낍니다. 제 투표는 이것이 정답이되는 것입니다.
aholtry

사용자가 영역을 확장 할 수있는 방법이 있습니까? 일반 텍스트 영역이이 작업을 수행합니다.
MARS


3

내부 상자 그림자로 이동할 수 있습니다.

div[contenteditable=true] {
  box-shadow: inset 0px 1px 4px #666;
}

Jarish에서 jsfiddle을 업데이트했습니다. http://jsfiddle.net/ZevvE/2/


1

Jarish의 예에서 확장 된 Chrome의 스타일과 일치하기 위해 이것을 제안합니다. 이전 답변이 생략 된 커서 속성을 확인하십시오.

cursor: text;
border: 1px solid #ccc;
font: medium -moz-fixed;
font: -webkit-small-control;
height: 200px;
overflow: auto;
padding: 2px;
resize: both;
-moz-box-shadow: inset 0px 1px 2px #ccc;
-webkit-box-shadow: inset 0px 1px 2px #ccc;
box-shadow: inset 0px 1px 2px #ccc;

0

DIV 아래에 비슷한 크기의 TEXTAREA를 배치 할 수 있으므로 표준 컨트롤의 프레임이 div 주위에 표시됩니다.

실수로 초점을 훔치는 것을 방지하기 위해 비활성화하도록 설정하는 것이 좋습니다.


예, 이것이 OP가 대답에서 찾고있는 것인지 확실하지 않습니다.
Jared Farrish

div의 내용에 따라 텍스트 필드의 크기를 자동으로 조정하려면 어려워집니다.
타이밍

0

이 모든 것의 문제는 텍스트 줄이 길고 div overflow : auto가 올바르게 작동하는 스크롤 막대를 광고하지 않는 것보다 훨씬 더 넓은 경우 해결하지 않는다는 것입니다. 내가 찾은 완벽한 솔루션은 다음과 같습니다.

두 개의 div를 만듭니다. 가장 넓은 텍스트 줄을 처리 할 수있을만큼 충분히 넓은 내부 div와 내부 div의 홀더 역할을하는 작은 외부 div :

<div style="border:2px inset #AAA;cursor:text;height:120px;overflow:auto;width:500px;">
    <div style="width:800px;">

     now really long text like this can be put in the text area and it will really <br/>
     look and act more like a real text area bla bla bla <br/>

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