我正在重读smacss(CSS的可扩展和模块化架构)[https://smacss.com/],而且大部分内容对我都有意义。
一个主要的事情是模块不需要知道它的任何环境/环境。即:它只是呈现它的内容,但如果它包含在侧边栏或主要内容区域中则不关心。到现在为止还挺好。
这会扩展到一般规则,即模块本身不应该自己定义边距,但总是让他们的父母(用{s}的layouts
决定是否/如何设置它们?
答案 0 :(得分:2)
我同意Evgeniy的意见,如果为了正确呈现模块的阴影风格,有时边距将是模块特定的。例如。
但我在其他大多数情况下都提出了友好的分歧,并说边距 - 基本上是模块或布局边缘之间的间距 - 应该只与布局一起存在。
SMACSS的底线是,模块应该能够插入到任何布局容器中并可能填充该布局的整个空间(模块上没有宽度/高度规则),并且布局边缘之间没有任何意外间距。换句话说,布局决定了子模块的尺寸和位置。
这取决于所讨论的具体问题,但是如果你有多个模块驻留在布局中,并且需要在它们之间留出间距,那么布局div / sub-div将需要指定那些布局例如,子列,无论哪些模块插入到列中,它们都采用间距之间所需的布局。
最后,我担心我也不同意子模块的建议,例如: "模块名顶隙&#34 ;.这将是反SMACSS,因为您将指向一个方向,根据特定的个别样式命名模块(例如基本模块,除了margin-top:20px),这不是内联样式。我们的想法是远离这种关系,只根据内在的构成和目的命名模块和子模块,让布局决定其余部分。
我推荐Jonathan Snook关于前端大师的SMACSS新课程:https://frontendmasters.com/courses/smacss。我已经看过这一切了,它比原版书中的内容更详细,大大帮助了我记得的那些犹豫不决。
答案 1 :(得分:0)
如果你的模块在所有情况下都需要边距,(例如你有一些带边框和阴影的div,你必须设置边距),你可以在模块中设置它。
如果模块边距是可选的(可能是页眉或页脚中应该有顶部或底部边距的链表),您应该使用子类,如<div class="my-module my-module-top-gap"> some </div>
。因此,您可以保持模块独立于上下文并修改其外观。