2009-05-27 42 views
175

フォームの入力要素内にアイコンを配置するにはどうすればよいですか?フォーム内の入力要素内にアイコンを挿入

Screenshot of a web form with three inputs which have icons in them

でライブバージョン:リンクされたサイトは、これをやってのけるためにCSSのトリックの組み合わせを使用していますTidal Force theme

+0

<input id="foo" type="text" /> #foo::before { font-family: 'FontAwesome'; color:red; position: relative; left: -5px; content: "\f007"; } 
@IvanSokalskiyのTh誰かがブートストラップを使っていると仮定します。これを渡って来るすべての人がブートストラップを使用するわけではありません! –

答えて

274

。まず、<input>要素の背景画像を使用します。次に、カーソルを押し上げるために、padding-leftを使用します。言い換えれば

、彼らはこれらの二つのCSSルールがあります。

background: url(images/comment-author.gif) no-repeat scroll 7px 7px; 
padding-left:30px; 
+1

上部と左のパラメータ(7ピクセル×7ピクセル)とその他の属性について詳しく説明してください。それは参考にする必要があります。 – QMaster

+0

'padding-left'はInternet Explorer 8で無視されています。よく無視されませんが、長い入力を入力すると、入力がアイコンの前に表示され始めます。 –

+118

アドバイス:IE 8の使用をやめてください。 –

3

ちょうどあなたのCSSのbackgroundプロパティを使用します。

<input id="foo" type="text" /> 

#foo 
{ 
    background: url(/img/foo.png); 
} 
22

あなたはこれを試すことができます:他のユーザーが投稿し

input[type='text'] { 
    background-image: url(images/comment-author.gif); 
    background-position: 7px 7px; 
    background-repeat: no-repeat; 
}
36

CSSのソリューションは、これを実現するための最良の方法です。

問題がある場合は(IE6を参照)、div内にフチ無しの入力を使用することもできます。

<div style="border: 1px solid #DDD;"> 
    <img src="icon.png"/> 
    <input style="border: none;"/> 
</div> 

古いバージョンのブラウザでは機能しませんが、「クリーン」ではありません。

+2

この回答に良い追加。時には問題を引き起こすこともあり、これはそのうちの1つを解決する良い方法です。代わりにスパンで私のために働いた。 – Ross

+0

入力の中にもっと複雑な構造を追加するうまい方法! – jonhue

+0

@jonhue、あなたはまだ10年前に住んでいて、IE6をサポートする必要がない限り、私はこれをお勧めしません。それでも、私はそれを「きれい」と呼んでいません。 – harpo

7
.icon{ 
background: url(1.jpg) no-repeat; 
padding-left:25px; 
} 

上記のタグをCSSファイルに追加し、指定されたクラスを使用します。

18

私はこれを最高かつ最もクリーンな解決策にしています。使用テキストインデントinput要素に

CSS:

#icon{ 
background-image:url(../images/icons/dollar.png); 
background-repeat: no-repeat; 
background-position: 2px 3px; 
} 

HTML:アイコンが存在している(隠された入力とラベル:

<input id="icon" style="text-indent:17px;" type="text" placeholder="Username" /> 
+1

padding-leftはフィールドの幅を増やし、親要素からオーバーフローするので、テキストインデントをサポートしています。 – stakantin

+0

なぜあなたは#icon cssの代わりにスタイルインラインを入れましたか? –

+0

@WylliamJuddこれはデモンストレーションの目的のためだけです:) – user3284463

1
<label for="fileEdit"> 
    <i class="fa fa-cloud-upload"> 
    </i> 
    <input id="fileEdit" class="hidden" type="file" name="addImg" ng-file-change="onImageChange($files)" ng-multiple="false" accept="{{ contentType }}"/> 
    </label> 

たとえば、あなたがこれを使用することができます)。背景画像無し

13

溶液:

#input_container { 
 
    position:relative; 
 
    padding:0 0 0 20px; 
 
    margin:0 20px; 
 
    background:#ddd; 
 
    direction: rtl; 
 
    width: 200px; 
 
} 
 
#input { 
 
    height:20px; 
 
    margin:0; 
 
    padding-right: 30px; 
 
    width: 100%; 
 
} 
 
#input_img { 
 
    position:absolute; 
 
    bottom:2px; 
 
    right:5px; 
 
    width:24px; 
 
    height:24px; 
 
}
<div id="input_container"> 
 
    <input type="text" id="input" value> 
 
    <img src="https://cdn4.iconfinder.com/data/icons/36-slim-icons/87/calender.png" id="input_img"> 
 
</div>

3

フォント・アイコンで使用

<input name="foo" type="text" placeholder="&#61447;"> 

OR

+0

これは:: beforeは入力要素を適用できないようです。 – Vishnja

関連する問題