Tengo un DIV
que tiene contentEditable=true
para que el usuario pueda editarlo. El problema es que no parece un campo de texto, por lo que es posible que el usuario no tenga claro que se puede editar.
¿Hay alguna manera de que pueda diseñar el DIV
para que le parezca al usuario un campo de entrada de texto?
textarea
? jsfiddle.net/vwPgTRespuestas:
Estos tienen el mismo aspecto que sus contrapartes reales en Safari, Chrome y Firefox. Se degradan con gracia y también se ven bien en Opera e IE9.
Demostración: 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>
Salida:
fuente
Si usa bootstrap, simplemente agregue
form-control
class. Por ejemplo:class="form-control"
fuente
En WebKit, puede hacer:
-webkit-appearance: textarea;
fuente
Podrías optar por una sombra de caja interior:
div[contenteditable=true] { box-shadow: inset 0px 1px 4px #666; }
Actualicé el jsfiddle de Jarish: http://jsfiddle.net/ZevvE/2/
fuente
Sugeriría esto para que coincida con el estilo de Chrome, extendido del ejemplo de Jarish. Observe la propiedad del cursor que se omitieron en las respuestas anteriores.
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;
fuente
Puede colocar un TEXTAREA de tamaño similar debajo de su DIV, por lo que el marco del control estándar sería visible alrededor de div.
Probablemente sea bueno configurarlo para que esté desactivado, para evitar el robo de enfoque accidental.
fuente
El problema con todo esto es que no abordan si las líneas de texto son largas y mucho más anchas que el desbordamiento de div: auto no incluye una barra de desplazamiento que funcione correctamente. Aquí está la solución perfecta que encontré:
Crea dos divs. Un div interno que es lo suficientemente ancho para manejar la línea más ancha de texto y luego uno externo más pequeño que actúa en el soporte del div interno:
<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>
fuente