我应该如何组织我的CSS文件的内容?
这个问题是关于在一个.css文件中组织实际的CSS指令本身。 当开发一个新的页面或一组页面时,我通常只是手工添加指令到.css文件,尽可能地重构。 一段时间后,我有数百(或数千)的线路,调整布局时很难find我需要的。
有没有人有如何组织指令的build议?
- 我应该尝试组织自上而下,模仿DOM?
- 我是否应该在function上进行组织,将支持UI相同部分的元素的指令放在一起?
- 我应该按select器按字母顺序排列一切吗?
- 这些方法的一些组合?
另外,在一个文件中保存多lessCSS是有限制的,因为它可能是一个好主意,将它分解成单独的文件? 说,1000线? 或者将整个事物放在一个地方总是一个好主意?
相关问题: 组织CSS规则的最好方法是什么?
看看这三个slideshare介绍开始:
- 漂亮的可维护的CSS
- 可维护的CSS
- 高效,可维护,模块化的CSS
首先,最重要的是,logging你的CSS。 无论您使用什么方法来组织您的CSS,请保持一致并将其logging下来。 在每个文件的顶部描述该文件中的内容,可能提供了一个目录,可能引用容易search唯一标签,以便在编辑器中轻松跳转到这些部分。
如果你想把你的CSS分成多个文件,一定要这样做。 奥利已经提到额外的HTTP请求可能是昂贵的,但你可以有两全其美。 使用某种forms的构build脚本将您的logging良好的模块化CSS发布到压缩的单个CSS文件中。 YUI压缩器可以帮助压缩。
与其他人迄今为止所说的不同,我倾向于将每个属性单独编写一行,并使用缩进来将相关规则分组。 例如下面奥利的例子:
#content { /* css */ } #content div { /* css */ } #content span { /* css */ } #content etc { /* css */ } #header { /* css */ } #header etc { /* css */ }
这样可以很容易地遵循文件结构,特别是足够的空白和组间明显标注的注释(尽pipe不是很容易快速浏览),并且易于编辑(因为您不必通过单行长的CSS为每个规则)。
理解和使用级联和特殊性 (所以按照字母sortingselect器是正确的)。
是否将我的CSS分成多个文件,以及哪些文件取决于网站和CSS的大小和复杂性。 我总是至less有一个reset.css
。 这往往伴随着layout.css
的一般页面布局, nav.css
如果站点导航菜单有点复杂和forms.css
如果我有足够的CSS样式我的forms。 除此之外,我还在自己搞清楚。 我可能有colors.css
和type.css/fonts.css
来分割颜色/graphics和印刷, type.css/fonts.css
为所有的HTML标签提供一个完整的基础风格…
我倾向于像这样讨论我的CSS:
- reset.css
- base.css:我设置了页面主要部分的布局
- 一般风格
- 头
- 导航
- 内容
- 页脚
- 其他 – [页面名称] .css:仅在一个页面中使用的类
不过你觉得最简单的阅读!
严重的是,你会得到十亿和五个build议,但你只会喜欢一些方法。
有些事情我会说,
- 把CSS文件分解成块可以帮助你将其组织起来,但这意味着来自浏览器的更多请求,最终导致运行速度较慢的服务器(更多的请求),浏览器需要更长的时间才能显示页面。 记住这一点。
- 打破一个文件,只是因为它是任意数量的行是愚蠢的(除了你有一个可怕的编辑器 – 在这种情况下,得到一个新的)
我个人编码我的CSS是这样的:
* { /* css */ } body { /* css */ } #wrapper { /* css */ } #innerwrapper { /* css */ } #content { /* css */ } #content div { /* css */ } #content span { /* css */ } #content etc { /* css */ } #header { /* css */ } #header etc { /* css */ } #footer { /* css */ } #footer etc { /* css */ } .class1 { /* css */ } .class2 { /* css */ } .class3 { /* css */ } .classn { /* css */ }
在一行上保持规则允许我快速浏览一个文件,看看有什么规则。 当他们扩大时,我觉得这太辛苦了,试图找出适用的规则。
我尝试了一些不同的策略,我总是回到这种风格:
.class {border: 1px solid #000; padding: 0; margin: 0;}
当谈到大量的声明时,这是最友好的。
Snook先生几乎在四年前写了这个:) 。
有许多格式化你的CSS的公认的方法。 它最终取决于你自己写的最舒服的内容,但这些将帮助你pipe理更复杂的项目。 这并不重要,但我倾向于使用BEM和SMACSS的组合。
BEM(块,元素,修饰符)
BEM是一个非常有用,function强大且简单的命名约定,可使您的前端代码更易于阅读和理解,易于使用,易于扩展,更强大,更明确,而且更严格。
块
独立实体本身是有意义的,比如:
header, container, menu, checkbox, input
元件
块的一部分,没有独立的意义。 它们在语义上与其块相关联:
menu item, list item, checkbox caption, header title
修改
在块或元素上的标志。 使用它们来改变外观或行为:
disabled, highlighted, checked, fixed, size big, color yellow
OOCSS
OOCSS的目的是鼓励代码重用,并最终使更快,更有效的样式表更易于添加和维护。
OOCSS基于两个主要原则:
- 从皮肤分离结构
这意味着将重复的视觉特征(如背景和边框样式)定义为单独的“皮肤”,您可以将其与各种对象进行混合搭配,从而在不需要太多代码的情况下获得大量的视觉效果。 查看模块对象及其外观。
- 容器和内容的分离
本质上,这意味着“很less使用位置相关的样式”。 一个物体应该看起来一样,不pipe你放在哪里。 因此,不要使用.myObject h2 {…}来创build具体的样式,而应该创build并应用描述问题的类。 这给了你以下的保证:(1)所有未分类的s看起来都一样; (2)具有类别类的所有元素(称为mixin)看起来都是一样的; 和3)你不需要创build一个覆盖风格的情况下,当你真的想让.myObject h2看起来像正常。
SMACSS
SMACSS是检查您的devise过程的一种方式,也是将这些僵化的框架纳入灵活的思维过程的一种方式。 这是一个尝试,logging使用CSS时一致的网站开发方法。
SMACSS的核心是分类。 通过对CSS规则进行分类,我们开始看到模式,并可以为每个模式定义更好的实践。
有五种types:
/* Base */ /* Layout */ /* Modules */ /* State */ /* Theme */
基础包含重置和默认元素样式。 它也可以具有控件的基本样式,如button,网格等,在特定情况下可以在文档中稍后重写。
布局将包含所有的导航,面包屑,站点地图等。
模块包含区域特定的风格,如联系表格样式,主页瓦片,产品列表等等
State包含状态类,如isSelected,isActive,hasError,wasSuccessful等。
主题包含与主题相关的任何样式。
有太多的细节在这里,但也看看这些其他人:
- SuitCSS
- AtomicCSS (不是primefacesdevise)
- oCSS (有机CSS)
分解常见的风格。 不是那些恰好相同的样式,相同的样式 – 改变一个select器的样式可能意味着你会想改变另一个样式。 我在另一篇文章中提供了这种风格的例子: 在CSS文件中创build一个variables用于CSS文件 。
除此之外,团体有关的规则在一起。 并将您的规则分成多个文件…除非每个页面实际上需要每个规则。
我按照这个顺序去
- 一般的风格规则,通常应用于裸露的元素(a,ul,ol等),但也可以是一般类(.button,.error)
- 适用于大多数/所有页面的页面布局规则
- 单独的页面布局规则
对于适用于单个页面或小型分组页面的任何样式规则,我会将主体设置为一个id和一个类,以便轻松定位特定的页面。 id是文件的基本名称,而类是它所在的目录名称。
由于实际的顺序是你的CSS如何应用的重要组成部分,所以继续使用“按字母顺序排列”的build议似乎有点愚蠢。
一般而言,您想要将项目按其影响的页面区域分组在一起。 例如,首先影响所有内容的主要样式,首先是页眉和页脚样式,然后是导航样式,然后是主要内容样式,然后是次要内容样式。
在这一点上,我会避免分成多个文件,因为维护起来可能会比较困难。 (当您打开六个CSS文件时,要保持级联顺序非常困难)。 但是,如果仅将样式应用于页面的子集,我肯定会开始将样式移动到不同的文件中,例如,当页面实际上包含表单时,表单样式只能链接到页面。
CSS文件caching在客户端上。 所以最好将所有样式保存在一个文件中。 但是在开发时,我发现根据域来构buildCSS是很有用的。
例如: design.css
, text.css
, text.css
等等。 当我发布最终产品时,我将所有样式混合成一个文件。
另一个有用的提示是将重点放在规则上,而不是样式上。
而:
ul li { margin-left: 10px; padding: 0; }
看起来不错,当你拥有100行代码时,find规则并不容易。
相反,我使用这种格式:
rule { property: value; property: value; } rule { property: value; property: value; }
我曾经为此一直担心,但萤火虫来救援。
这些日子,看看你的风格如何通过Firebug相互关联,并从那里找出需要做的事情就容易多了。
当然,一定要确保有一个合理的结构,将相关的风格分组在一起,但不要太过分。 Firebug让事情变得如此简单,以至于你不必担心在前面做出完美的CSS结构。
这是我做的。 我有一个没有指示的CSS索引页面,它调用不同的文件。 这里是一个简短的例子:
@import url("stylesheet-name/complete-reset.css"); @import url("stylesheet-name/colors.css"); @import url("stylesheet-name/structure.css"); @import url("stylesheet-name/html-tags.css"); @import url("stylesheet-name/menu-items.css"); @import url("stylesheet-name/portfolio.css"); @import url("stylesheet-name/error-messages.css");
它从一个完整的重置开始。 下一个文件定义了调色板以便于参考。 然后,我devise了确定布局,页眉,页脚,列数,适合的位置等的主要<div/>
s。html标签定义<body/>
, <h1/>
, <p/>
吨等…接下来是网站的具体部分。
这是非常scalabale和非常清楚。 find更改的代码和dd新的部分更友好。
ITCSS
哈里·罗伯茨(CSS Wizardry)
定义全局命名空间和级联,并有助于保持select器特异性低。
结构体
前两个只适用于使用预处理器的情况。
- (设置)
- (工具)
- generics
- 分子
- 对象
- 组件
- 王牌
通常我这样做:
-
<link rel="stylesheet" href="css/style.css">
-
在style.css中我@import以下内容:
@import url(colors.css); @import url(grid.css); @import url(custom.css); + some more files (if needed)
-
在
colors.css
我@import
以下(使用CSS自定义属性时):@import url(root/variable.css);
一切都是为了便于获取代码的任何部分进行编辑。 如果有帮助,我会很高兴。