Mam DIV
który ma, contentEditable=true
wię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 DIV
tak, aby wyglądało ono dla użytkownika jak pole wprowadzania tekstu?
textarea
? jsfiddle.net/vwPgTOdpowiedzi:
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:
źródło
Jeśli używasz bootstrap, po prostu dodaj
form-control
class. Na przykład:class="form-control"
źródło
W WebKit możesz:
-webkit-appearance: textarea;
źródło
Możesz wybrać wewnętrzny cień pudełka:
div[contenteditable=true] { box-shadow: inset 0px 1px 4px #666; }
Zaktualizowałem jsfiddle z Jarish: http://jsfiddle.net/ZevvE/2/
źródło
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;
źródło
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>
źródło
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.
źródło