你所不知道的CSS高效编写方法

   相信几乎所有的程序员对HTML和CSS并不陌生,但是你真的了解它的编写方法和规范吗?本文将和大家一起探讨CSS出色编写方法。

1.层级书写

位置属性:position、top、left、bottom、right、display、float等。

盒子模型相关属性:width、height、padding、margin、border等。

字体颜色排版属性:font、text-align、line-height等。

视觉背景边框等属性:background、transition、animation、transform等。

这里说一下这样写的原因,把位置属性写在最前是为了让我们更好的去发现css中出现的repaint(重绘)和reflow(回流),因为重绘和回流会影响页面的加载,也就是影响网站性能。我们这样写可以及时发现不必要的位置属性,并将其剔除,从而减少页面的重绘和回流。盒模型排第2位,因为他决定了组件的尺寸和位置,其他属性只会影响内部不会影响组件外部样式,故放在最后。

2.代码缩写(shorthand)

   如margin、padding、border、background、animate、transition等,可提高阅读体验,并且也提高了编码速度。

a.去掉0.8em前的“0”。

b.去掉0px后的“px”。

c.16进制颜色尽可能使用3个字符,譬如#dddddd,改为#ddd。

d.16进制值应该全部小写,如#fff;在扫描文档时,小写字符易于分辨。

3.根据项目需求使用相应的reset

相信现在已经很少人用*{margin:0;padding:0;}这种通用选择器进行全局重置了,因为它影响性能,我们更多人采用的是阿里的reset。虽然它很不多,但是对于不同的项目而已,有的重置是不需要的,所以没必要全部写进去,要看实际需求。这是一个reset.css的链接http://www.cssreset.com/,感兴趣的可以看一下。

4.利用css选择器,合理使用继承

   a.如果父元素的多个子元素有相同的样式,无疑把样式定义在父元素上最佳。

   b.对于没有所属关系的平级元素,如果有很多相同的样式,我们可以选择使用群组选择器,进行合并,类似于reset。

5.必要的代码注释

相信很多朋友跟我一样,不愿意看别人写的代码,其实也不是自己不愿意,而是有些“前辈们”写的样式太不知所云,导致看起来头疼,还不如自己重写,所以必要的注释还是可以有的;但请注意,我这里说的是必要的注释,而不是要多写注释。最好按照功能的类别来对一组样式表写统一注释,独立成行。

6.制定命名规范

相信很多人对class的取名很苦恼,其实我也是,不过以前老师说过一句话很好:“如果你不知道怎么给class命名,那就去看看‘大牛们’的代码吧!”,可以看看bootStrap、jqueryMobile等框架css的命名方式。

以下为几点建议:

a.采用“-”、驼峰命名法

    譬如left-count-down、leftCountDown,不要用eftcountdown或者 _leftcountdown(部分浏览器不兼容)进行命名。

b.简写命名

 对于左侧导航“left-navgation”,我们可以简化为“left-nav”,但前提是可以见名知意,如果达不到这种效果的话,那就老老实实写全称。

c.有js操作的class命名

对于进行js操作的class可采用“js-left-container”的方式进行命名。大型项目中最好在ID或class名字前加上这种标识性前缀(命名空间),使用短破折号链接,譬如“”qovd-js-container。因为使用命名空间可以防止命名冲突,方便维护,比如在搜索和替换操作上。

d.必要的时候使用ID选择器

 一般可以使用class代替的,尽量不用ID,原因在于id可以作为变量使用, id更多使用与js操作,不过现在js操作也在淡化id的使用。

e.避免使用标签与ID或class进行组合

非必要的情况下不要使用元素标签名和ID或class进行组合,譬如div.title{margin: 20px;}。同时单个元素,多类选择器最好不超过3个,譬如class=”menu left-content content”。

f.为选择器添加状态前缀

为选择器添加状态前缀,使其语义化,譬如“.show”,改为“.is-show”,对于js操作的元素经常使用到类似的写法,进行元素的显示和隐藏。

g.基于最近父元素class进行子元素命名的前缀

譬如父元素class=”new”,子元素则命名为class=”new-title”,这种习惯看你个人,如果怕看混了,就建议不要用了。

7.选择更优的属性值

譬如border:0px浏览器会解析渲染,消耗内存,而border:none,浏览器则不做渲染,不消耗内存。

8.尽量不用@import及css表达式

  增加HTTP请求次数,影响加载速度,出现从而影响加载速度。替代方法:使用、使用sass或者less将多个css文件编译成一个文件。

是XHTML标签,页面被加载时同步加载;@import只加载css,而且是待css解析器读取到css文件中有@import再去请求服务器下载样式,故有可能出现闪屏(其实就是样式未加载完成)。前者不存在兼容性问题,后者IE5+浏览器才能识别(这个方面基本可以忽略)。前者可使用DOM操作控制,后者无法控制。

9.使用外联CSS,尽量少用内联样式

这样做其实也是为了严格保持结构 (标记),表现 (样式),和行为 (脚本)相分离, 并尽量让这三者之间的交互保持最低限度。

10.嵌入式资源书写省略协议头

省略图像、媒体文件、样式表和脚本等URL协议头部声明 ( http: , https: )。如果不是这两个声明的URL则不省略。省略协议声明,使URL成相对地址,防止内容混淆问题和导致小文件重复下载。

11.其它书写注意事项

a.在属性名冒号结束后加一个空字符。

b.每个选择器和注释都独立成行。

c.注意元素的大小写,所有属性都要用“;”结尾。

d.省略type=“text/css”。

e.统一设置编辑器文字缩进2-4空格。

f .建议一个属性写一行,毕竟代码在上测试前,我们会使用webpack之类的 打包工具进行打包,所以你不用担心占据空间。

g.将媒体查询尽可能放在对应规则附近,如果放的太远,很有可能会被遗忘。

h.为避免不必要的继承,可以为class添加命名空间。

i.组件化、功能块、内容块方式编写css。

12.前缀兼容性书写

   必要的css兼容性处理还是很重要的。

13.最好避免使用的CSS “hacks”

虽然它很有诱惑力,可以当作用户代理检测或特殊的CSS过滤器,但它的行为太过于频繁,会长期伤害项目的效率和代码管理,所以能用其他的解决方案就找其他的。

14.引入less、sass、postcss、stylus等CSS预处理语言

现在基本很少直接写CSS了,都是使用CSS预处理语言,less和sass已经很常见了,大家有时间可以看看postcss。postcss和sass无冲突, postcss不仅具有sass的功能,同时还可以可以对sass处理过后的CSS再处理,而且预处理速度也很快。

最后,附上推荐class命名表。

“偷”的图

如果上述内容存在问题,希望大家及时指正,同时也希望大家可以补充。我始终相信知识只有分享,才会越来越好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,744评论 1 92
  • <a name='html'>HTML</a> Doctype作用?标准模式与兼容模式各有什么区别? (1)、<...
    clark124阅读 3,464评论 1 19
  • 人生就像是一面镜子,每个人都会有面属于自己的镜子。镜子前会路过形形色色的人,它在等待,静静地等待着那个将陪伴自己度...
    孤舟一芥阅读 352评论 2 1
  • NEA 2:0轻取对方 1、DS+SA的小套路搭配的演练 2、TK,SA配合小狗体系的搭配 PS: 1、未来VG很...
    春愿君阅读 116评论 0 0