前言
最近作者对WEUI组件库很感兴趣,于是就去学习了部分源码,本文作者通过模拟一个上传文件的组件,来讲解WEUI中的优雅的命名规范
模拟移动端截图
按理来讲,我们需要创建一个react或者vue框架,在.jsx或.vue中书写这个组件并且导出,这种方式是十分正确的,但是本文由于就只会写一个组件,而且着重讲解的是html和css,所以本文就用html+css文件来替代用组件完成上传文件页面的制作。
上传页面制作过程
1.创建文件基本目录
首先咱们创建一个文件夹,里面存放对应的css和html,其中样式的书写我们使用stylus实现,所以放在.styl的文件之中,之前作者也介绍过Stylus,这是大型项目中常用的技术,大家可以去阅读这篇文章:Stylus:更高效、更强大的CSS预处理器详细了解这个强大的工具。
2.html结构
我们首先在index.html中,创建整个项目的基本结构
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WEUI uploader 源码学习</title>
<link rel="stylesheet" href="./common.css">
</head>
<body>
<div class="page">
<header class="page__hd">
<h1 class="page__title">Uploader</h1>
<p class="page__desc">
上传组件,支持图片上传、文件上传、视频上传等
</p>
</header>
<main class="page__bd">
<div class="weui-cells weui-cells_form">
<div class="weui-cell weui-cell_uploader">
<div class="weui-cell__bd">
<div class="weui-uploader">
<div class="weui-uploader__hd">
<p class="weui-uploader__title">图片上传</p>
<div class="weui-uploader__info">
<span>0</span> /
<span>2</span>
</div>
</div>
<div class="weui-uploader__bd">
<ul class="weui-uploader__files">
<li class="weui-uploader__file">
</li>
<li class="weui-uploader__file">
</li>
<li class="weui-uploader__file">
</li>
<li class="weui-uploader__file">
</li>
<li class="weui-uploader__file">
</li>
<li class="weui-uploader__file">
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
</body>
</html>
可以看到,在写html部分时,我们严格使用了BEM命名规范:
-
Block(块)级别:
page- 整个页面容器块weui-cells- 单元格容器块weui-cell- 单个单元格块weui-uploader- 上传组件块
-
Element(元素)级别:
page__hd- page块的头部元素(__表示元素)page__bd- page块的主体元素page__title- page块的标题元素weui-cell__bd- weui-cell块的主体元素weui-uploader__hd- 上传组件的头部元素weui-uploader__bd- 上传组件的主体元素weui-uploader__title- 上传组件的标题元素weui-uploader__info- 上传组件的信息元素weui-uploader__files- 上传组件的文件列表元素weui-uploader__file- 上传组件的单个文件元素
-
Modifier(修饰符)级别:
weui-cells_form- 表单样式的单元格容器(_表示修饰符)weui-cell_uploader- 上传样式的单元格
BEM的优点:
- 类名语义明确,一看就知道是什么组件及其部分
- 避免样式冲突,因为类名有层级关系
- 便于团队协作和维护
- 结构清晰,容易扩展
这种命名方式在WEUI这样的UI框架中很常见,有助于保持代码的一致性和可维护性。
css部分
接下来,我们为页面的元素都加上样式,我们在common.styl文件中书写css部分
$weui-bg-0 = #ededed
$weui-fg-1 = rgba(0,0,0,0.55)
$weui-bg-2 = #fff
$weui-fg-2 = gray
$weui-fg-3 = rgba(0,0,0,0.1)
*
margin 0
padding 0
.page
position absolute
top 0
bottom 0
left 0
right 0
background-color: $weui-bg-0
overflow: scroll
-webkit-overflow-scrolling: touch
box-sizing border-box
z-index 1
.page__hd
padding: 40px
.page__title
text-align: left
font-size 20px
font-weight: 400
.page__desc
margin-top 4px
color: $weui-fg-1
text-align: left
font-size 14px
.weui-cells
margin-top 8px
background-color: $weui-bg-2
position relative
overflow hidden
&::before
content: ""
position absolute
left 0
right 0
height 1px
background-color $weui-fg-3
z-index 2
.weui-cell
padding 16px
display flex
align-items: center
line-height 1.41176471
.weui-cell__bd
flex 1
.weui-cell_uploader
padding-bottom: 24px
.weui-uploader
.weui-uploader__hd
display: flex
padding-bottom: 12px
align-items: center
.weui-uploader__title
flex: 1
.weui-uploader__info
color: $weui-fg-2
.weui-uploader__bd
.weui-uploader__files
list-style: none
.weui-uploader__file
float left
margin-right 8px
margin-bottom 8px
width 96px
height 96px
background url(https://weui.io/images/pic_160.png) no-repeat 50%
background-size cover
可以看到,使用sylus的.styl文件书写css有很多好处
-
便利化:我们在.styl,无需书写
{}以及:了,.styl的书写格式很轻便,只需要使用缩进即可完成对不同元素的样式的实现。 -
工程化:我们在.styl文件的初始创建了一些变量,后文的部分属性可以使用这些变量,实现了变量统一管理,在以后我们需要更改这些属性时,我们不需要逐个在css中修改,只需要更改前面的变量即可。
-
模块化:相比于传统的.css,对于像
.weui-uploader .weui-uploader__hd这种嵌套结构,我们不需要写两个rule(选择器+申明块)了,只需要按照这种缩进的书写格式,方便地实现嵌套的样式,这样做可以让我们统一管理weui-uploader里面的元素,实现模块化
结尾
通过这次对WEUI上传组件的源码学习,我们不仅掌握了如何用BEM规范构建清晰的HTML结构,也体验了Stylus在CSS编写中的高效与优雅。这种组合不仅让代码更易维护,也极大提升了开发效率。大厂的前端实践告诉我们,良好的命名规范和现代化的CSS预处理器是打造高质量UI组件的基础。希望本文的分享能帮助你在日常开发中写出更专业、更可维护的代码。如果你对WEUI其他组件也感兴趣,欢迎持续关注我的源码解析系列。