【CSS3】自定义设置可编辑元素闪烁光标的颜色

前言

由于业务需求, 要求咱们的input框内的文本与悬浮的光标颜色不一样, 这样的问题确定在书本上很难找到解决办法, 须要经过平时的基础积累和经验。

解决方案

  • 使用 ::first-line 伪元素
  • 使用 text-shadowtext-fill-color
  • 使用 caret-color

::fist-line 修改元素

原理 php

通常来讲,设置input框的 color 属性会修改文本内容的颜色,同时顺带改变光标的颜色。而::first-line也能够设置首行文本内容的颜色, 利用选择器的权重比,::first-line覆盖了前者的color,最终获得了想要的结果。实际演示css

input.form-control {
    color: #05d380; /* 光标颜色 */
}

input.form-control::first-line {
    color: #333; /* 文本颜色 */
}

缺陷html

只适用于input框, 同时微信 webview 不支持。须要写两个css样式。css3

text-shadow 和 text-fill-color

原理 web

先利用color设置文本和光标的颜色, 而后利用 text-shadow 设置文本阴影覆盖文本颜色, 最后使用text-fill-color 将文本颜色置为透明。实际演示浏览器

.form-control {
    color: #05d380; /* 光标颜色 */
    text-shadow: 0 0 0 #333; /* 文本颜色 */
    -webkit-text-fill-color: transparent;
}

/* 设置暗文颜色 */
.form-control::-webkit-input-placeholder{ 
    color: rgb(60, 0, 248); /* 改变placeholder文本颜色 */ 
    text-shadow: none; 
    -webkit-text-fill-color: initial;
}

缺陷 微信

text-fill-color 属性不太支持 firefox, 目前尽可能使用 -webkit- 前缀。wordpress

caret-color

原理 spa

这是CSS3最新的属性,目的就是为了解决光标颜色的问题。 实际演示.net

.form-control {
    color: #333; /* 文本颜色 */
    caret-color: #05d380; /* 光标颜色 */
}

缺陷

低版本IE浏览器不支持

兼容性考虑

为了兼容多端设备显示状况,咱们必需要将一些状况考虑进来, 使用@support 条件判断来检测是否可用。由于个人环境在于移动端展现,因此只要要求进行兼容移动端,结合第二种和第三种解决方案,能够大面积覆盖设备。

.form-control {
    color: #05d380; /* 光标颜色 */
    text-shadow: 0 0 0 #333; /* 文本颜色 */
    -webkit-text-fill-color: transparent;
}

@supports (caret-color: #05d380) {
    .form-control {
        color: #333; /* 文本颜色 */
        caret-color: #05d380; /* 光标颜色 */
    }
}

小结

最近的需求里,移动端开发愈来愈多,而设备兼容性一直都是头疼的事情,如何更好的方式调试,写出兼容性更强的代码。须要的就是不断总结,减小错误重复发生。

最后能给你们带来帮助就好,但愿你们多点赞,收藏 !!

周边知识

相关文章
相关标签/搜索