为什么在Tailwind CSS规则中使用类时,`hidden`不覆盖`block`?

xuo3flqw  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(172)

我试图在Tailwind CSS中使用条件类和peer类来有条件地显示或隐藏错误消息。我在Tailwind CSS文档中发现了一个代码块,它以特定的顺序使用了blockhidden类,但我很困惑为什么hidden类没有像我预期的那样覆盖block类。
我在Tailwind CSS文档中遇到了以下HTML代码,它使用peer类以及条件blockhidden类来根据输入元素的状态显示或隐藏错误消息:

<form>
  <label for="email">Email:</label>
  <input id="email" name="email" type="email" class="is-dirty peer" required />
  <div class="peer-[.is-dirty]:peer-required:block hidden">
    This field is required.
  </div>
  <!-- ... -->
</form>

根据我的理解,这个代码块创建了一个新类,如果元素具有is-dirty类和required属性,则将block类应用于元素,然后应用hidden类。
然而,我很困惑为什么hidden类没有像我预期的那样覆盖block类。具体地说,我希望如果输入元素不是脏的和必需的,错误消息“This field is required.”会被隐藏,因为hidden类出现在规则中的条件block类之后。
所以我的问题是

*为什么隐藏类没有像我在此规则中期望的那样覆盖块类?
*peer-[.is-dirty]:peer-required:block hidden规则中blockhidden类的顺序重要吗?如果重要,它如何影响规则的行为?

如果您能提供任何见解或解释,我将不胜感激。谢谢!
注意:此代码块来自Tailwind CSS文档。

thtygnil

thtygnil1#

为什么隐藏类没有像我在这个规则中期望的那样覆盖块类?
对于具有不同specificity的CSS规则,具有更高特异性的规则将优先:

.hidden {
  display: none;
}

.block.block {
  display: block;
}
<div class="hidden block">Will be display block</div>
<div class="block hidden">Will be display block</div>

.block.block规则具有更高的特异性,因此将覆盖.hidden规则
将这个概念扩展到Tailwind,从peer-[.is-dirty]:peer-required:block类生成的CSS规则将比hidden类具有更高的特异性:

.hidden {
  display: none;
}

.peer.is-dirty:required ~ .peer-\[\.is-dirty\]\:peer-required\:block {
  display: block;
}

因此,只要peer-[.is-dirty]:peer-required:block匹配前一个类,peer-[.is-dirty]:peer-required:block将始终覆盖hidden
peer-[.is-dirty]:peer-required:block hidden规则中blockhidden类的顺序是否重要?如果重要,它如何影响规则的行为?
peer-[.is-dirty]:peer-required:block hidden不是一个单一的“规则”,而是两个不同的类,peer-[.is-dirty]:peer-required:blockhidden。它们的顺序在任何源代码中声明时都无关紧要。

相关问题