快速了解:User-valid和:User-invalid

开发 前端
相对于​​:valid​​和​​:invalid​​,新加了​​user-​​前缀,其实就是表示用户,也就是说,这个校验要等用户操作之后才会校验,避免满屏都是红色输入框的尴尬。

最近,Chrome 119 终于正式对:user-valid和:user-invalid这两个验证伪类进行了支持。

至此,现代浏览器总算是全面支持了。

看名称,似乎和:valid和:invalid有点相似,那么有什么区别呢?快速了解一下吧

一、:valid 和 :invalid 的缺陷

大家可能或多或少都用过或者见过这两个伪类,这里简单介绍一下。

这两个都是做表单验证的,当表单输入合法或者非法的时候匹配。

比如这样一个输入框,设置了required属性,表示必填项。

<form>
  <label for="user">user *: </label>
  <input id="user" name="user" required />
  <span></span>
</form>

目前效果是这样的。

下面我们通过:invalid伪类进行校验,在不合法的情况下边框变红,并给出提示:

input:invalid {
  border-color: red;
}
input:invalid + span::before {
  content: "请输入";
  color: red;
}

当输入框没有内容时,就会出现错误提示。

一旦输入内容了,提示就消失了。

乍一看好像没什么毛病。

但是有个问题是,这个校验太及时了,用户还没做出任何交互,页面一进来就就出现错误提示了,你想想,用户一打开页面就看见大部分的输入框都是红色的,是不是不太友好?

为了解决这个问题,:user-valid和:user-invalid就出现了!

二、更友好的校验方式

相对于:valid和:invalid,新加了user-前缀,其实就是表示用户,也就是说,这个校验要等用户操作之后才会校验,避免满屏都是红色输入框的尴尬。

使用方式和规则和前面完全相同,我们把前面的CSS改一下。

input:user-invalid {
  border-color: red;
}
input:user-invalid + span::before {
  content: "请输入";
  color: red;
}

下面是两种伪类的对比。

可以看到,下面的输入框在初始情况下是不会校验的,只有用户手动输入后才会校验,这样体验就会好很多了~

值得注意的是,在用户操作之前(聚焦、输入等),即使是用脚本改变输入框内容,也是不会触发的。

input.value = '1223';
input.value = ''; // 不会提示错误

三、简单总结一下

这样一个小知识点,你学到了吗?再来简单回顾一下

  • :valid和:invalid可以用于表单验证
  • 不过这种方式校验太及时了,用户还没做出任何交互,就出现一堆错误提示,体验不太友好
  • :user-valid和:user-invalid只有在用户操作以后才会触发,提升了体验
  • 在用户操作之前,用 JS改变表单内容是不会触发的

当然这个特性目前三五年内都是无法使用的,不过我们依然可以参考这样的交互方式,提升用户体验。

责任编辑:姜华 来源: 前端侦探
相关推荐

2009-07-08 17:04:25

user cache

2017-03-17 09:38:16

MySQL数据库网路

2021-05-14 07:15:23

UsertpUser工具

2023-11-03 11:56:34

2011-08-24 13:43:09

CREATE USER中文man

2011-08-24 09:51:53

alter_user中文man

2011-08-24 14:59:50

drop_user中文man

2011-07-20 14:31:56

XCode User Scrip 脚本

2009-08-06 14:53:41

C# User类

2010-10-08 10:27:30

Mysql User表

2010-11-23 13:36:29

Mysql User表

2009-10-13 16:46:17

vmware_user

2015-07-29 10:18:35

Direct Cons虚拟化

2011-09-15 14:57:49

ubunturootuser用户

2013-08-21 13:14:56

iPhoneUser-Agent方法

2009-05-06 18:58:45

ArchlinuxUbuntuArch User M

2013-04-03 12:53:23

Android开发shared_user

2015-08-26 16:17:49

OpenStack OpenStack 架开源云平台

2022-08-31 08:40:42

Google I/OdeveloperAI

2018-02-02 16:37:49

运维JIRA系统
点赞
收藏

51CTO技术栈公众号