Як зробити так, щоб редагований DIV виглядав як текстове поле?


82

У мене DIVє contentEditable=trueтакий, що користувач може редагувати його. Проблема в тому, що воно не схоже на текстове поле, тому користувачеві може бути не зрозуміло, що його можна редагувати.

Чи є спосіб, яким я можу DIVоформити стиль так, щоб він здавався користувачеві як поле введення тексту?


2
фон: білий; межа: 1 піксель суцільний # 666; курсор: текст; ? : P дивіться мою демонстрацію
mkk

Припускаю, щоб це було схоже на textarea? jsfiddle.net/vwPgT
Джаред Ферріш,

1
@mkk - Може трохи допомогти, якщо ви додали зразок тексту: jsfiddle.net/ZevvE/1
Джаред Ферріш

@Jared :) гарна робота! ;-) зараз набагато важче сплутати це з div .. о, це div, я забув :)
mkk

@mkk - Я особисто вважаю, що моя демонстрація зрозуміліша, але привіт, це те, що вона є.
Джаред Ферріш,

Відповіді:


128

Вони схожі на справжні аналоги в 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-control і medium -moz-fixed ? Вони, здається, роблять шрифт одношаровим у Firefox v13.0
Hengjie

1
@Hengjie Це стилі за замовчуванням, які браузери використовують при відображенні полів введення.
ThinkingStiff 02

1
ось варіант використання, спробуйте скопіювати в них HTML-вміст. Ви побачите різницю.
Praveen

1
Також слід додати - фон: білий;
Брана

1
Що робити, якщо я хочу інший div у цьому div, який я не хочу, щоб його можна було редагувати?
FrenkyB

23

Якщо ви використовуєте bootstrap, просто додайте form-controlклас. Наприклад:

class="form-control" 

Це чудова відповідь, і я вважаю, що це найчистіший. Я проголосував за те, щоб це була правильна відповідь.
aholtry

Будь-який спосіб дозволити користувачеві розширити область? Звичайна текстова область робить це.
MARS



1

Я б запропонував це для відповідності стилю 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;

1

Проблема з усім цим полягає в тому, що вони не вирішуються, якщо рядки тексту довгі та набагато ширші, ніж 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>

0

Ви можете розмістити ТЕКСТАРЕ подібного розміру під своїм DIV, так що стандартний кадр елемента керування буде видно навколо div.

Можливо, добре встановити його для відключення, щоб запобігти випадковому викраденню фокусу.


Так, не впевнений, це те, що OP шукає у відповіді.
Джаред Ферріш,

Якщо ви хочете, щоб текстове поле автоматично масштабувалось із вмістом div, це стає важко.
хронометраж
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.