次の図のように、入力プレースホルダーに画像アイコンを追加したいと思います。
これはプレースホルダーであるため、ユーザーが入力を開始すると、アイコンも消えます。
私は::-webkit-input-placeholder
および::before
。残念ながら、mozillaへの簡単なアプリケーションは機能していないようです。
だから私の質問は:入力プレースホルダーに画像アイコンを追加するためのクロスブラウザソリューションはありますか?
Webkitのソリューション:
#myinput::-webkit-input-placeholder::before {
content: ' ';
position: absolute;
top: 2px; /* adjust icon position */
left: 0px;
width: 14px; /* size of a single icon */
height: 14px;
background-image: url("/path/to/icons.png"); /* all icons in a single file */
background-repeat: no-repeat;
background-position: -48px 0px; /* position of the right icon */
}
background-image
として設定し、text-indent
またはpadding
を使用して、テキストを右にシフトできます。正直、HTML5/CSS3を適切なフォールバックなしで使用することは避けます。すべての新しい派手なものをサポートしていない古いブラウザを使用している人が多すぎます。残念ながら、フォールバックを削除するにはしばらく時間がかかります:(
最初に述べた方法は、最も安全で簡単な方法です。どちらの方法でも、アイコンを非表示にするにはJavascriptが必要です。
CSS:
input#search {
background-image: url(bg.jpg);
background-repeat: no-repeat;
text-indent: 20px;
}
HTML:
<input type="text" id="search" name="search" onchange="hideIcon(this);" value="search" />
Javascript:
function hideIcon(self) {
self.style.backgroundImage = 'none';
}
「どちらの方法でもアイコンを隠すにはJavaScriptが必要です」と言ったとは信じられません。
この回答で提案されているように、プレースホルダーテキストを非表示にする最も一般的なタイミングは変更時です。ただし、アイコンの場合は、active
擬似クラスを使用してCSSで実行できるフォーカスで非表示にしてもかまいません。
#search:active { background-image: none; }
ヘック、CSS3を使用すると、フェードアウトさせることができます!
もちろん、CSS3 :: before疑似要素もあります。ただし、ブラウザのサポートに注意してください!
Chrome Firefox IE Opera Safari
:before (yes) 1.0 8.0 4 4.0
::before (yes) 1.5 9.0 7 4.0
`CSS:
input#search{
background-image: url(bg.jpg);
background-repeat: no-repeat;
text-indent: 20px;
}
input#search:focus{
background-image:none;
}
HTML:
<input type="text" id="search" name="search" value="search" />`
時間が経つにつれてより良い答えがあるかどうかはわかりませんが、これは簡単であり、機能します。
input[type='email'] {
background: white url(images/mail.svg) no-repeat ;
}
input[type='email']:focus {
background-image: none;
}
それに合わせてスタイルを整えます。
<html>
<head>
<style>
input[type=text] {
width: 50%;
box-sizing: border-box;
border: 2px solid #ccc;
border-radius: 4px;
font-size: 16px;
background-color: white;
background-image: url('searchicon.png');
background-position: 10px 10px;
background-repeat: no-repeat;
padding: 12px 20px 12px 40px;
}
</style>
</head>
<body>
<p>Input with icon:</p>
<form>
<input type="text" name="search" placeholder="Search..">
</form>
</body>
</html>
ティムの答えに追加:
#search:placeholder-shown {
// show background image, I like svg ????
// when using svg, do not use HEX for colour; you can use rbg/a instead
// also notice the single quotes
background-image url('data:image/svg+xml; utf8, <svg>... <g fill="grey"...</svg>')
// other background props
}
#search:not(:placeholder-shown) { background-image: none;}