css - 管理 CSS 爆炸

标签 css organization

我一直在严重依赖 CSS 来创建我正在开发的网站。现在,所有 CSS 样式都在每个标签的基础上应用,所以现在我试图将其移动到更多的外部样式以帮助将来进行任何更改。

但现在的问题是我注意到我收到了“CSS 爆炸”。我很难决定如何最好地组织和抽象 CSS 文件中的数据。

我正在大量使用div网站内的标签,从一个基于表格的网站移动。所以我得到了很多看起来像这样的 CSS 选择器:

div.title {
  background-color: blue;
  color: white;
  text-align: center;
}

div.footer {
  /* Styles Here */
}

div.body {
  /* Styles Here */
}

/* And many more */

还不错,但由于我是初学者,我想知道是否可以就如何最好地组织 CSS 文件的各个部分提出建议。我不想为我网站上的每个元素都有一个单独的 CSS 属性,我总是希望 CSS 文件相当直观且易于阅读。

我的最终目标是让 CSS 文件更容易使用,并展示它们提高 Web 开发速度的能力。这样,将来可能在此站点上工作的其他人也将开始使用良好的编码实践,而不必像我那样学习。

最佳答案

这个问题问得好。无论我看到哪里,CSS 文件都会在一段时间后失去控制——尤其是,但不仅限于,在团队中工作时。

以下是我自己试图遵守的规则(并非我总是设法遵守。)

  • 尽早重构,经常重构。 经常清理 CSS 文件,将同一类的多个定义融合在一起。立即删除过时的定义。
  • 在修复错误期间添加 CSS 时,请评论更改的作用(“这是为了确保框在 IE < 7 中左对齐”)
  • 避免冗余,例如在 .classname 中定义相同的东西和 .classname:hover .
  • 使用评论 /** Head **/建立一个清晰的结构。
  • 使用有助于保持风格不变的美化工具。我用 Polystyle ,对此我很满意(花费 15 美元,但物有所值)。周围也有免费的(例如 Code Beautifier 基于 CSS Tidy,一个开源工具)。
  • 建立合理的类(class)。有关这方面的一些注意事项,请参见下文。
  • 使用语义,避免 DIV 汤 - 使用 <ul>例如,用于菜单。
  • 在尽可能低的级别定义所有内容(例如 body 中的默认字体系列、颜色和大小)并使用 inherit在可能的情况下
  • 如果您有非常复杂的 CSS,也许 CSS 预编译器会有所帮助。我打算调查 xCSS很快出于同样的原因。周围还有其他几个。
  • 如果在团队中工作,还要强调 CSS 文件质量和标准的必要性。每个人都热衷于他们的编程语言的编码标准,但很少意识到这对于 CSS 也是必要的。
  • 如果在团队中工作,请考虑使用版本控制。它使事情更容易跟踪,编辑冲突更容易解决。这真的很值得,即使您“只是”使用 HTML 和 CSS。
  • 不要使用 !important .不仅因为 IE =< 7 无法处理。在复杂的结构中,使用!important往往很想改变一种无法找到来源的行为,但这对长期维护来说是一种毒药。

  • 建立合理的类(class)

    这就是我喜欢构建合理类的方式。

    我首先应用全局设置:
    body { font-family: .... font-size ... color ... }
    a { text-decoration: none; }
    

    然后,我确定页面布局的主要部分——例如顶部区域、菜单、内容和页脚。 如果我编写了好的标记,这些区域将与 HTML 结构相同。

    然后,我开始构建 CSS 类,在合理的情况下尽可能多地指定祖先,并尽可能将相关类分组。
    div.content ul.table_of_contents 
    div.content ul.table_of_contents li 
    div.content ul.table_of_contents li h1
    div.content ul.table_of_contents li h2
    div.content ul.table_of_contents li span.pagenumber
    

    把整个 CSS 结构想象成一棵树,离根越远,定义就越具体。您希望保持尽可能少的类(class)数量,并且尽可能少地重复自己。

    例如,假设您有三级导航菜单。
    这三个菜单看起来不同,但它们也有一些共同点。例如,它们都是<ul> ,它们都具有相同的字体大小,并且元素都彼此相邻(与 ul 的默认呈现相反)。此外,所有菜单都没有任何要点( list-style-type )。

    首先,在名为 menu 的类中定义共同特征:
    div.navi ul.menu { display: ...; list-style-type: none; list-style-image: none; }
    div.navi ul.menu li { float: left }
    

    然后,定义三个菜单中每一个的具体特征。级别 1 是 40 像素高;第 2 级和第 3 级,20 个像素。

    注:您也可以为此使用多个类,但 Internet Explorer 6 has problems with multiple classes ,所以这个例子使用 id s。

    div.navi ul.menu#level1 { height: 40px; }
    div.navi ul.menu#level2 { height: 20px; }
    div.navi ul.menu#level3 { height: 16px; }
    

    菜单的标记如下所示:
    <ul id="level1" class="menu"><li> ...... </li></ul>
    <ul id="level2" class="menu"><li> ...... </li></ul>
    <ul id="level3" class="menu"><li> ...... </li></ul>
    

    如果页面上有语义相似的元素——比如这三个菜单——试着先找出共同点并将它们放在一个类中;然后,计算出特定的属性并将它们应用到类,或者,如果您必须支持 Internet Explorer 6,则应用 ID。

    杂项 HTML 提示

    If you add these semantics to your HTML output, designers can later customize the look of web sites and/or apps using pure CSS, which is a great advantage and time-saver.


  • 如果可能,给每个页面的主体一个唯一的类:<body class='contactpage'>这使得向样式表添加特定于页面的调整变得非常容易:
    body.contactpage div.container ul.mainmenu li { color: green }
    
  • 自动构建菜单时,请添加尽可能多的 CSS 上下文,以便以后进行广泛的样式设置。例如:
    <ul class="mainmenu">
     <li class="item_first item_active item_1"> First item </li> 
     <li class="item_2"> Second item </li> 
     <li class="item_3"> Third item </li> 
     <li class="item_last item_4"> Fourth item </li> 
    </ul>
    

    这样,每个菜单项都可以根据其语义上下文进行样式访问:它是列表中的第一项还是最后一项;是否为当前事件项;并按编号。

  • Note that this assigning of multiple classes as outlined in the example above does not work properly in IE6. There is a workaround to make IE6 able to deal with multiple classes. If the workaround is not an option, you will have to set the class that is most important to you (item number, active or first/last), or resort to using IDs.

    关于css - 管理 CSS 爆炸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2253110/

    相关文章:

    jquery - 为什么我的 serialScroll 不工作?

    css - 如何在 CSS 中制作 gmail 样式的配置文件菜单?

    javascript - 为什么我的菜单栏诉诸:hover behavior onload?

    javascript - 组织 JavaScript 函数和文件的最佳方式?

    xcode - 在 .bundle 中存储图像资源的优点

    php - 我应该如何设置我的类(class)?

    css - Webpack 和字体 : module parse failed

    javascript - 在 PHP 中使用 javascript 刷新 div

    mercurial - 一个存储库/多个项目而不会混淆?

    c - C 中设备驱动程序的程序组织