需求背景
系统大版本升级啦,ui统统改改改~哦no,我已经不喜欢写css了。来吧,看需求。
表格搜索区的表单的都需要改成这样的结构。

乍一看很简单,直接用
prefix插槽
就可以轻松完成。好家伙,直到我遇到Select
,因为Select
是没有prefix
插槽的,所以就需要我去魔改了。css
的强大之处就在于这,你想做成的样子,基本上都可以实现。
行动
首先仔细查阅文档,确定Select
没有类似于prefix
插槽的属性。antd-react有prefix属性,antd-vue则没有,这里我们用的是后者
先解决label
我自定义一个label
然后定位到表单前缀里去,absolute
定位上去直到和placeholder的位置重合,就能保证无论是input
还是select
他们的label
位置是一样的。
接着搞定placeholder和value
label
搞定后,我需要解决placeholder
和选中后value
的位置。用Select的placeholder插槽
然后自定义类名,给个左边距就行,左边距的像素和value的左边距一样的,找到value
类名是ant-select-selection-item
赋值上去就行。
修改Select
的label
可以写个公共类名
,但是placeholder
和value
就不行,因为每个label
宽度或许是不一样的,所以我们仅需定义一套公共类名,比如3个字左边距是40,4个字左边距是50,就这么简单。
没必要去用js解决这种问题,css的性能远比js高。如果用js的话,我的思路是获取label的宽度,然后找到对应的元素再去设置左边距,这里的开销是很大的。定义一套css可简单的多了。

示例
1 | <a-col> |
1 | :deep(.search-form-prefix-placeholder-2label) { |
哦对了,我最近开发了一个叫
牛马工作器
的chrome拓展插件,很好玩哦,感兴趣的话,给我的公众号回复牛马
即可免费获取。