用于输入占位符的 HTML5 图像图标

Posted

技术标签:

【中文标题】用于输入占位符的 HTML5 图像图标【英文标题】:HTML5 image icon to input placeholder 【发布时间】:2012-11-25 13:07:23 【问题描述】:

我想在输入占位符中添加一个图像图标,如下图所示:

请注意,这是一个占位符,所以当用户开始输入时,图标也会消失。

我使用::-webkit-input-placeholder::before 为webkit (Safari+Chrome) 提供了以下解决方案。不幸的是,简单的 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 */

【问题讨论】:

【参考方案1】:

添加到蒂姆的答案:

  #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;

【讨论】:

【参考方案2】:

我不知道随着时间的推移是否有更好的答案,但这很简单而且很有效;

input[type='email'] 
  background: white url(images/mail.svg) no-repeat ;

input[type='email']:focus 
  background-image: none;

风格适合。

【讨论】:

但是在开始输入时它应该会消失,而不是在焦点上。【参考方案3】:
<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>

【讨论】:

【参考方案4】:

`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" />`

【讨论】:

【参考方案5】:
    您可以将其设置为background-image 并使用text-indentpadding 将文本向右移动。 您可以将其分解为两个元素。

老实说,我会避免使用 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';


2013 年 9 月 25 日

我不敢相信我说过“两种方式都需要 JavaScript 来隐藏图标。”,因为这并不完全正确。

隐藏占位符文本的最常见时机是更改,如此答案中所建议的那样。但是对于图标,可以将它们隐藏在焦点上,这可以在 CSS 中使用 active 伪类来完成。

#search:active  background-image: none; 

哎呀,使用 CSS3 你可以让它消失!

http://jsfiddle.net/2tTxE/


2013 年 11 月 5 日

当然,还有 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

https://developer.mozilla.org/en-US/docs/Web/CSS/::before

【讨论】:

@Tim 有没有办法使用“Font Awesome”实现确切的效果? @Robert 在某种程度上,是的。问题是您必须使用伪元素(:before:after),或者您必须添加额外的 DOM。为了使它们中的任何一个工作,该图标应该在:hover 而不是:focus 上可见,因为该图标不在输入元素中。查看demo。但是,使用 JavaScript,您可以激活焦点上的图标。随心所欲。 我认为在September 25h, 2013 更新中,您的示例代码是指#search:focus 而不是#search:active?!

以上是关于用于输入占位符的 HTML5 图像图标的主要内容,如果未能解决你的问题,请参考以下文章

在 HTML5 中不允许使用多行占位符的理由是啥?

使用 CSS 更改 HTML5 输入的占位符颜色

确定占位符的大小以匹配图像的实际大小

HTML5 中用于输入的占位符 VS 标签

在 Prototype 中使用表单验证的 HTML5 表单占位符回退

检查是不是支持占位符的简单方法?