CSS在处理选择器时使用token算法还是子字符串算法?

问题描述 投票:0回答:1

我有以下代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <style>
      .square__element {
        font-size: 20px;
        padding: 50px;
        background-color: orange;
      }
    </style>
    <title>Document</title>
  </head>
  <body>
    <div class="square__element">Square 1</div>
    <div class="square__element--modifier">Square 2</div>
  </body>
</html>

当我运行它时,.square__element{}selector中声明的任何样式都不会应用于“Square 2element。 最初我认为“Square 2”元素应该应用 .square__element{} 选择器中声明的所有样式。这就是为什么我在谷歌上搜索了一些搜索查询,试图弄清楚是否是我有错误的期望,或者我的浏览器是否出现了故障。但我发现没有任何帮助。

然后我打开了w3c,研究了大约一个小时的规范。我浏览了整个“语法”章节,但也没有找到答案。

最后,我询问了我可以使用的所有人工智能聊天内容。 他们(Bard、Chat GPT 和 Copilot)告诉我,.square__element{} 中声明的样式应该应用于“Square 2”元素,因为

“CSS 处理器使用子字符串匹配算法”

但是 Bing 聊天告诉我,除非我用空格分隔

<div class="square__element square__element--modifier">Square 2</div>,否则不应该

应用样式,因为

“CSS 处理器不使用子字符串匹配算法,而是使用 令牌匹配算法,其中令牌是字符序列 不是空格、制表符、换行符或其他分隔符。 ”

所以,我仍然不知道正确答案。 有人可以帮我弄清楚 .square__element{} 选择器中声明的规则是否应该应用于“Square 2”元素吗? 也许可以指出规范中我错过的解释的地方。

css css-selectors
1个回答
0
投票
不,不应该。

square__element

square__element--modifier
都是两个不同的
有效类名

添加这样的修饰符只是一个

命名约定,表示修饰符正在向基类应用或修改某些样式(square_element

)。通常在使用时包含这两个类。您可以在 
Boostrap 类中看到许多类似的示例,例如 btn btn-lg
,其中 
btn-lg
 应用或覆盖一些附加样式到 
btn

© www.soinside.com 2019 - 2024. All rights reserved.