css - 在 SCSS 中使用嵌套时,最佳实践是什么?
问题描述
假设我有两个班级,.foo
并且.bar
.
目前,存在具有.foo
该类的元素,这些元素可能有也可能没有.bar
该类的后代。但是,具有该类的每个元素都是具有.bar
该类的元素的后代.foo
。例如:
<div class="foo">
</div>
<div class="foo">
<div class="bar">
</div>
</div>
现在说我正在使用 SCSS 来设置这些类的样式。以下哪个选项是更好的做法?
第一个选项是.bar
嵌套.foo
:
.foo {
// some rules...
.bar {
// some rules...
}
}
第二个选项是为两个类设置单独的顶级选择器,并.bar
在它是 的后代时使用父选择器来引用.foo
:
.foo {
// some rules...
}
.bar {
.foo & {
// some rules...
}
}
目前我倾向于第二种选择,主要是因为以下原因:
考虑将来的一个案例,.bar
当它不是.foo
. 在第一个选项中,我必须创建另一个顶级选择器,.bar
以使该类的规则出现在两个不同的位置。然而,如果我使用第二个选项,我只需将这些规则添加到块.bar
之外的现有顶级选择器中。.foo &
我认为第二种选择是更好的做法是否正确?
解决方案
SCSS
用于简化代码并具有最少数量的类和 id。
您的第一种方式更好,因为代码看起来非常简单易读。
您的第二种方式不必要地为代码增加了复杂性。
当您说 .bar 不在 .foo 内时,您可以直接为其编写代码,而无需在 .foo 内。
考虑:
<div class="foo">
This is foo...
<div class="bar">
This is bar inside Foo ...
</div>
</div>
<div class="bar">
This is bar ...
</div>
SCSS:
.foo {
color: red;
.bar {
color: green
}
}
.bar {
color: blue;
}
推荐阅读
- python - 如何在 Python 中强制使用 TLS 1.3 版本
- javascript - 为什么我的图像显示状态 200 但不显示来自 s3 的图像
- python - vk API 上传视频未显示
- c - C 中的 strcpy() 异常行为
- pandas - 在 Pandas 中,我无法使用 where 函数过滤数据框,返回仍然完整的数据集
- linux - Open VPN - 将路由推送到私有子网
- reactjs - 如何在ReactJs中的组件的映射中获取元素之前的元素
- node.js - Nodejs Kinesis Client 失败,没有太多线索
- java - Spring MVC TomCat配置运行jsp和html页面
- php - Laravel 8:找不到类'App\Policies\Gate'