編集可能なDIVをテキストフィールドのようにするにはどうすればよいですか?


82

ユーザーが編集できるように持っているDIVものがcontentEditable=trueあります。問題は、テキストフィールドのように見えないため、編集できるかどうかがユーザーに明確でない可能性があることです。

DIVテキスト入力フィールドのようにユーザーに表示されるようにスタイルを設定する方法はありますか?


2
背景:白; ボーダー:1px実線#666; カーソル:テキスト; ?:P私のデモを
mkk 2012年

私はそれをtextarea?のように見せると思います jsfiddle.net/vwPgT
Jared

1
@ mkk-サンプルテキストを追加すると、少し役立つかもしれませんjsfiddle.net/ZevvE/1
Jared

@Jared :)お疲れ様でした!;-)今ではdivと混同するのがはるかに難しくなっています..ああ、それはdivです、私は忘れました:)
mkk 2012年

@ mkk-私は個人的に私のデモがより明確だと思います、しかしねえ、それはそれが何であるかです。
Jared

回答:


125

これらは、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-controlmedium -moz-fixedは正確に何をしますか?Firefox v13.0ではフォントが等幅に見えるようになっているようです
Hengjie 2012

1
@Hengjieこれらは、ブラウザが入力フィールドを表示するときに使用するデフォルトのスタイルです。
ThinkingStiff

1
これがユースケースです。HTMLコンテンツをコピーして貼り付けてみてください。違いがわかります。
Praveen 2014

1
また、追加する必要があります--background:white;
ブラナ2016

1
このdiv内に別のdivが必要で、編集可能にしたくない場合はどうすればよいですか?
frenkyB 2016年

21

ブートストラップを使用する場合は、form-controlクラスを追加するだけです。例えば:

class="form-control" 

これは素晴らしい答えであり、私は最もきれいだと感じています。私の投票はこれが正しい答えであるということです。
aholtry 2016

ユーザーがエリアを拡大できるようにする方法はありますか?通常のtextareaがこれを行います。
火星


3

あなたは内側の箱の影に行くことができます:

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

Jarishからjsfiddleを更新しました:http://jsfiddle.net/ZevvE/2/


1

Jarishの例から拡張した、Chromeのスタイルに一致させるためにこれを提案します。以前の回答で省略されているcursorプロパティに注意してください。

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;

0

同様のサイズのTEXTAREAをDIVの下に配置できるため、標準のコントロールのフレームがdivの周囲に表示されます。

誤ってフォーカスを盗むのを防ぐために、無効に設定することをお勧めします。


ええ、これがOPが答えで探しているものかどうかはわかりません。
Jared Farrish 2012年

テキストフィールドをdivの内容に合わせて自動的に拡大縮小したい場合、これは難しくなります。
タイミング

0

これらすべての問題は、テキストの行が長く、divオーバーフローよりもはるかに広い場合に対処しないことです。autoは正しく機能するスクロールバーを広告しません。これが私が見つけた完璧な解決策です:

2つのdivを作成します。テキストの最も広い行を処理するのに十分な幅の内側の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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.