利用CSS3实现文本框的清除按钮相关的一些效果


Posted in HTML / CSS onJune 23, 2015

新技能传授-哔哔哔哔

search类型搜索框,设计师常常会设计一个叉叉图标,表示用户点之久可以清除输入的内容。比方说这个:
利用CSS3实现文本框的清除按钮相关的一些效果

这是不错的体验!

当前现代浏览器中,Chrome浏览器下type=search的输入框会有清除按钮的动态呈现,不过搜索input框尺寸不太好控制(padding无视);FireFox浏览器貌似任何类型的输入框都无动于衷;IE10+浏览器貌似任何输入框都会出现清除按钮,但是长得略微粗糙了点,设计师同学接受不了。

貌似不和谐了,咋办?传授个新技能,借助HTML以及CSS,来模拟清除按钮可动态呈现的搜索框。

如下CSS:

CSS Code复制内容到剪贴板
  1. .input { padding5pxmargin: 0; border1px solid #beceeb; }   
  2. .clear { displaynonepositionabsolutewidth16pxheight16pxmargin6px 0 0 -20pxbackgroundurl(clear.png);}   
  3. .input::-ms-clear { displaynone; }   
  4. .input:valid + .clear { displayinline; }  

如下HTML:

输入任意内容:

XML/HTML Code复制内容到剪贴板
  1. <input class="input" required><a class="clear"></a>  

然后就有类似下面截图的效果了(均截自FireFox浏览器):
利用CSS3实现文本框的清除按钮相关的一些效果

利用CSS3实现文本框的清除按钮相关的一些效果

手摸为实,眼观为虚。您可以狠狠地点击这里:CSS与文本框上清除按钮显隐Demo

实现原理   

    HTML部分
    因为search类型文本框在Chrome/Opera/Safari下尺寸不好控制,因此使用缺省的类型(也就是text类型);
    required是必要属性,配合CSS伪类实现我们的效果。
    CSS部分
    使用的是:valid伪类。这是CSS3中新增伪类,IE10+以及其他现代浏览器支持,表示表单合法。由于HTML中的<input>有HTML5表单验证属性required. 于是,如果文本框没有内容,则不合法;有内容,则合法,就会触发这里的:valid伪类选择器。而这里:valid伪类控制后面的清除按钮显示,于是就实现了我们想要的效果。

    啊,对了。IE11浏览器下不是所有的文本框都有黑色的叉叉吗,会跟这里的自定义清除按钮重叠,::-ms-clear { display: none; }这段代码可以去之~~

    更多伪元素改变表单控件默认样式可以参考“伪元素改变表单控件默认样式”一文。

补充于翌日:来公司用IE11测了下,没效果。后发现,不是伪类不认识,而是兄弟选择器的渲染bug. 通过修改透明度为0→1变化,鼠标hover清除按钮位置,则按钮出现或隐藏(见下面Gif)。尚未发现什么奇淫技巧修复这个问题。
利用CSS3实现文本框的清除按钮相关的一些效果

评论有说mac下Chrome浏览器无法清除。经自己测试,可以的。如果意思是点击关闭按钮清除,确实CSS无能为力。

实现的优点
此方法相比传统JS实现的好处在于,更简单了。JS的话还要侦听输入事件(input)等,比较折腾。CSS的话完全浏览器自身事件特性,显然,高效简单的多。

实现的不足
不足在于,兼容性。IE9-以下的浏览器只能点蜡烛了。

不过,写写原型啊,demo;或者渐进增强使用;或者移动端开发等,都可以试试这个新技能。

注意:点击叉叉是不会清除的,本文只是输入控制显隐!!

HTML / CSS 相关文章推荐
实列教程 一款基于jquery和css3的响应式二级导航菜单
Nov 13 HTML / CSS
CSS3的RGBA中关于整数和百分比值的转换
Aug 04 HTML / CSS
css3针对移动端卡顿问题的解决(动画性能优化)
Feb 14 HTML / CSS
CSS3 对过渡(transition)进行调速以及延时
Oct 21 HTML / CSS
5分钟弄清楚html5的drag and drop(小结)
Apr 10 HTML / CSS
HTML5 对各个标签的定义与规定:body的介绍
Jun 21 HTML / CSS
HTML5在IE10、火狐下中文乱码问题的解决方法
Nov 18 HTML / CSS
HTML5实现WebSocket协议原理浅析
Jul 07 HTML / CSS
html5教你做炫酷的碎片式图片切换 (canvas)
Jul 28 HTML / CSS
HTML5 常见面试题之PC端和移动端区别介绍
Jan 22 HTML / CSS
HTML5中在title标题标签里设置小图标的方法
Jun 23 HTML / CSS
Canvas获取视频第一帧缩略图的实现
Nov 11 HTML / CSS
使用CSS3制作饼状旋转载入效果的实例
Jun 23 #HTML / CSS
利用CSS3实现圆角的outline效果的教程
Jun 05 #HTML / CSS
浅析与CSS3的loading动画加载相关的transition优化
May 18 #HTML / CSS
CSS+jQuery+PHP+MySQL实现的在线答题功能
Apr 25 #HTML / CSS
CSS+jQuery实现的在线答题功能
Apr 25 #HTML / CSS
纯CSS3制作漂亮带动画效果的主机价格表
Apr 25 #HTML / CSS
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
Apr 24 #HTML / CSS
You might like
可定制的PHP缩略图生成程式(需要GD库支持)
2007/03/06 PHP
PHP 变量定义和变量替换的方法
2009/07/30 PHP
PHP加Nginx实现动态裁剪图片方案
2014/03/10 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
javascript中 try catch用法
2015/08/16 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
Python打印斐波拉契数列实例
2015/07/07 Python
简单学习Python多进程Multiprocessing
2017/08/29 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
消防安全管理制度
2014/02/01 职场文书
2014年国庆节庆祝建国65周年比赛演讲稿
2014/09/21 职场文书
实习计划书范文
2015/01/16 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers