如何共享常见的CSS样式



在我的页面上,我有几个块(div)具有相同的样式关于backgroundborder(菜单面板,信息面板,页脚面板,…)。

现在我想只写一次样式,而不是为每个面板重复它。然而,我看不出有什么舒服的办法。


我研究的一种方法是引入一个专门的类(例如panelClass)来捕获常见的面板样式。然后在(X)HTML中,我只需将该类添加到应该是面板的每个元素中。

但这感觉不对。毕竟,我将在(X)HTML中"揭示实现"。我不再能够透明地轻松地更改内容,因为这需要修改(X)HTML。

更不用说它引入了类的顺序问题(因此,如果需要的话,CSS属性将按照顺序被覆盖)。

EDIT:(对kolin回答的扩展解释)

通过"揭示实现",我的意思是(X)HTML("内容")与CSS("表示")的联系比我希望的要紧密得多。也许我在追求一个遥不可及的理想(甚至可能是一个虚幻的或虚拟的!),但我试图保持"内容"与"呈现"分开。

因此,有一个类menu并不坏,因为它描述的是"内容"而不是"表示"。而使用像menu box bordered left_column这样的类(我从引用的文章和该网站上的其他一些文章中了解到)是不好的,因为它将表示与内容混合在一起。一旦您开始添加这样的类,您很可能直接将CSS添加到style属性中。这肯定会带来更多的工作量和不可维护的结果,但从概念上(当涉及到内容-表示分离时),这不会有什么不同。

现在我确实意识到,在现实生活中,对于真实的页面(丰富而漂亮),几乎不可能将内容与表示完全分开。但你至少可以(应该?)尝试。

再看看文章末尾的"But"。单一职责原则应用于CSS。在我看来,他使用的island类已经是表示性的,因为它不描述内容。它描述了如何表现它。一旦你看到他是多么广泛地使用(或者可能已经使用了)这个类来处理那些与内容没有任何共同之处的元素,你就会立刻明白这一点。

结束编辑


另一种方法是使用选择器分组。所以我要写:

#menu, #info, #footer {
  background: /* ... */
  border: /* ... */
}

这避免了修改(X)HTML的需要。但仍然会引起秩序问题。这也使得对样式进行逻辑分组变得困难。特别是当它们分布在许多文件中时。


我认为我真正想要的是能够命名一组属性并在选择器中导入它们。比如c++中的#include。有什么办法可以做到这一点吗?我对此表示怀疑,但也许……

如果没有,还有其他方法吗?

使用类来定义样式是正确的方法。

我研究的一种方法是引入一个专用类(例如panelClass)来捕获常见的面板样式。然后在(X)HTML中,我只需将该类添加到应该是面板的每个元素中。

对我来说,这正是我要做的。

但这感觉不对。毕竟,我将在(X)HTML中"揭示实现"。

显示实现是否存在安全问题?

来自Harry Roberts的一些精选帖子:

http://csswizardry.com/2012/04/my-html-css-coding-style/

http://csswizardry.com/2012/04/the-single-responsibility-principle-applied-to-css/

http://csswizardry.com/2012/05/keep-your-css-selectors-short

我发现他使用CSS的风格令人大开眼界,它可能会帮助你

根据你的更新,我同意你的观点,你应该尝试将结构与表示分开,尽管有时我们不能完全管理它。这是否完全可能,我不知道。

我部分不同意island类,填充属性对我来说有点徘徊在结构和表示的边界上。结构是因为它改变了它所应用的任何元素的布局,表现性是因为填充改变了它在页面上的外观。

在理想情况下,您不应该需要包含menu box bordered left_column的类属性,因为您将编写两个将结构和表示分开的类。

考虑到您的情况,我可能会创建一个面板类.panel {保证金:10 px 0;填充:10 px;显示:块}

和面板显示类

.panel-display {background - color: # 1111 e4}.panel-display> a{颜色:# fff}

通过这种方式,我可以在不影响站点结构的情况下摆弄演示文稿。(注:我不确定这是否对你有帮助!

最新更新