切图崽的自我修养-规范CSS元素命名

前言

为什么我刚才写的样式乱了?!

如何给变量,文件命名是程序员的老大难问题。命名为什么会这么难,因为它太重要了。可以这么说,准确的命名可以提高代码的可读性,让人容易理解,方便调试,也给以后修改和维护你的代码的人带来方便。

如何给元素命名

而在css中,如何给元素命名同样是一门艺术。我们先来看看css中对常用的组件的命名:

  • head

  • foot

  • nav

  • menu

  • list

嗯,目前为止很不错,这很简单,这很语义化。如果再复杂一点,比如我要一个下拉菜单,你可能会想到:

  • dropMenu[驼峰命名]

  • drop-menu/drop_menu[匈牙利命名]

没错,命名足够解释了它 特点是什么/有什么本身是什么

好,那我们接下来看看这段代码:

<ul class="timeList"><li>2016/06/01</li><li>2016/06/02</li><li>2016/06/03</li>
</ul> ...<ul class="timeList"><li>2016/07/01</li><li>2016/07/02</li><li>2016/07/03</li>
</ul> 

这是一个表示时间的列表,用timeList命名非常合适。等会,现在需求好像变了,产品姐姐刚才凑过来说要把时间列表的最后一条数据高亮显示,那我们就得把timeList的最后一个li挂上一个class,用来做样式的调整,才能满足需求。OK现在变成:

<ul class="timeList"><li>2016/06/01</li><li>2016/06/02</li><li class="last">2016/06/03</li>
</ul> ...<ul class="timeList"><li>2016/07/01</li><li>2016/07/02</li><li class="last">2016/07/03</li>
</ul> 

然后css中如是写:

.timeList .last{...}

很简单 父元素+嵌套子元素 的命名方式轻松搞定,但这样真的好吗?

NO! 一点都不好!

我们来看看这样命名存在哪些问题:

  • 首先last这个命名本身非常让人疑惑,因为最后一个这个特性,不管你挂的是什么class,我们本来都可以从DOM上看出来的与其命名为last,不如命名为highlight,表明它的特点高亮

  • 其次last这个命名容易引起代码冲突

因为.last这个命名很容易出现。在网站的开发过程中,会存在并行开发的情况,css不止你在写,你的同事可能也在写。如果恰巧他写了一个全局的 .last,那么你这个样式很可能会因为你同事写的样式的叠加而产生问题。

你想了一会,改成了:

<ul class="timeList"><li>2016/07/01</li><li>2016/07/02</li><li class="lastItem">2016/07/03</li>
</ul> 

嗯,lastItem至少last好,但还是没有解决上述的两个问题,特性不明代码冲突风险。反正如果是我,就算写成:

.timeList .lastItem{...}

这种形式,我还是会担心有人写了.lastItem的全局样式导致我的代码样式会被覆盖。

所以,上述这种子元素嵌套 (我们叫做滥用子元素选择器) 的方式是 非常不可取的,即使你自己的代码写起来没有问题,一旦和别人的代码整合起来,很可能产生命名冲突。

所以,为了避免多人开发命名冲突的情况发生,css的样式命名最好和程序语言一样,遵循命名空间的原则。

命名空间

所谓命名空间,就是从属关系的一种表示方法。还是拿上述的例子来说,如果写成:

<ul class="timeList"><li>2016/07/01</li><li>2016/07/02</li><li class="timeListLastItem">2016/07/03</li>
</ul> 

timeList下的LastItem,嗯,看出了从属关系,并且如此复杂的命名一般不会引起代码命名上的冲突,并且同时也简化了你的css,因为现在你的css可以这样写了:

.timeListLastItem{...}

css里不用嵌套在父元素选择器里了,因为这个子元素本身的命名就表示了,是在timeList这个父元素下的,也就是,从命名上就定义了自己的从属关系

目前为止,这个命名已经可以打90分,离满分存在的差距在哪里?

如果一律采取驼峰命名,在从属关系的可读性上,稍微差了一点,来比较一下这两个命名的可读性:timeListLastItemtimeList-lastItem 明显采取驼峰+匈牙利 命名的方式可读性更强。

总结来说,用划线作为从属关系的分隔符,其实就是讲模块timeList视为了类,从属元素被看成了timeList的类属性。通过科学合理的命名上能直观的看出从属关系,降低代码冲突的风险。

所以如下两种命名方式,你选择哪一个呢?

<div class="box"><div class="head"></div><div class="content"></div><div class="foot"></div></div>
<div class="box"><div class="box-head"></div><div class="box-content"></div><div class="box-foot"></div></div>

结语

给元素命名从来不是一件简单的事情,但好的命名规范绝对可以减少使团队开发的潜在风险。虽然这种命名规范有时候会伴随着冗长的问题,但它所带来的好处绝对能掩盖这点瑕疵。至于担心命名长度的增加会影响css文件的大小从而会影响加载速度,我只能说同学,你的图片压缩过了吗?做了Sprite处理吗?那才是优化大头。

文章参考自:编写高质量代码-Web前端开发修炼之道

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器

从kbmmw 4.4 开始&#xff0c;增加了认证管理器&#xff0c;这个比原来的简单认证提供了更多的功能。细化了很多权限操作。 今天对这一块做个介绍。 要做一个认证管理&#xff0c;大概分为以下5步&#xff1a; 1. 定义你要保护的资源&#xff0c;一般是服务、函数&#xff0c;…

算法分析笔记

2019独角兽企业重金招聘Python工程师标准>>> 定义 定义&#xff1a; 若存在正常数 c 和 n<sub>0</sub> 使得当 N ≥ n<sub>0</sub> 时 T(N) ≤ cf(N)&#xff0c;则记为 T(N) O(f(N))若存在正常数 c 和 n<sub>0</sub> 使得当 …

C++指针详解

C指针详解指针的概念 指针是一个特殊的变量&#xff0c;它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容&#xff1a;指针的类型&#xff0c;指针所指向的类型&#xff0c;指针的值或者叫指针所指向的内存区&#xff0c;还有指针本身所…

数字效率Evernote超效率数字笔记术

文章结束给大家来个程序员笑话&#xff1a;[M] 每日一道理 古人云&#xff1a;“海纳百川&#xff0c;有容乃大。”人世间&#xff0c;不可能没有矛盾和争吵&#xff0c;我们要以磊落的胸怀和宽容的微笑去面对它 。哈伯德也曾说过&#xff1a;“宽恕和受宽恕的难以言喻的快乐&a…

千万别让爸妈帮你P图......

1 如何把外来称呼本土化&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 奇奇怪怪的知识又增加了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 好家伙&#xff01;洪世贤家烛台上插的是火腿肠▼4 妨碍公务的下场&#xff08;素材来源网络&#xff0c…

WPF 不遮挡任务栏最大化和全屏显示

在窗体不去边框的情况下&#xff0c;不遮挡任务栏最大化MainWindow.xaml.csusing System; using System.Windows; using System.Windows.Threading;namespace thzSoftware {/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWi…

看完后震惊!清华“姚班”创始人的老师究竟有多牛?他说孩子最应该培养这几个思维……...

▲ 点击查看相信很多人都挺听说过清华有个“姚班”&#xff0c;致力于培养与美国麻省理工学院等世界一流高校本科生具有同等、甚至更高竞争力的计算机科学人才。“姚班”是我国著名科学家姚期智所创&#xff0c;因此得名“姚班”。姚期智教授是2000年图灵奖得主&#xff0c;也是…

2021,我在枯燥乏味中寻找坚持下去的理由

这是头哥侃码的第248篇原创2021年&#xff0c;因为疫情和工作变更的关系&#xff0c;不仅我的工作方式被彻底改变&#xff08;居家远程办公&#xff09;&#xff0c;而且还在健身房悟出一个心得体会。啥心得&#xff1f;啥体会&#xff1f;那就是觉得人生逐渐变得没有意思。不知…

OM 延交訂單

如訂單扣數後要延交, 請按以下步驟: 1) 先取消要延交的ITEM 的DELIVERY NO. ACTION: Unassign from Dlivery 2) 要重新給DELIVERY NO ACTION: Auto-create Trip 3) 延交訂單item - Ship confirm - 選backorder all - OK 已完成延交, 可重新取move order

Android之内存机制分析-Android堆和栈

1、dalvik的Heap和Stack 这里说的只是dalvik java部分的内存&#xff0c;实际上除了dalvik部分&#xff0c;还有native。这个以后再说。 下面针对上面列出的数据类型进行说明&#xff0c;只有了解了我们申请的数据在哪里&#xff0c;才能更好掌控我们自己的程序。 2、对象实例…

这部纪录片带你重新认识中华神州大地,领略你不知道的中国

你对自己的祖国熟悉嘛&#xff1f;你是否真正的去了解过自己祖国的各个省份呢&#xff1f;今天小编带来的这部纪录片《你所不知道的中国》&#xff0c;带你认识一个你从未了解的中国&#xff0c;让你从纪录片的视角去认识自己的祖国&#xff0c;重新认识哺育自己多年的神州大地…

B-树特征

在m阶B-树的定义中&#xff0c;要求&#xff1a; 1、树中每个节点至多有m棵子树。 2、若根节点不是叶子节点&#xff0c;则至少有两棵子树。 3、除根之外的所有非终端节点至少有棵子树。转载于:https://www.cnblogs.com/tonglingliangyong/p/3740964.html

首届微软研究峰会视频上线,快来查收你的独家观看指南!

由微软全球八大研究院携手倾力打造的首届微软研究峰会 Microsoft Research Summit 2021 已于此前在线上成功举办。来自世界各地的 300 余位顶尖科学家和技术领导者为大家带来了 150 场精彩分享&#xff0c;内容围绕“科学、赋能、可持续发展、医疗健康、信任”五大主题展开&…

关于用函数指针参数申请动态内存的问题

今天在写一个Binary Search Tree的程序时&#xff0c;发现其插入有问题&#xff0c;下面是插入程序&#xff0c;每次插入完成后&#xff0c;节点还是NULL。 template<typename Object>void CMyTree<Object>::insert(const Object& element, BinaryNode<Obje…

当全家人一起看电影,播到羞羞镜头时......

1 我看你好眼熟哦&#xff08;via.松鼠少儿&#xff0c;侵删&#xff09;▼2 妹妹&#xff1a;有没有想过我感受&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 遇见五步蛇怎么办&#xff08;via.阿森不是妖怪&#xff0c;侵删&#xff09;▼4 一年级…

网站分析常用方法

本篇文章我们介绍4种网站分析中最常用&#xff0c;也是最有效的分析方法。他们分别是细分分析&#xff0c;对比分析&#xff0c;对比分析&#xff0c;质与量分析。这些分析方法在实际工作中经常组合使用。我们先来看下细分分析。 1&#xff0c; 细分分析 单一的指标数据或大维度…

vscode中vue项目报错

当在vscode中写代码时&#xff0c;报错报错报错......... 已经头大&#xff0c;还没写就报错&#xff0c; 这是因为eslint对语法的要求太过严格导致的编译时&#xff0c;出现各种语法格式错误 我们打开vue.config.js&#xff0c;加上这句代码&#xff0c;就OK啦 lintOnSave:…

nginx连接uwsgi使用web.py框架构造pythonweb项目

2019独角兽企业重金招聘Python工程师标准>>> 相关页面&#xff1a;http://webpy.org/installhttp://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.htmlhttp://projects.unbit.it/uwsgi/wiki/Example uwsgi的安装需要python-devel&#xff0c;可以使用yum s…