表单错误时添加边框引发输入框尺寸变化的技术求助
解决输入框添加错误类后尺寸变化的问题
这问题我之前做表单校验时也踩过坑!咱们先拆解下为什么会出现这个情况:
你的.fatform样式里设置了border:none,而且没指定box-sizing: border-box(默认是content-box模式)。当给输入框加上.error类后,突然多了1px的红色边框——在content-box模式下,元素的width和height只计算内容区域,边框和padding是额外加在外面的,所以输入框自然就被边框撑大了。
下面给你两个最实用的解决方案:
方案一:提前预留边框空间(推荐)
修改你的.fatform样式,提前加上透明边框并设置box-sizing: border-box,这样边框的空间一开始就预留好了,添加.error类只是把边框颜色改成红色,不会改变尺寸:
.fatform { width:125px; height:41px; /* 原height21px+上下padding各10px,改用border-box后需要调整为包含padding的总高度 */ text-align:left; background-color: rgba(255, 255, 255, 1); border: 1px solid transparent; /* 透明边框占位 */ padding:10px; box-sizing: border-box; /* 让width/height包含padding和border */ } .error{ border-color: red !important; border-style: solid !important; }
调整后不管有没有.error类,输入框的尺寸都是一致的,视觉过渡更自然。
方案二:用outline代替border
如果不想修改原有.fatform样式,可以把.error类的边框换成outline——outline是绘制在元素外部的线条,不会占用元素的盒模型空间,所以不会改变输入框尺寸:
.error{ outline: 1px solid red !important; /* 用outline替代border */ box-sizing: border-box; }
这个方案不用动原有样式,但outline的视觉位置是在元素外侧,和border略有区别,你可以根据需求选择。
内容的提问来源于stack exchange,提问作者Sackling
相关产品推荐
相关产品推荐

