不要再叫我切图崽,我很生气,这样很不礼貌,请叫我前!端!工!程!师!css
从css方面来讲,前端工程师和切图崽的区别,并非指写单条css技巧的高低,甚至不少工程师在一些css的奇技淫巧都比不上切图崽. 那切图崽到底和工程师之间的差异是什么呢? 差异是 N年工做经验 视野,是格局,是从大方向上得出解决问题的能力前端
工程师们不多说哪一条css具体用到什么技巧,但确定知道如何将项目按照科学的组织架构好,以及如此架构的原理,优劣性与局限性. 剩下具体的工做只要交给切图崽们去作就好web
切图崽在于他的眼界只限那一行一行特定的css. 而对整个项目的文件组织和代码架构缺少清晰的认识. 一个网站,几十个页面,它的css文件时按照什么逻辑组织起来才不至于陷入混乱?样式出bug如何尽快定位问题? 浏览器
唉,这些问题好难,远不如无脑切图来的轻松. 是的,世界上历来不缺无脑作事的人,但为何你要成为他们其中之一呢? 一旦认识到这一点,咱们切图崽就离高大上的工程师又进一步了! sass
那么话说回来,一个中等复杂的web应用,到底它的css是如何组织的?前端工程师
通常来讲,css推荐采用架构
page.css [页面级]框架
common.css [网站级]模块化
base.css [通用级]网站
这种自下而上的组织形式.各自的功能和定义以下:
page.css [某个特定的页面的特定样式]
common.css[抽象出网站通用的组件样式]
base.css [提供样式的reset以及原子类功能]
若是把写css看做建造房屋,那么base.css至关于地基+砖瓦
base.css和具体UI没有关系,它具备高度移植性,从而可以被任何风格的网站所引用. 通常来讲base.css会采起 reset + atom 这种形式
[ 地基 ] Reset.css用来重置与兼容浏览器自带的一些 一般不是咱们想要的 属性,好比浏览器自带的 padding与margin
以及 list-style
[ 砖瓦 ] Atom.css就是将 网站常常用到 而且 不可再拆分的样式 进行复用. 试想一下,一个中等规模的网站 确定不止 有20多个界面,假如每一个页面用到1次左浮动,咱们要写20次 float:left
,这显然违背了DRY——Don't Repeat Yourself的编码原则
Base.css的设置就是为了解决以上的两个问题,从而知足重置+复用
/*reset*/ body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h3,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td { margin:0; padding:0; } fieldset,img { border:0; } address,caption,cite,code,dfn,em,strong,th,var { font-style:normal; font-weight:normal; } ol,ul { list-style:none; } caption,th { text-align:left; } h1,h2,h3,h4,h5,h6 { font-size:100%;font-weight:normal; } q:before,q:after { content:'' } abbr,acronym { border:0 } /*atom*/ /*文字*/ .f12{font-size:12px;} .f14{font-size:14px;} .f16{font-size:16px;} .f20{font-size:20px;} /*定位*/ .tl{text-align:left} .tc{text-aligh:center} .tr{text-aligh:right} .fl{float:left;} .fr{float:left;} /*宽高*/ .w10{width:10px} .w20{width:20px} .w40{width:40px} .w60{width:60px} .w80{width:80px} .h50{height:50px} .h80{height:80px} .h100{height:100px} .h200{height:200px} /*边距*/ .m10{margin:10px;} .mt10{margin-top:10px;} .ml10{margin-right:10px;} .p10{padding:10px;} .pt10{padding-top:10px;} .pl10{padding-left:10px;}
接下来咱们来制做窗户吧 !
地基打好了,砖瓦也有了,如今咱们能够开始来制做窗户吧. 窗户与整个房屋的关系,至关于一个UI组件与整个网站的关系
举个栗子,不一样的房屋之间可能用到的窗的样式是不一样的, 但针对特定一栋房屋的内部,窗的样式却基本是相同的. 因此在同一栋房屋内,咱们是能够将窗户进行复用。即,只要刻一个模子作出第一扇窗,那么其余的门窗只要照着这个模子来复刻就行了,而用不着每次都从刻模子作起
这也为何common.css是网站级的缘由,不一样的网站UI组件可能会差异很大,但同一个网站内部,必定遵循设计一致性原则. 因此common.css的职责就是把网站常常用到的总体样式 [弹窗、表单、按钮等] 抽象成UI组件进行复用
UI组件推荐根据功能划分红更小的子块以便可以更好地进行管理,譬如划分红 common-form.css, common-btn.css, common-pop.css等
/* common-btn.css */ .lgBtn{...} .mdBtn{...} .smBtn{...} .downloadBtn{...}
/* common-form.css */ input[type="text"]{...} input[type="radio"]{...} input[type="checkbox"]{...}
/* common-pop.css */ .msgPop{...} .errPop{...} .loadingPop{...}
来点定制化的东西 !
门窗都弄好了,应该往房间里挂上一两副装饰画来彰显本身的品味修养. 我我的比较喜欢二次元大胸萌妹子,因此固然在卧室挂满了AKB48的海报. 可是若是把她们挂在客厅,就不太合适了. 客厅确定只能挂[ 财源广进 ][ 家和万事兴 ][ 八骏图 ]之类的阿摔!
若是说common.css的职责就是将网站内的 高度重用的总体样式 抽象成UI组件实现复用,那么对于网页内的 非高度重用的样式 我就把它们放在page.css里
/* page.css */ /* index */ container .banner1{...} /* contact us */ container .banner2{...} /* about us */ container .banner3{...}
在这个sass大行其道,各类组件框架层出不穷的时代,可能本文略显过期.更但愿借鉴前人的开发经验以及基础,从而更好的运用到现有的框架中去.
有关模块化css, 命名, 继承和组合的优劣性问题,就放在下一篇文章来讲
文章参考自:编写高质量代码-Web前端开发修炼之道