我正在阅读Nicole Sullivan关于面向对象 CSS的理论。简而言之,基本思想是,与其在每次设计网站时都从头开始,不如使用一些已经编写好的基本构建块作为类,然后扩展它们以满足我们的需求。(“扩展”包括向 HTML 添加更具体/覆盖的类,因为 CSS 类不可能相互继承规则......希望在 CSS4 中?:) OOCSS 原则的灵感来自于你不需要每次需要查找双数的正弦时都重新编写Java Math 类。代码已经(由某人)编写,为什么不使用它呢?
虽然我认为这是一个很棒的抽象形式的提案,但从适用的角度来看,我很难理解它。[阅读下面我的具体问题,但我一直在寻找阅读材料,所以请随时停下来并评论一些指向 OOCSS 资源的更多链接,例如好处和批评等]
这是我的样式表:
.heading {...} /* for all heading styles */
.alpha {...} /* specific changes for h1 */
.beta {...} /* specific changes for h2 */
.gamma {...} /* specific changes for h3 */
.delta {...} /* specific changes for h4 */
.epsilon {...} /* specific changes for h5 */
.zeta {...} /* specific changes for h6 */
现在第一个选择器用于任何标题,具有共同的属性,例如font-family
,letter-spacing
等。然后每个“子类”(不是真正的子类)都有特定的区别,例如color
, font-style
,font-weight
等。事实上,这些“子类”是在后面写的 .heading
在样式表中表示如果它们中的任何一个包含具有不相等值的相等属性,则该属性.heading
将被“子类”中的属性覆盖。为了得到我的标题 1,我会写:
<h1 class="heading alpha">Contact Me</h1>
事实上,我可以为任何元素设置样式,例如span
, with class="heading alpha"
,但这确实是一个h1
元素。
【当然,我想说
.heading {...}
.alpha {
extends: .heading;
...
}
==============================
<h1 class="alpha">Contact</h1>
但我们还没有到那个时候。]
我的问题是,如果heading alpha
s 通常是左对齐的,我该怎么做才能使这个实例居中?Nicole 会说我应该导入她的样式表并使用她的.txtC {text-align:center;}
规则,所以我的代码将变为:
<h1 class="heading alpha txtC">Contact Me</h1>
但我认为基本上与 CSS 规则和类进行一对一的对应有点过分。如果我使用这种方法,那么我就不需要编写任何自己的样式表,而只需将一堆小类(“legos”)添加到我的 HTML 代码中,使其变得庞大且不可读。想象一下:
<p class="ital size-medium sans-ser txtJ med-height dark-blue">This is a
size 12pt, italic, Arial, left-right justified, 1.2em line height, dark
blue paragraph.</p>
specialParagraph
编写一个类(或paragraph-special
其他类)然后在 CSS 中分配所有这些规则不是更有意义吗?不需要乐高积木?就我而言,我不能只添加.alpha {text-align: center;}
到我的联系人页面的顶部吗?或者甚至是在线的?