Как сделать редактируемый DIV похожим на текстовое поле?

У меня есть DIV, у которого contentEditable=true, поэтому пользователь может его отредактировать. Проблема в том, что он не похож на текстовое поле, поэтому пользователю может быть неясно, что он может быть отредактирован.

Есть ли способ, которым я могу создать стиль DIV, чтобы он отображался пользователю как текстовое поле ввода?

Ответ 1

Они выглядят так же, как и их реальные аналоги в 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>

Вывод:

enter image description here

Ответ 2

В WebKit вы можете сделать: -webkit-appearance: textarea;

Ответ 3

Если вы используете bootstrap, просто добавьте класс form-control. Например:

class="form-control" 

Ответ 4

Вы можете использовать внутреннюю тень окна:

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

Я обновил jsfiddle от Jarish: http://jsfiddle.net/ZevvE/2/

Ответ 5

Я бы предложил это для соответствия стилю Chrome, расширенного от примера Jarish. Обратите внимание на свойство курсора, о котором предыдущие ответы опустили.

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;

Ответ 6

Вы можете поместить TEXTAREA с аналогичным размером под своим DIV, поэтому стандартная рамка управления будет видна вокруг div.

Вероятно, полезно отключить его, чтобы избежать случайного фокуса.

Ответ 7

Проблема со всем этим заключается в том, что они не адресуют, если строки текста длинны и намного шире, чем переполнение div: auto не объявляет полосу прокрутки, которая работает правильно. Вот идеальное решение, которое я нашел:

Создайте два 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>