当前位置: 首页 > 面试题库 >

如果我对所有内容始终使用CSS类而不是CSS ID,是否有任何利弊?

甄志
2023-03-14
问题内容

在CSS中,我们可以同时使用ID和类。如果我在语义,Web标准-W3C,SEO,可访问性和将来的可维护性方面始终使用Class代替ID,那么有什么利弊?


问题答案:

一个很大的不同:在CSS中,类的重要性级别低于ID。

想象一下,CSS声明中的每个规范都为该声明的值添加了一定数量的点。假设要点如下(完全组成,但随便什么):

  • 标签名称(“ a”,“ div”,“ span”):1分
  • 类名称(“ .highlight”,“。error”,“。animal”):10分
  • ID(“#main-headline”,“#nav”,“#content”):100分

因此,以下声明:

a {
    color: #00f;
}

.highlight a {
    color: #0f0;
}

#nav .highlight a {
    color: #f00;
}

分别价值1、11和111点。对于给定的标签,与该标签匹配的得分最高的声明为“获胜”。因此,例如,与这些声明,所有的 一个
标签将是蓝色的,除非他们的“亮点”类的元素,在这种情况下,他们会是绿色的内,除非该元素是用ID的元素里面=“导航”,在这种情况下它们会变成红色。

现在,如果仅使用类,则可以陷入棘手的情况。假设您要将内容区域中的所有链接都设为蓝色,而将foo区域中的所有链接都设为红色:

.content a {
    color: #00f;
}

.foo a {
    color: #f00;
}

按照我以前的(定级)量表,两者都得到11分。如果您的内容中包含foo,哪一个获胜?在这种情况下,foo获胜是因为它在后面。现在,也许这就是您想要的,但这很幸运。如果您以后改变主意并希望赢得内容,则必须更改其顺序,并且根据CSS文件中声明的顺序是一个坏主意。现在,如果您有以下声明:

#content a {
    color: #00f;
}

.foo a {
    color: #f00;
}

内容将永远获胜,因为该声明的值为101(击败foo的值为11)。不管它们以什么顺序出现,内容声明将始终击败foo。这为您提供了一些非常重要的一致性。获胜者不会根据文件中的顺序而随意更改,如果要更改获胜者,则必须更改声明(可能在.foo声明前添加#content,因此它将有111点)。

因此,基本上,值的差异很重要,如果您仅使用类,就会出现很多不一致的地方,并且看起来是任意的赢家。



 类似资料:
  • 问题内容: 我正在研究一个小的Java程序,并且正在使用数组,所以我做到了: 后来,我开始扩展以前做过的事情,并决定要从用户那里得到输入,因此我添加了: 现在发生了一个想法。我知道我可以这样做: 然后,我只需要1条导入行,而不是2条(或者我最终需要很多条),但是导入中的通配符是否意味着它将从该包中导入 所有内容 ,而不管是否需要它,或者仅将选择性功能被拉? 我的直觉是编写更多代码,仅包含我 知道

  • 问题内容: 有什么方法可以在JSON中嵌套对象,因此我不必从所有内容中制成数组?为了能够无错误地解析我的对象,我似乎需要这样的结构: 如果我将此对象提取到一个名为“结果”的变量中,则必须像这样访问嵌套的对象: 和 这对我来说似乎很笨拙和多余,如果可能的话,我希望: 和 但是,当一切都是数组时,如何直接使用对象键?在我困惑和未受教育的头脑中,这样的事情似乎更合适: 我可能在这里误解了一些基本知识,但

  • 问题内容: 扫描仪可用于读取文本文件,用户输入流等。正如上面明确指出的,我专门使用它来读取用户输入。 使用上面我做的Scanner,因为它“骑乘”了System.in,所以在没有下一个输入时对其hasNext()的调用将导致相关线程被阻塞,直到下一个有数据为止,然后再返回true。我想检查一下,getter风格,下一个有数据,而不是像hasNext()返回那样,下一个有数据。 其他问题通过启动一个

  • 在代码不等待任何东西的异步方法中,是否有人会将其标记为异步,等待任务,然后返回? 除了潜在的联合国必要性之外,这样做的负面影响是什么? 对于本例,请假设

  • 问题内容: 只是想知道是否有可能以某种方式使CSS属性插入html代码而不是在上插入字符串或类似这样的元素: 这将非常方便…可以通过Javascript完成,但是使用CSS确实可以使生活更轻松:) 问题答案: 不幸的是,这是不可能的。根据规格: 生成的内容不会更改文档树。特别是,它不会反馈到文档语言处理器(例如,用于重新解析)。 换句话说,对于字符串值,这意味着始终按字面意义对待该值。无论使用哪种

  • 问题内容: 结果集没有hasNext的方法。我想检查resultSet是否有任何值 这是正确的方法吗 问题答案: 没错,最初的光标指向第一行之前,如果第一次调用,则没有数据。 如果使用此方法,则由于它现在已定位在第一行之后,因此可能必须在复位后立即调用。 但是,应该注意的是,塞弗(Seifer)在下面的回答是对该问题的更优雅的解决方案。