elementui源码学习之仿写一个el-badge标记
本篇文章记录一下,仿写一个el-badge标记提示,有助于大家更好理解,饿了么ui的轮子具体工作细节。本文是elementui源码学习仿写系列的又一篇文章,后续空闲了会不断更新并仿写其他组件。源码在github上,大家可以拉下来,npm start运行跑起来,有助于更好的理解。github仓库地址如下:https://github.com/shuirongsh...知识点复习 还是像往常一样,为了便于更好的理解代码,咱们先复习一下,
el-badge组件
中使用的一些曝光度不是非常高的知识点apisup和sub标签
- sup标签可定义文本上标内容(如平方、立方、未读消息等...)
- sub标签可定义文本下标内容(一般是科学公式多一些)
未读消息99+
水是生命之源,化学分子式为:H2O
效果图:
文章图片
由此我们可以明了,sup标签内写的文字,会自动放在右上方,也可以正常设置样式,所以使用sup标签用来做el-badge标记组件,的确是比较合适的。
不过因为需要使用插槽传入定义内容,所以饿了么UI中使用sup标签不像上述嵌套的,相当于并排的,如:
未读消息99+
所以饿了么又通过样式定位修改其位置,使其在右上角了props中的validator校验函数
假设需求:父组件传递给子组件的age属性字段的值需要为数字类型的
我们一般都会这样写:
props: {
age: Number,
},
或者这样写(额外指定一个默认值):
props: {
age: {
type: Number,
default: 100,
}
},
这样写一般也就够用了,不过如果要精细化校验,就需要使用props校验某个属性字段自带的
validator
函数了。比如新需求:父传子的age属性字段需为数字类型、且不能超过180
于是乎,我们使用validator函数可以这样写:
props: {
age: {
type: Number,
default: 100,
validator(val) { // validator函数接收的参数是父传子此字段的值
if (val <= 180) {
return true;
// 返回true代表校验通过,不报[Vue warn]警告
} else {
return false;
// 返回false代表校验不通过,报[Vue warn]警告,告知用户传值不对
}
},
},
}
这样的话,的确是更方便精细化控制父传子参数了。官方说明:https://cn.vuejs.org/v2/guide...
仿写效果图
文章图片
使用代码
primary类型
success类型
warning类型
info类型
danger类型
指定max最大值99
小圆点
《震惊!一程序猿光天化日竟然...网友必看!》
隐藏
.wrap { width: 100%;
height: 100%;
padding: 24px;
}
仿写封装代码
.my-badge {
position: relative;
vertical-align: middle;
display: inline-block;
// 把块元素转换成行内块元素,如此,宽度便由内容撑开了
// 通过定位,把上标定位到右上角的哦
.fixedRightTop {
position: absolute;
// 因为上方display: inline-block;
了
top: 0;
// 所以定位才正好在插槽内容的右上方了,否则块元素默认宽度100%,那定位就在最右侧了
right: 3px;
// 但是还需要transform平移一下
}
sup {
color: #fff;
background-color: #f56c6c;
// 默认淡红色
border-radius: 10px;
// 加个圆角好看些
padding: 1px 4px;
font-size: 12px;
// 上标字体要设置最小
transform: translate(100%, -50%);
// 要移动一下才行
white-space: nowrap;
// 自定义文字内容会换行,通过css控制,使之不换行
}
// 五种类型配色,这里直接抄官方的
.primary { background-color: #409eff;
}
.success { background-color: #67c23a;
}
.warning { background-color: #e6a23c;
}
.info { background-color: #909399;
}
.danger { background-color: #f56c6c;
}
// 小圆点加样式
.isDotClass { height: 8px;
width: 8px;
right: 1px;
border-radius: 50%;
}
}
总结 【elementui源码学习之仿写一个el-badge标记】好了,一篇
water文章
写完啦(手动捂脸哭),不过愚以为不断学习、不断输出、大抵便是不断进步吧推荐阅读
- CSS|CSS 浮动 (二)
- Spring源码分析|【注解】Spring AOP 面向切面编程之@Around的详细用法
- D152|D152 培训学习小结10
- 九月一号假装我又上学了
- 83|83 在团队中打造学习文化的三种方法
- 长河恋/上学的路
- 21西华师范大学学科英语考研考试情况解析
- 百度魅族深度学习大赛初赛纪实
- 演讲开场白
- 整数有约 | AI智能篆刻(活学活用,让传统文化“潮”起来)