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

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

然而,即使是如今国内外顶级大牛也不敢说自己是个优秀的 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. 【Mac + ATX基于uiautomator2】使用weditor时,报错:requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer'))

    产生以下原因找到了:是因为启动了appium,两者冲突,不能同时使用. 之前讲过怎么安装u2([Mac安装,ATX基于uiautomator2]之安装步骤)以及使用weditor, 但是经过一段时间, ...

  2. Servlet 编写过滤器

    Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet.Servlet 过滤 ...

  3. weixin oauth 授权

    1. 先了解下请求授权页面的构造方式:   https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_u ...

  4. OpenCV学习笔记十一:opencv_ocl模块

    一,简介: 基于OpenCL优化的代码.

  5. python静态网页爬虫之xpath

    常用语句: 1.starts-with(@属性名称,属性字符相同部分)使用情形: 以相同的字符开头 <div id = 'test-1'>需要的内容1</div> <di ...

  6. okhttp 通过网关请求服务端返回数据

    1.启动类代码 package com.tycoon.service; import org.springframework.boot.SpringApplication; import org.sp ...

  7. XML 文档的结构

    XML 文档的组成 一个XML文档由两部分构成:第一部分是文档序言,第二部分是文档元素(节点). 1.文档序言 文档序言通常位于XML文档的顶端,根元素之前出现,它是一个特定的包含XML 文档设定信息 ...

  8. pycharn设置git提交代码

    1.设置pycharm的git地址 2.设置git地址及本地路径 3.提交代码

  9. [Spring Data MongoDB]学习笔记--建立数据库的连接

    1. 有了上一篇的Mongo后,连接数据库我们还需要更多的信息,比如数据库名字,用户名和密码等. 我们可以继续来配置MongoDbFactory的实例. public interface MongoD ...

  10. JavaScript基础深入之

    JS的数值类型是分为两类:基本数据类型和引用数据类型. 基本类型占据的内存栈空间,引用类型被保存在堆空间.引用类型赋值的变量也是被保存在栈空间的,它的作用类似于电视遥控器,负责操作堆空间内指向的对象. ...