为了利用缓存、标记和设计的分离以及更好的概览等优点,最佳实践是将所有样式放在外部CSS文件中。
然而,我通常会遇到这样的问题:元素应该看起来相同,即具有相同的类,但由于构成差异需要在位置上不同,例如需要由于组合差异需要不同的边距或填充。
我想到了三个选项:
选项1:将外观样式与位置样式(边距/填充)分开,将它们放在单独的类中,根据需要进行组合。
.myClass { ...; }
.myClass.top { margin-top: 20px; }
.myClass.inside { margin: 10px 0px; }
.myClass.bottom { margin-bottom: 20px; }
选项2:复制类,相应地重命名并将每个差异保留在自己的类中。
.myClassTop { ...; margin-top: 20px; }
.myClass { ...; margin: 10px 0px; }
.myClassBottom { ...; margin-bottom: 20px; }
选项 3:使用内联样式声明不同的边距/填充。
<div class="myClass" style="margin-top: 20px;">
<div class="myClass">
<div class="myClass" style="margin-bottom: 20px;">
拥有
.myClass { ...; margin: 10px 0px; }
我的常识告诉我要使用选项1,并根据父/子结构级联差异。但这通常会变得非常混乱,尤其是对于阅读CSS的其他开发人员而言。因此,我尝试了选项3(只有一些外部margin/padding),这似乎效果不错。
我仍然感到有些奇怪的压抑感。有很多人告诉我不要使用内联样式。通常我会说“无论哪种方式都行”,但最近我意识到内联margin/padding可能会对网站的渲染过程产生影响,导致“跳动块”。我不确定这个效果是否真的是由于样式处理顺序引起的,还是其他一些讨厌的事情发生了,我猜。
有什么建议吗?
.myClass
元素中的第一个进行不同的样式设置,则可以选择使用div.myClass:first-child
。或者,可能是h1 + div.myClass
(假设它跟在一个h1
元素后面)。 - David Thomas