Jak sprawić, by edytowalny DIV wyglądał jak pole tekstowe?


82

Mam DIVktóry ma, contentEditable=truewięc użytkownik może go edytować. Problem polega na tym, że nie wygląda jak pole tekstowe, więc dla użytkownika może nie być jasne, że można je edytować.

Czy istnieje sposób, w jaki mogę ustawić styl DIVtak, aby wyglądało ono dla użytkownika jak pole wprowadzania tekstu?


2
tło: białe; obramowanie: 1px solid # 666; kursor: tekst; ? : P zobacz moje demo
mkk

Przypuszczam, że to wygląda jak textarea? jsfiddle.net/vwPgT
Jared Farrish

1
@mkk - Może trochę pomóc, jeśli dodasz przykładowy tekst: jsfiddle.net/ZevvE/1
Jared Farrish

@Jared :) Dobra robota! ;-) teraz dużo trudniej go pomylić z div .. och to div, zapomniałem :)
mkk

@mkk - Osobiście uważam, że moje demo jest bardziej przejrzyste, ale hej, tak właśnie jest.
Jared Farrish

Odpowiedzi:


128

Wyglądają tak samo, jak ich prawdziwe odpowiedniki w Safari, Chrome i Firefox. Degradują się wdzięcznie i wyglądają dobrze również w Operze i IE9.

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

Wynik:

wprowadź opis obrazu tutaj


1
Co dokładnie robi -webkit-small-control i medium -moz-fixed ? Wydaje się, że w przeglądarce Firefox 13.0 czcionka wygląda na nieregularną
Hengjie

1
@Hengjie Są to domyślne style używane przez przeglądarki podczas wyświetlania pól wejściowych.
ThinkingStiff

1
tutaj jest przypadek użycia, spróbuj skopiować i wkleić zawartość HTML w nich. Zobaczysz różnicę.
Praveen

1
Należy również dodać - tło: białe;
Brana

1
A co, jeśli chcę mieć inny element div wewnątrz tego elementu div, którego nie chcę, aby był edytowalny?
FrenkyB,

23

Jeśli używasz bootstrap, po prostu dodaj form-controlclass. Na przykład:

class="form-control" 

To świetna odpowiedź i wydaje mi się, że jest najczystsza. Głosuję za właściwą odpowiedzią.
aholtry

Jakikolwiek sposób, aby umożliwić użytkownikowi rozszerzenie obszaru? Robi to zwykły obszar teksturowy.
MARS



1

Sugerowałbym to, aby dopasować styl Chrome, rozszerzony na przykładzie Jarisha. Zwróć uwagę na właściwość kursora, która została pominięta w poprzednich odpowiedziach.

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

Problem z tym wszystkim polega na tym, że nie rozwiązują problemu, jeśli wiersze tekstu są długie i znacznie szersze niż przepełnienie div: auto nie wyświetla paska przewijania, który działa poprawnie. Oto idealne rozwiązanie, które znalazłem:

Utwórz dwa elementy div. Wewnętrzny element div, który jest dostatecznie szeroki, aby obsłużyć najszerszą linię tekstu, a następnie mniejszy zewnętrzny element, który działa jako uchwyt wewnętrznego elementu 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

Możesz umieścić TEXTAREA o podobnym rozmiarze pod swoim DIV, aby ramka standardowej kontrolki była widoczna wokół div.

Prawdopodobnie dobrze jest ustawić go jako wyłączony, aby zapobiec przypadkowej kradzieży ostrości.


Tak, nie jestem pewien, czy tego OP szuka w odpowiedzi.
Jared Farrish

Jeśli chcesz, aby pole tekstowe skalowało się automatycznie wraz z zawartością elementu div, jest to trudne.
czas na
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.