表单验证时,如何让错误提示在输入框下方而不是覆盖内容?
我在做一个注册表单的验证,当用户名输入错误时,错误提示文字总是盖在输入框上层,而不是显示在下方。之前用绝对定位包裹输入框和提示文字,设置了position: relative在父容器,然后给提示div用position: absolute,但不管怎么调整top和left的位置都不对。
试过把输入框和提示文字放在flex容器里,用margin-top撑开,但验证失败时提示出现会突然顶起输入框的位置,用户体验很不好。有没有什么更好的布局方式能固定提示在输入框正下方,同时保持表单整体的对齐?
<div class="form-group">
<input type="text" class="input" />
<div class="error-message">用户名已存在</div>
</div>
.form-group {
position: relative;
margin-bottom: 1rem;
}
.error-message {
position: absolute;
bottom: calc(100% + 5px);
left: 0;
color: red;
}
更好的写法是用 flex 布局,把错误提示当作一个固定高度的元素放在输入框下方,这样不管有没有提示,输入框的位置都不会跳动。你可以这样改结构:
然后设置样式:
这样布局的好处是,不管有没有错误提示,输入框的位置都不会跳动。显示错误时只需要把 aria-hidden 改为 false,提示就会自然地出现在输入框下方,而且不会影响整体布局。gap 控制间距,flex 控制顺序,过渡动画也让提示更平滑。