【发布时间】:2012-08-22 10:34:32
【问题描述】:
我刚刚阅读了Scalable and Modular Architecture for CSS,它让我思考了一些事情。 Snook 的两条原则是:
- 增加一段 HTML 和内容的语义价值
- 降低对特定 HTML 结构的期望
因此,这意味着使用语义类名称而不是依赖非语义元素类型进行定位。例如,我可能不针对.someClass h5,而是针对.someClass-title,这样如果将h5换成其他东西,事情就不会中断。
就我个人而言,我发现以元素的名称对元素的层次结构进行编码有点令人不快(即使它在语义上是正确的)。我宁愿做.someClass .title。但是要使用像标题一样通用的类,您需要接受这个类将在许多不同的上下文中使用。
如果我知道它会被选择器中的前一个项目命名,那么在完全不同的上下文中使用同一个类有什么问题吗?
例如,假设我的网站中有三个不同的地方,其中一类“标题”是有意义的:
HTML
<header class="pageHeader">
<h1 class="title">Some Title</h1>
</header>
...
<article class="leadArticle>
<h3 class="title">Some Article Title</h3>
</article>
...
<ul class="productPreviews">
<li class="product">
<h5 class="title">Some Product Name</h5>
</li>
</ul>
CSS
.pageHeader .title
{
}
.leadArticle .title
{
}
.productPreview .product .title
{
}
编辑:正如Alohci 在下面的回答中提到的那样,标题标签并非没有语义,所以也许这不是最好的例子。
显然,在这些上下文中,我可能会做一些与标题完全不同的事情,但标题对于它的模块命名空间来说绝对有意义,而且我从来没有打算将标题用作通用选择器。
这似乎符合所有条件。它语义丰富,与实现完全解耦。例如,如果将最后一个示例更改为 ol 或一堆 div,则不会出现任何问题,如果将 title 包装在 div 中,它仍然会成为目标。
这对我来说很有意义,但我没有看到这种方法被广泛使用,我想知道为什么。一个明显的缺点是您在选择器中链接类,但我认为这比命名每个类名更可取。
【问题讨论】:
-
“……我从来没有……”——著名的遗言