纯css改变输入框光标颜色

我就记得在不久前, 旭神写了一篇文章, CSS改变插入光标颜色caret-color简介及其它变色方法, 当时还发现旭神的demo页面一个BUG. 后来发现评论区有人说使用text-shadow也可以实现, 然后在逛大漠大大的博客时又偶然发现如何改变表单控件光标颜色, 说的就是利用 text-shadow 来实现的, 本着实践的精神, 自己又把这两位大神的代码敲了一遍, 发现一个更简洁写法(窃喜).

首先跟着旭神的思路

先利用css3的新属性: caret-color

input {
    color: #333;
    caret-color: red;
}
复制代码

这样, 在支持 caret-color 属性的现代浏览器下变现都ok, 但是, 现代浏览器 Safari 却并不支持这一属性, 因此, 为了兼容 Safari 浏览器, 旭神又给出了以下代码:

input {
    color: red;
}
input::first-line {
    color: #333;
}
复制代码

兼容 Safari 了, 但是火狐又出来调皮了, 怎么办呢, 综合一下两者, 有下面代码, 并且照顾到IE

input {
    color: #333;
    caret-color: red;
}
@supports (-webkit-mask: none) and (not (caret-color: red)) {
    input { color: red; }
    input::first-line { color: #333; }
}
复制代码

但是一开始大家就会注意到, 那就是 first-line, 因此对于多行文本元素 textarea 是不友好的.


下面, 来看看大漠大大的思路

不过大漠是倒着来的, 先说的以前的模拟的方法, 后介绍css3新属性 caret-color, 至于新属性的方法使用好简单, 这里就不赘述, 来说说大漠使用的 text-shadow 方法吧.

input,textarea { 
    color: rgb(60, 0, 248); /* 光标的颜色*/ 
    text-shadow: 0px 0px 0px #D60B0B; /* 文本颜色 */ 
    -webkit-text-fill-color: transparent; 
}
复制代码

其实原理都是一样的, 既然光标颜色和 color 颜色一致, 就设置 color 为想要的光标的颜色, 然后再利用css把文字的颜色改掉.

显然, text-shadow 可以完整地把文字内容复刻下来, 然后再利用 -webkit-text-fill-color 属性, 把文字原本的颜色变透明, 这样就显露出来了 text-shadow, 其实相比 first-line 来讲, 兼容性又更好了.


重点来了, 看我变身!

对于不是很清楚的东西, 还是有必要查一下来加深理解和扩展知识面的.

当我查询 -webkit-text-fill-color 属性的时候, 发现这货的作用竟然是: 检索或设置对象中的文字填充颜色. 我擦擦, 现成的属性不用, 非要绕路去使用 text-shadow(我确实不理解为什么). 两行代码解决问题:

.input5 {
    color: red;
    -webkit-text-fill-color: #333;
}
复制代码

然后, IE打上hack

.input5 {
    color: red;
    color\0: #333;
    -webkit-text-fill-color: #333;
}
复制代码

完美! 就是这个感觉.

最后附上原文链接纯css改变输入框光标颜色, 欢迎交流.

转载于:https://juejin.im/post/5ae92f20f265da0b873a4ced

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值