CSS中匹配嵌套元素的最佳实践

CSS中匹配嵌套元素的最佳实践,css,Css,我做了一些研究,但无法确定对嵌套元素使用类选择器还是标记选择器是最佳做法。假设我有HTML: <ul> <li class="list-item-content" > <img src="/images/flags/fr.png" class="country-flag"> </li> </ul> 或 哪一种是最佳实践?由于浏览器从右到左匹配规则,我认为第二种方式比第一种方式更好,浏览器首先匹配

我做了一些研究,但无法确定对嵌套元素使用类选择器还是标记选择器是最佳做法。假设我有HTML:

<ul>
    <li class="list-item-content" >
            <img src="/images/flags/fr.png" class="country-flag">
    </li>
</ul>


哪一种是最佳实践?由于浏览器从右到左匹配规则,我认为第二种方式比第一种方式更好,浏览器首先匹配所有图像,然后检查父项….

有关更具体的css,您必须同时使用这两种方式,如下所示:-

.list-item-content img.country-flag{
    vertical-align: middle;     
}

它将定义更清晰的嵌套结构。

大多数情况下,您不会尝试匹配所有img,因此首选第二种约定

.list-item-content .country-flag{
    vertical-align: middle;     
}
这也是Harsh Sanghani的另一个好做法

.list-item-content img.country-flag{
    vertical-align: middle;     
}

就我个人而言,我认为在规则中使用两个类,如$('.class1.class2')更有效地匹配,是更好的实践。而且可能很少需要3节课


如果您非常确定某个类是唯一的,那么$('.class1')可能就足够了。

这取决于项目的复杂性和团队的偏好

在性能方面,选择嵌套项时使用如下内容

 .list-item-content .country-flag{}
哪个翻译成

 select  .country-flag elements descendant of .list-item-content element
可能会对大型项目(DOM)或功能有限的设备(如智能电视或旧移动设备)造成性能损失

为了降低这种风险,您可以尝试使用名称约定,这将帮助您避免以昂贵的方式选择嵌套元素

其中一种方法称为

公约简而言之如下:

.block represents the higher level of an abstraction or component.
.block__element represents a descendent of .block that helps form .block as a whole.
.block--modifier represents a different state or version of .block.
因此,您可以像这样重写HTML:

<div class="componenet">
<ul>
    <li class="componenet__list" >
            <img src="/images/flags/fr.png" class="componenet__list-flag">
    </li>
</ul>
</div>
更多信息请点击此处:


你说得对。第二种方法更好,这正是你提到的原因。我想你回答了你自己的问题。此外,我认为像$('.class1 img')和$('.class1.class2 img')这样的规则也非常实用,只要标准足够独特。实际上,我还不关心你提到的从右到左匹配的效率问题,因为方便、清洁和可读性似乎更重要。
.block represents the higher level of an abstraction or component.
.block__element represents a descendent of .block that helps form .block as a whole.
.block--modifier represents a different state or version of .block.
<div class="componenet">
<ul>
    <li class="componenet__list" >
            <img src="/images/flags/fr.png" class="componenet__list-flag">
    </li>
</ul>
</div>
.componenet__list-flag {}