其实迟迟不敢开始写关于样式里布局方面的心得,

因为大多数人眼中,哪需要管那么多,只需要最终效果达到了就行了呗。

然而,即使是如今国内外顶级大牛也不敢说自己是个优秀的 CSS 工程师。

一般大公司都是 html 和 css 是分开来写的,一个负责结构和语义,一个负责布局和样式,可见这茬子事并不简单...

CSS 分离与合并

该怎么说呢,

一部分代码其实可以分离出来成为 pt1,代表 padding-top: 1rem 这样的,很多地方可重用;

而另一部分代码可以由多个相似合并成一个,这个我们用得最多了,都懂的。

分离与合并看似矛盾,但都是为精简代码而产生,需要程序员强大的控制力(特别是多页面使用同一 CSS 文件时)。

语义和重用

这两者看似也是矛盾,比如 .index_header_login_btn 拥有十足的语义,但也注定只能被用在首页头部的登录按钮上,失去了复用性。

写多个类去满足复用性不无不可,只是曾写过 #index_header_login_btn .login_btn .btn .btn-sm .btn-outline 之后,我并不认为这事简单了。

.item a 要比 .link 慢得多

这得从渲染原理说起,它遵从“从右至左”原则,

按我的想法来看,一个名称就是渲染树的一个分支,要找 .x 下的 a,得先遍历树,找到 a,再遍历一遍找到 .x,比对层叠覆盖样式,可怕吧。

.box.box1 形态你以为是限定得越死越容易查找就会渲染越快吗,骚年,不要太天真,它是一次次重头遍历的。

不要否定,.x 这种最直接的命名方式渲染效率是最高的。(这条建议很重要)

拒绝 ID!拒绝层级!拒绝标签!

他们的存在只是为了提升样式优先级而已的,都限定死范围了,还谈何重用。

ID 就让它去和 js 搞就好了,不要让它加入到 CSS 的世界里。

性能消耗最大选择器应该是 * 和多 class 选择器(比如 .foo.bar)

.x > * 显然他是很烧的,但又实在没有更好替代办法,所以表示我也很难抉择。

宽度分离

这也是为什么菜单我们总是用 ul > li > a 来套,而不是 div > a 的原因,a 的父级去设宽高,a 负责 padding 就好了。

能不设宽度坚决不设,不但是弹性布局的基础,也是避免子级设宽高溢出,

另外在没有 border-box 的情况下,padding 的更改还得牵扯到 width 的重新计算。

其实没有宽度,也还是可以通过 padding | margin | absolute 来进行设定的。

写码一时爽,微调和改需求才是常态...

完全兼容 or 渐进增强

其实吧,这方面我自己都没怎么在乎过,实在不是一个好的前端...

比如 [type="range"] 在各家浏览器上模样都不一样,那要不要完全兼容非得搞成一个样呢,

但 text-shadow 在一些浏览器上不支持,是不是就不管了呢,

这个问题,因人而异吧。此时庆幸自己是个金牛座。

CSS 命名里面有大学问的更多相关文章

  1. (转)面向属性的CSS命名

    原文链接:戳这里 自从开始做前端开发以来,我发现在开发页面的时候,总是有一个问题十分影响自己的开发效率,这个问题就是css的命名,主要是指css类选择器的命名.这个问题主要体现在:第一,有的内容你压根 ...

  2. 面向属性的CSS命名

    自从开始做前端开发以来,我发现在开发页面的时候,总是有一个问题十分影响自己的开发效率,这个问题就是css的命名,主要是指css类选择器的命名.这个问题主要体现在:第一,有的内容你压根想不出用什么名字来 ...

  3. CSS命名规范

    DIV+CSS规范命名大全集合 前端人员必看CSS命名规范 整理: 文件名必须由小写字母.数字.中划线组成 ).所有的命名最好都小写,一律采用小写加中划线的方式,不允许使用大写字母或 _2).属性的值 ...

  4. 精简高效的css命名准则

    对于css,为了避免样式冲突,我们总会赋予相当特殊的命名,或是在选择符上添加html标记,或是使用层级.我们为避免在冲突上做文章,就会把代码的命名变得复杂化. 如果css的重用性越高,相比就越高效.如 ...

  5. html,css命名规范 (转)

    HTML+CSS命名规范总结 1.HTML部分 1.1添加必须的utf-8的字符集,并且使用HTML5的简洁 方式: <meta charset="utf-8"> 1. ...

  6. Div+CSS命名规范

    注意事项:1.命名遵循驼峰式  2.尽量用中文  3.不加中杠和下划线   4.尽量不缩写,除非一看就明白的单词 头:header   标志:logo  友情链接:friendlink    内容:c ...

  7. CSS命名

    CSS命名规范 CSS样式命名整理 页面结构 容器: container/wrap 整体宽度:wrapper 页头:header 内容:content 页面主体:main 页尾:footer 导航:n ...

  8. 常用的css命名规则:

    关于团队合作的css命名规范 常用的css命名规则: 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制 ...

  9. 常用的css命名规则

    头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left rig ...

随机推荐

  1. Say goodbye to 重复代码---Eclipse代码模板的使用

    我们在开发过程中,有些代码是经常重复编写的,而且是必要的,如单例模式,观察者模式. 每次都是重复重复再重复. 那么如何提高我们的效率呢? 要记住,我们使用的是IDE,不是文本编辑器.善用工具,事半功倍 ...

  2. Cmder 配置使用

    官网下载 配置: 1.把 Cmder 加到环境变量 将Cmder.exe存放的目录添加到系统环境变量path 添加成功后,Win+r 输入cmder,可以正确打开cmder 窗口即可. 2.添加 cm ...

  3. python笔记2 生成器 文件读写

    生成器 一边循环一边计算的机制,称为生成器(Generator). 把一个列表生成式的[]改成(),就创建了一个generator: 创建了一个generator后,通过for循环来迭代它. 著名的斐 ...

  4. Struts2 是什么?

    Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架. Struts2不只是Struts1下一个版本,它是一个完全重写的Struts架构. WebWork框架开始以Struts框架为基础 ...

  5. JavaScript 函数和事件

    上面例子中的 JavaScript 语句,会在页面加载时执行. 通常,我们需要在某个事件发生时执行代码,比如当用户点击按钮时. 如果我们把 JavaScript 代码放入函数中,就可以在事件发生时调用 ...

  6. python django -5 进阶

    高级知识点包括: 静态文件处理 中间件 上传图片 Admin站点 分页 使用jquery完成ajax 管理静态文件 项目中的CSS.图片.js都是静态文件 配置静态文件 在settings 文件中定义 ...

  7. PID file found but no matching process was found. Stop aborted

    一般脚本部署时不会遇到这种情况,有时候自个手动处理会出现”PID file found but no matching process was found. Stop aborted”,根据意思就可以 ...

  8. Android开发:《Gradle Recipes for Android》阅读笔记1.7——仓库配置

    repositories块告诉gradle哪里去寻找依赖,默认的android studio使用jcenter或者mavenCentral.jcenter仓库位于https://jcenter.bin ...

  9. kafka 集群安装过程

    1.下载需要的安装包 http://kafka.apache.org/downloads.html 本文使用的 Scala 2.9.2 - kafka_2.9.2-0.8.2.2.tgz (asc,  ...

  10. Spring 缓存注解@Cacheable 在缓存时候 ,出现了第一次进入调用 方法 ,第二次不调用的异常

    代码: @Override @Cacheable(value = CACHE_NAME, key = "'CartItemkey_'+#uId") public List<S ...