1.BEM 简介

BEM——前端命名方法论

BEM 是由 Yandex 团队提出的一种前端命名方法论,是一个非常有用,强大,简单的命名约定,可以让你的前端代码更容易阅读和理解,更容易协作,更容易控制,更加健壮和明确而且更加严密。

BEM 命名约定模式

.block{}
.block__element{}
.block--modifier{}

其中

  • .block:表示一个抽象的块,或一个独立的组件
  • .block__element:element是.block的子节点,表示element属于某个.block,用于形成一个完整的.block整体,__是向下降级的意思
  • .block--modifier:表示某个节点的状态

2.微信个人页面实战

为了更清楚感受BEM的命名方式,我仿制了一下微信的个人页面,其中图标来自Iconfont矢量图标库,图标命名直接使用其原始的命名

一开始我设计的html,此时我对BEM有些认识,但是使用上还是有点问题,这时,我将整个页面看作一个模块分为三部分:page__hd,page__bd,page__ft

<div class="page me"><div class="page__hd"><div class="page__hd__title">微信</div><div class="page__hd__functionIcon">***</div></div><div class="page__bd"><div class="bd__userInfo"><div class="userInfo__img">***</div><div class="userInfo__content right"><div class="userInfo__content__detail">***</div><div class="userInfo__content__QR">***</div></div></div><div class="page__bd__list"><ul><li class="item item--top">***</li><li class="item">***</li>***<li class="item item--bottom">***</li></ul></div></div><div class="page__ft"><div class="section__first">***</div><div class="section__second">***</div><div class="section__third">***</div><div class="section__fourth">***</div></div>
</div>

但当一个模块内的部分多了些的时候,比如page__bd内部的元素,我觉得我的命名有些混乱,为了给它命名还得百度翻译,而且开始命名完后写css时发现自己还是不太清楚它的位置,写完css后发现还有有些没有使用上的类名比如.right

我修改了我的html命名,感觉上结构更加清晰而且观察了一下微信的页面,头部和底部是不变的,每个页面都是一样的,还有page__bd内的page__bd__list在微信的发现页面也是开始可以使用的,这样的命名就比较好复用。

<!-- 微信移动端我的页面 -->
<div class="page me"><div class="page__hd"><div class="page__title">微信</div><div class="page__hd__icon--right"><i class="iconfont icon-weixinsousuoicon"></i><i class="iconfont icon-yiqiatongweixinduanICON_jiahao"></i></div></div><div class="page__bd"><div class="page__bd__header"><img src="./static/images/user.jpg" alt="" class="bd__header__img"><div class="bd__header__info"><div class="info__content--left"><p class="username">EIVE</p><p class="wxnumber">w1074418022</p></div><div class="info__content--right"><i class="iconfont icon-erweima"></i></div></div></div><div class="page__bd__list"><ul><li class="list__item list__item--top"><i class="iconfont icon-qianbao"></i><a>钱包</a></li><li class="list__item"><i class="iconfont icon-0021"></i><a>收藏</a></li><li class="list__item"><i class="iconfont icon-xiangce-copy"></i><a>相册</a></li><li class="list__item"><i class="iconfont icon-qiabao"></i><a>卡包</a></li><li class="list__item"><i class="iconfont icon-xiaolian"></i><a>表情</a></li><li class="list__item list__item--bottom"><i class="iconfont icon-shezhi"></i><a>设置</a></li></ul></div></div><div class="page__ft"><div class="ft__item"><i class="iconfont icon-qipao"></i><p>微信</p></div><div class="ft__item"><i class="iconfont icon-tongxunlu"></i><p>通讯录</p></div><div class="ft__item"><i class="iconfont icon-find"></i><p>发现</p></div><div class="ft__item ft__item--focus"><i class="iconfont icon-wo1"></i><p>我</p></div></div>
</div>

3.总结一下我使用 BEM 命名的感受

  • 第一:让你的代码更容易阅读和理解,可以清晰的指出某个节点属于哪个块下,层级关系比较明显,也尽量避免使用节点承载的内容来定义节点,这样更好的复用某个模块
  • 第二:BEM 的降级关系不需要迫切的去使用,比如page__hd内的.title,因为一个页面只有一个title,所以使用page__title就可以代表,不需要使用page__hd__title
  • 第三:使用BEM是为了让我们的代码更清晰,更易维护,如果它使得你的代码更难维护,更难理解,也不必纠结

github 项目地址:https://github.com/EIVE/wx_ho...

以上是我学习BEM的一下感受,希望大家可以有所收获,其中可能有些不太恰当的地方,也希望大家可以多给我提一些意见

BEM 实战之微信个人页面相关推荐

  1. 12、Flutter - 项目实战 - 仿微信(六)聊天页面

    Flutter - 项目实战 - 仿微信(六)聊天页面 接上篇:11.Flutter - 项目实战 - 仿微信(五)通讯录 详细代码参见Demo Demo地址 -> wechat_demo 其他 ...

  2. BEM实战之扒一扒淘票票页面

    BEM解析 BEM是一套CSS国际命名规范,是一个非常有用的功能强大且简单的命名约定,它能使前端代码更易读,易于理解易于扩展.BEM是块(block).元素(element).修饰符(modifier ...

  3. BEM实战之扒一扒淘票票页面 1

    BEM解析 BEM是一套CSS国际命名规范,是一个非常有用的功能强大且简单的命名约定,它能使前端代码更易读,易于理解易于扩展.BEM是块(block).元素(element).修饰符(modifier ...

  4. 视频教程-微信小程序商城15天从零实战课程-微信开发

    微信小程序商城15天从零实战课程 04年进入计算机行业.拥有6年net和php项目开发经验,8年java项目开发经验. 现前端全栈工程师,主攻产品设计,微信开发等. 黄菊华 ¥499.00 立即订阅 ...

  5. HaaS EDU物联网项目实战:微信小程序实现云养花

    HaaS EDU K1是一款高颜值.高性能.高集成度的物联网开发板,板载功能强大的4核(双核300Mhz M33+双核1GHz A7)主芯片,2.4G/5G双频Wi-Fi,双模蓝牙(经典蓝牙/BLE) ...

  6. android动态评论功能,Android辅助权限实战之微信自动评论与点赞

    Android辅助权限实战之微信自动评论与点赞 当我们把辅助权限玩的比较熟悉 的时候,就可以释放我们的双手做一些有趣的事情了,例如之前网上流传的微信自动抢红包插件,就是使用的这个服务,不过我们今儿讲的 ...

  7. vue在微信里面的兼容问题_微信H5页面兼容性问题分析及解决方法

    随着H5页面越来越流行,越来越多的开发者都开始用最近H5做微信公众号,在这个过程中自然也会遇到不少的问题.小编在这里整理了五种常见的微信H5页面兼容性问题,来和大家分析一下问题的详情.出现原因以及相对 ...

  8. C#开发微信门户及应用(44)--微信H5页面开发的经验总结

    在我们开发微信页面的时候,需要大量用到了各种呈现的效果,一般可以使用Boostrap的效果来设计不同的页面,不过微信团队也提供很多这方面的资源,包括JSSDK的接口,以及Weui的页面样式和相关功能页 ...

  9. h5 登录页面_一份写给新手的微信H5页面制作流程介绍

    作为一种非常受欢迎的营销推广方式,H5页面具有交互性好.易于传播.感官体验丰富.利于效果追踪等优势.由于H5页面的传播主阵地是微信,所以很多刚接触H5页面的新手经常误以为H5页面只能在微信中传播,也就 ...

最新文章

  1. 用了这么久的 Python,居然没注意到这个操作
  2. GridView使用一些记录
  3. Leet Code OJ 326. Power of Three [Difficulty: Easy]
  4. tomcat6的项目能直接在tomcat7上用吗_极尽人性化的设计: 能“隐形”的笔记本电脑支架...
  5. 完全数--Python
  6. DXUT框架剖析(4)
  7. 40. Combination Sum II
  8. layer mvc json 中文乱码处理
  9. 《访问Mat图像中每个像素的值》)
  10. android 本地广播原理,本地广播原理
  11. [含论文+答辩PPT+任务书+中期检查表+源码等]基于ssm的NBA球队管理系统
  12. indows蓝屏PROCESS1_INITIALIZATION_FAILED STOP:0x0000006B 解决方法
  13. 无法导入reg:指定的文件不是注册脚本——兼了解文本格式问题
  14. dwcc怎么设置html默认,Dreamweaver CC 2019如何设置界面首选项?
  15. 互联网晚报 | 9月16日星期五 | ​B站回应诉争“哔哩哔哩”商标被驳回;​苹果占国内高端机70%份额;​蔚来手机被曝明年发布...
  16. android获取农历时间,android 日历(带提醒、日程、阴历转换)
  17. 基于networkx的《人民的名义》人物关系图
  18. 浙江大学 工程伦理 第十二单元测试答案
  19. Qt / PyQt 简易毛玻璃效果
  20. ubuntu挂载gpt硬盘

热门文章

  1. SAP RETAIL 参考PO创建分配表之二
  2. 2020年Q1微信公众号文章列表
  3. 机器学习模型太大难部署?这里有 3 个解决方案
  4. 算法工程师的核心竞争力
  5. 联想PC被华为反超,杨元庆“美梦”或将破碎,余承东:对手较弱
  6. Python中的张量分解
  7. AI程序员,所有码农的梦想
  8. SAP MM 盘点流程中上不了台面却很实用的方案建议
  9. 深度学习框架的内存优化机制
  10. numpy.logspace()产生一个数组