2012-07-03 59 views
6

我正在与我自己进行一场哲学辩论,讨论在样式表中放置媒体查询的最佳位置。我试图模块化构建CSS(如OOCSS或SMACSS等)。鉴于上下文,我看到两种选择:在哪里放CSS3媒体查询?

  1. 将所有媒体查询放在一起放在单独的样式表或主样式表的一部分中。
  2. 将媒体查询放在其基础对应项下。例如,如果我有一个名为“news-item”的模块,我可以将任何必要的媒体查询样式置于该模块的定义之下。

我倾向于后者,但这意味着我会有更多单独的媒体查询(每个逻辑块的CSS需要响应性调整)。

对此有何看法?

回答

0

如何使用媒体查询只加载设备特定样式

,如:

@import url(mydevice.css) this and (that); 

或:

<link rel="stylesheet" media="only this and (that)" href="mydevice.css" /> 

...如果你正在寻找的器件固有的调整作为主布局的一种“子主题”(只是覆盖一些属性),这对我也是有意义的。

+0

我敢肯定,我读的地方,这种方法比其在样式表的媒体查询慢了许多。 – SpaceBeers

0

通过Sass,可以更轻松地使用直接位于对应方下面的媒体查询。但是,如果你的CSS在你的模块中有很好的评论,我不觉得有什么问题可以放在下面的查询中,因为这很容易找到。

你最终会写更多的代码重新输入查询,但不是什么大不了的事。

1

方法#2对我更好。

当我是新手时,我正在使用方法#1 - 我一起写了我的媒体查询(在我的样式表的底部或另一个文件中)。

.header { ... } 
.news-item { ... } 
.footer { ... } 

/** 
* ... 
* 
* bla bla, imagine a huge amount of styles here 
* 
* ... 
*/ 

/** All style tweaks for screens < 1024px */ 
@media screen and (max-width: 1024px) { 
    .header { ... } 
    .news-item { ... } 
} 

这种方法有一些缺点。根据我的经验,最值得一提的是的可维护性很难。主要原因:.news-item逻辑分布在多个不相关的CSS行中。

后来自然,我决定把相关的风格放在一起。 方法2

/** Header's styles and media queries */ 
.header { 
    ... 
} 
@media screen and (max-width: 1024px) { 
    .header { ... } 
} 
@media screen and (max-width: 720px) { 
    .header { ... } 
} 

/** News-item's styles and media queries */ 
.news-item { 
    ... 
} 
@media screen and (max-width: 1024px) { 
    .news-item { ... } 
} 
@media screen and (max-width: 720px) { 
    .news-item { ... } 
} 

/** ... and so on */ 

然而,在这种方法中,重复的媒体查询max-width值全能看起来不足够的维护。我通过使用CSS预处理器(如SASS)解决了这个问题,它允许我用变量替换所有变量并定义它们一次。

为了提高可维护性并使这些定义更加优雅,我开始在媒体查询之上使用抽象。

如果您有兴趣了解更多信息,请read on my blog post :-)