使用 smacss 是否建议模块永远不要设置边距,而让 layout/containers 来处理?
using smacss is it recommended that modules never set margins but let this be handled by layout/containers?
我正在重读 smacss(CSS 的可扩展和模块化架构)[https://smacss.com/],其中大部分内容对我来说都很有意义。
主要的事情之一是模块不需要知道它的上下文/环境的任何信息。即:它只是呈现它的内容,但不关心它是否包含在侧边栏或主要内容区域中。到目前为止,一切都很好。
这是否会扩展到一般规则,即模块永远不应自己定义边距,而应始终让它们的父级(用 smacss 的说法是 layouts
)决定 if/how 来设置它们?
如果您的模块在所有情况下都需要边距,(例如您有一些 div 带有边框和阴影并且您必须设置边距)您可以在模块中设置它。
如果你的模块边距是可选的(它可能是页眉或页脚中的链接列表,应该有顶部或底部边距),你应该使用 sub-class,比如 <div class="my-module my-module-top-gap"> some </div>
。所以你可以保持模块独立于上下文并修改它的外观。
我同意 Evgeniy 的观点,有时边距是模块特定的,如果它们是强制性的,例如为了正确呈现模块的阴影样式。
但在大多数其他情况下,我会提出一个友好的异议,并说边距 - 本质上是模块或布局边缘之间的间距 - 应该专门与布局一起驻留。
SMACSS 的底线是,模块应该能够插入到任何布局容器中,并可能填充该布局的整个 space(模块上没有 width/height 规则)并且没有任何布局边缘之间的意外间距。也就是说,布局决定了子模块的尺寸和定位。
这取决于所讨论的具体问题,但是如果例如您有多个模块驻留在一个布局中,并且它们之间需要间距,那么布局 div/sub-divs 将需要指定例如那些布局子列,这样无论列中插入哪些模块,它们都采用所需的布局间距。
最后,恐怕我也不会同意子模块的建议,例如"module-name-top-gap"。这将是反 SMACSS,因为您将朝着一个方向前进,即您根据特定的个人样式命名模块(例如,基本模块,除了 margin-top: 20px),这与内联样式相距不远。我们的想法是摆脱这种关系,仅根据模块和子模块的内部结构和用途来命名模块和子模块,让布局决定其余部分。
我推荐 Jonathan Snook 在前端大师课程中开设的 SMACSS 新课程:https://frontendmasters.com/courses/smacss。我已经看完了所有内容,比他在原书中所做的要详细得多,这极大地帮助了我记得也有过的犹豫。
我正在重读 smacss(CSS 的可扩展和模块化架构)[https://smacss.com/],其中大部分内容对我来说都很有意义。
主要的事情之一是模块不需要知道它的上下文/环境的任何信息。即:它只是呈现它的内容,但不关心它是否包含在侧边栏或主要内容区域中。到目前为止,一切都很好。
这是否会扩展到一般规则,即模块永远不应自己定义边距,而应始终让它们的父级(用 smacss 的说法是 layouts
)决定 if/how 来设置它们?
如果您的模块在所有情况下都需要边距,(例如您有一些 div 带有边框和阴影并且您必须设置边距)您可以在模块中设置它。
如果你的模块边距是可选的(它可能是页眉或页脚中的链接列表,应该有顶部或底部边距),你应该使用 sub-class,比如 <div class="my-module my-module-top-gap"> some </div>
。所以你可以保持模块独立于上下文并修改它的外观。
我同意 Evgeniy 的观点,有时边距是模块特定的,如果它们是强制性的,例如为了正确呈现模块的阴影样式。
但在大多数其他情况下,我会提出一个友好的异议,并说边距 - 本质上是模块或布局边缘之间的间距 - 应该专门与布局一起驻留。
SMACSS 的底线是,模块应该能够插入到任何布局容器中,并可能填充该布局的整个 space(模块上没有 width/height 规则)并且没有任何布局边缘之间的意外间距。也就是说,布局决定了子模块的尺寸和定位。
这取决于所讨论的具体问题,但是如果例如您有多个模块驻留在一个布局中,并且它们之间需要间距,那么布局 div/sub-divs 将需要指定例如那些布局子列,这样无论列中插入哪些模块,它们都采用所需的布局间距。
最后,恐怕我也不会同意子模块的建议,例如"module-name-top-gap"。这将是反 SMACSS,因为您将朝着一个方向前进,即您根据特定的个人样式命名模块(例如,基本模块,除了 margin-top: 20px),这与内联样式相距不远。我们的想法是摆脱这种关系,仅根据模块和子模块的内部结构和用途来命名模块和子模块,让布局决定其余部分。
我推荐 Jonathan Snook 在前端大师课程中开设的 SMACSS 新课程:https://frontendmasters.com/courses/smacss。我已经看完了所有内容,比他在原书中所做的要详细得多,这极大地帮助了我记得也有过的犹豫。