placeholder在不同浏览器下的表现及兼容方法

1、什么是placeholder?

placeholder是html5新增的一个属性,当input或者textarea设置了该属性后,该值的内容将作为灰字提示显示在文本框中,当文本框获得焦点(或输入内容)时,提示文字消失。

写法如下:

2、placeholder的浏览器兼容性和在不同浏览器下的表现

由于placeholder是html5的新属性,可想而知,仅支持html5的浏览器才支持placeholder,目前最新的firefox、chrome、safari以及ie10都支持,ie6到ie9都不支持。

下面是其在各个浏览器下的显示效果:

firefox:

chrome:

safari:

ie10:

可以看出,placeholder的文字在各个浏览器下基本都是淡灰色显示。

不同的地方在于,在ff和chrome下,输入框获得焦点时,placeholder文字没有变化,只有当输入框中输入了内容时,placeholder文字才消失;而在safari和ie10下,当输入框获得焦点时,placeholder文字便立即消失。

默认情况下,placeholder的文字是灰色,输入的文字是黑色。而我们拿到的设计稿上的色值往往并不与默认情况下完全一致。那么,如何修改placeholder的色值呢?

如果直接写input{color:red;},可以看到,ie10和ff下,placeholder文字和输入文字都变成了红色,如下:

ff:

ie10:

而在chrome和safari下,placeholder文字颜色不变,只有输入的文字变成红色。

显然,这种做法是行不通的。因为我们只想改变placeholder文字的颜色,并不想改变输入文字的颜色。

正确的写法如下:

::-moz-placeholder{color:red;}  
     
     //ff

::-webkit-input-placeholder{color:red;}  
  //chrome,safari

:-ms-input-placeholder{color:red;}  
     
 //ie10

3、如何使placeholder兼容所有浏览器

前面我们知道了,ie6到ie9并不支持原生的placeholder,并且即使在支持原生placeholder的浏览器上,其表现也并不一致。在实际项目中,如何使所有浏览器都一致地支持placeholder呢?

(1)如果只需要让不支持placeholder的浏览器能够支持改功能,并不要求支持原生placeholder的浏览器表现一致,那么可以采用如下方法:

function
placeholder(nodes,pcolor) {

if(nodes.length && !("placeholder" in
document_createElement_x("input"))){

for(i=0;i

var self = nodes[i],

placeholder = self.getAttribute(‘placeholder‘) || ‘‘;

self.onfocus = function(){

if(self.value == placeholder){

self.value = ‘‘;

self.style.color = "";

}

}

self.onblur = function(){

if(self.value == ‘‘){

self.value =
placeholder;

self.style.color =
pcolor;

}

}

self.value = placeholder;

self.style.color = pcolor;

}

}

}

(2)如果需要自定义样式,并且希望placeholder在所有浏览器下表现一致,可以通过利用label标签模拟一个placeholder的样式放到输入框上,当输入框获得焦点的时候,隐藏label,当输入框失去焦点的时候,显示label。

或者是在input上应用背景图片,获得和失去焦点的时候切换背景图片是否显示。

实现方法有很多种,欢迎大家各抒已见。

时间: 2024-10-06 13:33:34

placeholder在不同浏览器下的表现及兼容方法的相关文章

不同浏览器下js的字符串split方法的差异

嘛,最近在各种直接拿代码调试,发现的问题可能稍微多了一点,姑且都记下来,这个随笔以后可能会不定期更新,因为相信不同浏览器之间各种差异还是很多的. 直接上代码 1 <html> 2 <head> 3 </head> 4 5 <body> 6 <script> 7 var str = "/part1/part2"; 8 var _list = str.split(/[\\/]/); 9 for(var i = 0; i <

IE浏览器下常见的CSS兼容问题

[1]IE6-浏览器下子元素能撑开父级设置好的宽高 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> body{ margin: 0; } ul{ margin: 0; padding: 0; list-style: none; } .list{

解决html5新标签 placeholder 低版本浏览器下不兼容问题

placeholder属性是HTML5 中为input添加的.在input上提供一个占位符,文字形式展示输入字段预期值的提示信息(hint),该字段会在输入为空时显示. 实例:1 <input type="text" name="userName" placeholder="请输入用户名"> placeholder操作起来非常方便,提高了开发效率,同时在高版本浏览器中用户体验也很好,所以本人很喜欢用这个属性. 然而,在IE9以下版本浏

outline轮廓线在不同CSS样式下的表现

outline轮廓线在不同CSS样式下的表现 默认 普通的文字链接这是默认状态下,CSS文字缩进属性text-indent为-1000像素的表现.这是默认状态下,a标签内部span标签绝对定位左偏移-1000像素的表现. 这里使用了文字偏移技术.一是使用text-indent负值:而是添加内部标签,然后左偏移绝对定位,定位至浏览器可视区域的外部.然而此技术会带来的问题是:焦点区域跟着延伸了,于是会有长长的链接轮廓框.在Firefox浏览器下,点击上面两个文字按钮可见此问题. 默认样式加overf

浏览器css bug及bug解决方法

Bugs及解决方案列表(以下实例默认运行环境都为Standard mode): 如何在IE6及更早浏览器中定义小高度的容器? 方法: #test{overflow:hidden;height:1px;font-size:0;line-height:0;}IE6及更早浏览器之所以无法直接定义较小高度的容器是因为默认会有行高 如何解决IE6及更早浏览器浮动时产生双倍边距的BUG? 方法: #test{display:inline;}当在IE6及更早浏览器中出现浮动后margin值解析为双倍的情况,设

CSS中!important的用法和在IE6下的表现

!important的用法和在IE6下的表现:!important可以提高指定CSS语句的优先级,使用方法是在相应的CSS语句后面加上!important.例如: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.51texiao.cn/" /> &l

jQuery ajax方法在Chrome浏览器下失效问题

最近做测试时碰到一个问题,chrome下使用ajax的一些方法(如get,load等)的时候完全失效: $(function() { $("#send").click(function() { $("#resText").load("test.html"); }); }); 代码如上,在其他浏览器,如firefox中表现正常: 百度谷歌之后,才发觉原来是chrome里面对非服务端的AJAX调用做了严格的限制,如果放到服务器上,使用http:访问就

IE6浏览器下div无法遮盖select下拉框解决方法

IE6浏览器下div无法遮盖select下拉框解决方法:在IE6浏览器下,select下拉框无法被div遮盖,其他的主流浏览器都是正常的.这里简单介绍一下如何解决此问题.默认状态下IE6的表现: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.51texiao.cn

谷歌、火狐浏览器下实现JS跨域iframe高度自适应的完美解决方法,跨域调用JS不再是难题!

谷歌.火狐浏览器下实现JS跨域iframe高度自适应的解决方法 导读:今天开发的时候遇到个iframe自适应高度的问题,相信大家对这个不陌生,但是一般我们都是在同一个项目使用iframe嵌套页面,这个ifame高度自适应网上一搜一大把,今天要讲的如何在不同的网站下进行相互的调用跟在同一个网站下是一个效果:例如我在自己的项目里面Iframe  了第一博客的页面  http://www.diyibk.com/   当第一博客的页面高度变化了怎么通知父页面呢? 这个时候在谷歌下肯定是拿不到 ifram