1
553
这是一个很好的问题。无论我在哪里看,CSS文件都会在一段时间后失去控制,尤其是在团队中工作时。 以下是我自己努力遵守的规则(不是我一直努力遵守的规则)。
建立合理的班级 这就是我喜欢建立合理的类的方式。 我首先应用全局设置:
然后,我识别页面布局的主要部分,例如顶部区域、菜单、内容和页脚。 如果我写了好的标记,这些区域将与HTML结构相同。 然后,我开始构建CSS类,尽可能指定尽可能多的祖先和明智的,并尽可能地将相关类分组。
把整个CSS结构看作 树 随着越来越具体的定义,你离根越远。你想尽可能少地学习,你想尽可能少地重复自己的课程。
例如,假设您有三个级别的导航菜单。
这三个菜单看起来不一样,但它们也有一定的特点。例如,它们都是
首先,定义
常见的
将特征放入名为
然后,定义这三个菜单中每个菜单的特定特性。1级是40像素高;2级和3级是20像素。
注:
您也可以为此使用多个类,但Internet Explorer 6
has problems with multiple classes
,因此此示例使用
菜单的标记如下所示:
如果页面上有语义相似的元素(如这三个菜单),请首先尝试计算出共性,并将它们放入类中;然后,计算出特定的属性并将它们应用到类中,或者,如果必须支持Internet Explorer 6,请使用ID。 其他HTML提示
|
2
88
这里只有4个例子:
在所有4个问题上,我的答案都包括了下载和阅读Natalie Downe的pdf的建议。 CSS Systems . (PDF包含了大量不在幻灯片中的注释,请阅读PDF!).注意她对组织的建议。 编辑(2014/02/05) 四年后,我会说: |
3
72
不要在CSS中写标题只需将部分拆分为文件即可。任何CSS注释,都应该是注释。
使用脚本将它们组合成一个;如有必要。你甚至可以有一个很好的目录结构,只需让你的脚本递归扫描
如果你必须写标题,在文件的开头有一个目录目录中的标题应该与您稍后编写的标题完全相同。搜索标题很痛苦。另外一个问题是,有人怎么知道在第一个头之后还有另一个头呢?另外,在编写TOC时,不要在每行的开头添加类似于DOC的*(星号),这只会使选择文本变得更麻烦。
使用规则或在规则内编写注释,而不是在块外首先,当您编辑脚本时,有50/50的机会会注意到规则块之外的内容(尤其是如果它是一个大的文本块;)。其次,(几乎)没有一种情况是你需要一个“评论”在外面。如果它在外面,它是99%的时间一个标题,所以保持这样。 将页面拆分为组件
组件应具有
HTML5文档中的大多数div通常是组件。 组件也可以被视为页面上的独立单元。用外行的术语来说,如果把某物当作一个组件是有意义的,那么就把它当作一个组件来对待。 黑匣子 . 再次使用QA页面示例:
通过将页面拆分为组件,可以将工作拆分为可管理的单元。 在同一行上放置具有累积效果的规则。
例如
如果它们在一行上不那么可读,至少将它们放在附近:
尽可能使用速记:
从不重复选择器如果您有更多相同选择器的实例,那么很有可能会不可避免地以相同规则的多个实例结束。例如:
当可以使用ID/类时,请避免使用标记作为选择器。首先,DIV和SPAN标签是例外:永远不要使用它们!;)仅用于附加类/ID。 这个…
应该这样写:
因为那里额外的悬垂沙发没有为选择器添加任何内容。它们还强制使用不必要的标记规则。例如,如果你要改变,
或者如果你更喜欢清晰:
原因是
一般规则是邪恶的!
他们不会节省你的时间,他们会让你的头爆炸;也会让维修变成一场噩梦。当你写这条规则的时候,你可能知道它们在哪里适用,但是这并不能保证你的规则以后不会影响你。 添加到这个通用规则中是令人困惑和难以阅读的,即使您对您正在设计的文档有一些了解。这并不是说你不应该写一般规则,只是不要使用它们,除非你真的打算让它们成为一般规则,甚至它们在选择器中添加尽可能多的范围信息。 像这样的东西…
…与在编程语言中使用全局变量有相同的问题。你需要给他们空间!
基本上是这样的:
我喜欢在我知道的组件是页面上的单个组件时使用ID;您的需求可能不同。 注意:理想情况下,你应该写的足够多。然而,在选择器中提到更多的组件比提到更少的组件更容易被原谅。
假设你有一个
现在假设你用你的页码来列出答案,你可能会遇到这样的情况。
这将使您的白色链接变黑,这是您不想要的。 修复它的错误方法是:
正确的方法是:
复杂的“逻辑”注释不起作用:)如果你写了这样的话:“这个值取决于废话加上废话的高度”,那你就不可避免地会犯错误,而且会像纸牌屋一样倒塌。 保持你的评论简单;如果你需要“逻辑操作”,考虑那些CSS模板语言,比如 SASS 或 LESS . 我怎么写彩色托盘?
把这个留到最后。为您的整个彩色托盘准备一个文件。如果没有这个文件,您的样式在规则中应该仍然有一些可用的颜色托盘。您的彩色托盘应该覆盖。您使用非常高级别的父组件(例如
如。
想法很简单,您的颜色托盘是独立于基本样式的样式表,您可以 叶栅 进入。 更少的名称,需要更少的内存,使代码更容易阅读用更少的名字更好。理想情况下使用非常简单(而且简短!)文字:文本,正文,标题。 我还发现简单单词的组合更容易理解,然后有一个长的“合适”单词汤:postbody、posthead、userinfo等。
保持词汇量小,这样即使有陌生人来读你的风格汤(像你自己在几周后;)也只需要理解单词的使用位置,而不是每个选择器的使用位置。例如,我使用
自己清理一下写CSS就像吃东西,有时你会留下一堆烂摊子。一定要清理掉这些乱七八糟的东西,否则垃圾代码就会堆积起来。删除不使用的类/ID。删除不使用的CSS规则。确保每件事都是好的一个紧,你没有冲突或重复的规则。 如果按照我的建议,您将一些容器视为您的样式中的黑盒(组件),在选择器中使用这些组件,并将所有内容保存在一个专用文件中(或使用TOC和标题正确地拆分文件),那么您的工作就简单多了…… 您可以使用诸如firefox扩展名dust me选择器(提示:指向sitemap.xml)这样的工具来帮助您找到一些隐藏在CSS核和carnies中的垃圾。
保持一个
|
5
31
我见过的最好的反击方式
甚至还有一个 OOCSS 框架很好。
有些思想与上面的答案相悖,但一旦你知道如何设计
这里的关键是识别站点中的“对象”或构建基块模式,并用它们进行构建。
Facebook雇佣了OOCSS的创建者,
Nicole Sullivan
在他们的前端代码(HTML/CSS)中可以节省很多钱。是的,实际上您不仅可以在CSS中获得节省,而且还可以在HTML中获得节省,通过它的声音,这对于您来说是非常有可能的,正如您提到的转换
另一个伟大的方法在某些方面与OOCSS相似,就是从一开始就计划和编写可扩展和模块化的CSS。 Jonathan Snook 写了一篇精彩的文章和一本关于 SMACSS - Scalable and Modular Architecture for CSS
让我给你链接一下:
|
6
16
你还应该了解级联,重量,以及它们是如何工作的。 我注意到您只使用类标识符(div.title)。你知道你也可以使用身份证吗,而且一个身份证比一个班级更重要吗? 例如,
将使所有这些元素共享一个字体大小,比如说,颜色,或者您的规则。您甚至可以让作为page1后代的所有div都获得某些规则。 至于重量,请记住CSS轴从最普通/最轻移动到最具体/最重。也就是说,在CSS选择器中,元素说明符被类说明符覆盖,而ID说明符被类说明符覆盖。数字计数,因此具有两个元素说明符(ul li)的选择器将比只有一个说明符(li)的选择器具有更大的权重。 把它想象成数字。一列中的9仍然小于十列中的9。具有ID说明符、类说明符和两个元素说明符的选择器将比没有ID、500个类说明符和1000个元素说明符的选择器具有更大的权重。当然,这是一个荒谬的例子,但你明白了。关键是,应用这个概念有助于清理很多CSS。 顺便说一句,除非与class=“title”的其他元素发生冲突,否则不需要将元素说明符添加到类(div.title)中。不要增加不必要的重量,因为你以后可能需要使用这个重量。 |
7
13
我可以建议 Less CSS Dynamic framework 它与前面提到的SASS类似。 它帮助维护每个父类的CSS。 例如。
这是怎么做的: 应用宽度:100%应用于child1和child2。 另外,child1特定的CSS属于父级。 这会使
|
8
12
我发现困难的是将一个站点所需的设计转换成一系列规则。如果站点的设计是清晰的、基于规则的,那么您的类名和CSS结构就可以从中流出。但是,如果随着时间的推移,人们随机地在网站上添加一些不太有意义的内容,那么在CSS中就没有多少可以做的了。 我倾向于这样组织我的CSS文件:
如您所见,其中大部分取决于站点的设计。如果设计清晰而有条理,你的CSS就可以了。如果没有,你就重新拧紧了。 |
9
7
我的回答是高层次的,以解决您在问题中提出的高层次问题。可能有一些低级的组织技巧和调整可以使它更漂亮,但这些都不能修复方法上的缺陷。有几个因素会影响CSS爆炸。显然,站点的整体复杂性,但也包括诸如命名语义、CSS性能、CSS文件组织和可测试性/可接受性等。 您似乎在正确的路径上使用了命名语义,但它可以进一步发展。在没有结构修改的情况下重复出现在站点上的HTML部分(称为“模块”)可以被视为选择器根,从中可以确定相对于该根的内部布局。这是 面向对象的CSS 你可以 read/watch more about it in this talk by a Yahoo engineer . 重要的是要注意,这种干净的方法可能与性能问题相反,这有利于 基于ID或标记名的短选择器 . 找到这种平衡取决于你自己,但是除非你有一个庞大的网站,否则这应该只是你脑后的一个指南,提醒你保持选择者的简短。 More about performance here . 最后,你会有一个 单CSS文件 对于整个站点,还是多个文件(一个用于每页或节文件的基文件)?单个文件的性能更好,但在多个团队成员中可能更难理解/维护,并且可能更难测试。为了测试,我建议您 单个CSS测试页 这包括每个受支持的CSS模块来测试冲突和意外的级联。 或者你可以有一个 多文件方法 ,将CSS规则范围限定到页面或节。这要求浏览器下载多个文件,这是性能问题。可以使用服务器端编程来动态地将CSS文件指定并聚合(和缩小)为单个文件。但是,由于这些文件是独立的,对它们的测试是独立的,所以您可能会在页面/部分中引入不一致的外观和感觉。因此,测试变得更加困难。 由您来分析客户的具体需求,并相应地平衡这些问题。 |
10
5
如我之前所说:进入OOCSS。sass/less/compass很有诱惑力,但是在普通的css被使用之前,sass/less/compass只会让事情变得更糟。 首先,阅读高效的CSS。试试谷歌网页速度,看看Souders写了什么关于高效的CSS。 然后,输入oocss。
它将彻底改变编写CSS的每一个方面。我重新焕然一新,并且热爱它。 更新:smacss类似于oocss,但一般来说更容易适应。 |
11
3
合理CSS的核心原则,摘自 CSS Refactoring: From append-only to modular CSS
|
12
2
很多时候,我会看到一些人将文件分成多个部分,每个部分之间有一个标题注释。 类似的东西
它工作得很好,可以让你以后很容易地回去找到你正在做的事情。 |
13
1
你应该看看 边界元法 . 理论 BEM试图为CSS选择器的组织和命名提供一套说明,以使其更具可重用性和模块化,并避免此类选择器之间的冲突,这类冲突通常会导致意大利面条代码和特殊性头痛。 如果使用得当,实际上会产生一些非常积极的影响。
BEM与SASS很好地合作,将几乎面向对象的风格引入到CSS中。您可以构建模块化文件,处理单个UI元素的显示,并包含变量,例如颜色和“方法”,例如如何处理内部元素。虽然一个硬核的OO程序员可能会拒绝这个想法,但实际上,应用的概念带来了OO结构中许多更好的部分,例如模块化、松散耦合、紧密的内聚和上下文无关的可重用性。您甚至可以通过使用
Sass and the
一篇来自《粉碎》杂志的更深入的文章可以 found here 还有一个来自CCS奇才的Harry Roberts(任何参与CSS的人都应该读过) is here . 在实践中 我已经用了好几次了,同时也用了smacss和oocss,这意味着我也有一些东西可以比较它们。我也曾在一些大的混乱中工作过,通常是我自己的,缺乏经验的创造。 当我在现实世界中使用BEM时,我会用一些额外的原则来增强这种技术。我使用实用程序类-一个很好的例子是包装类:
我也有点依赖级联和特异性。BEM模块在这里
(我尽最大努力使所有内容尽可能通用和上下文无关,这意味着一个好的项目几乎所有内容都在可重用的模块中) 我在这里最后要指出的一点是,无论您的项目看起来多么小和不复杂,您应该从一开始就这样做,原因有两个:
Web组件 2015年,我们开始研究Web组件。我对这些还不太了解,但他们希望把所有前端功能都放在独立的模块中,有效地尝试将BEM到前端的各种原则作为一个整体应用,并将分散但完全耦合的组件(如DOM片段、JS(MVC)和CSS)应用于构建相同的UI小部件。 通过这样做,YB将解决CSS中存在的一些原始问题,我们试图用bem之类的东西来解决这些问题,同时使其他前端架构更加健全。 有一些进一步的阅读 here 同时也是一个框架 Polymer here 哪个值得一看 终于 我也认为这是一个 excellent, modern best practice css guide -专门为防止大型CSS项目变得混乱而设计。我尽量遵循这些原则。 |
14
0
我建议你看看 "Compass Style" CSS framework . |
15
0
这里有一些很好的材料,有些在回答这个问题时花了很长时间,但是当涉及到单独的样式表或单独的样式表时,我会使用单独的文件进行开发,然后在部署时将站点上使用的所有通用CSS合并为一个文件。 这样,您就可以在开发过程中获得两个方面的最佳效果,提高性能(减少从浏览器请求的HTTP请求)和分离代码关注点。 |
YunusoviÄ · 我无法用css更改html段落颜色 1 年前 |
Blake · 无法使用CSS旋转Angular 15中的字体图标 1 年前 |
Phil Lucks · 如何制作边界的外半径? 1 年前 |
roy_meir · 创建自定义下拉式元素 1 年前 |
Community wiki · 如何为触摸设备优化网站 1 年前 |
tpetzoldt · 如何在有光泽的情况下抑制图像的抗锯齿? 1 年前 |
manofconstsorrow · 点击导航项目关闭汉堡菜单 1 年前 |