我正在使用Rails 3.1构建我的第一个solo Rails应用程序.rc5.我的问题是,我想让我的网站有条件地呈现各种CSS文件.我使用的是Blueprint CSS,我试图让Sprocket/rails在大多数情况下渲染screen.css,只有打印时渲染print.css,只有从Internet Explorer访问站点时渲染ie.css.

不幸的是,application.css list 中默认的*= require_tree命令包含assets/stylesheets目录中的所有内容,并导致令人不快的CSS混乱.我目前的解决方法是一种蛮力方法,其中我单独指定了所有内容:

正在申请中.css:

*= require_self
*= require home.css
...
*= require blueprint/screen.css

在我的样式表Partial(HAML)中:

<!--[if lt IE 9]
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
![endif]-->
= stylesheet_link_tag "application"
= stylesheet_link_tag 'blueprint/print', media: 'print'
<!--[if lt IE8]]
= stylesheet_link_tag 'blueprint/ie'
![endif]-->
= javascript_include_tag "application"

这个不错,但是不是特别漂亮.我做了几个小时的搜索才走到了这一步,但我希望有一些我刚刚错过的更容易的方法来做这件事.如果我甚至可以有 Select 地呈现某些目录(不包括子目录),那么整个过程就不那么僵化了.

谢谢!

推荐答案

我发现了一种方法,通过仍然使用assets资源 管道,但将样式表分组,从而使其不那么僵硬,也不会成为future 的证据.它并不比您的解决方案简单多少,但是这个解决方案允许您自动添加新的样式表,而不必再次重新编辑整个 struct .

您想要做的是使用单独的 list 文件来拆分.首先,您必须重新组织您的app/assets/stylesheets文件夹:

app/assets/stylesheets
+-- all
    +-- your_base_stylesheet.css
+-- print
    +-- blueprint
        +-- print.css
    +-- your_print_stylesheet.css
+-- ie
    +-- blueprint
        + ie.css
    +-- your_ie_hacks.css
+-- application-all.css
+-- application-print.css
+-- application-ie.css

然后编辑三个 list 文件:

/**
 * application-all.css
 *
 *= require_self
 *= require_tree ./all
 */

/**
 * application-print.css
 *
 *= require_self
 *= require_tree ./print
 */

/**
 * application-ie.css
 *
 *= require_self
 *= require_tree ./ie
 */

接下来,更新应用程序布局文件:

<%= stylesheet_link_tag "application-all", :media => "all" %>
<%= stylesheet_link_tag "application-print", :media => "print" %>

<!--[if lte IE 8]>
    <%= stylesheet_link_tag "application-ie", :media => "all" %>
<![endif]-->

最后,不要忘记将这些新的 list 文件包括在您的配置/Environment/Production.rb中:

config.assets.precompile += %w( application-all.css application-print.css application-ie.css )

更新:

正如麦克斯指出的,如果你遵循这个 struct ,你必须注意图像引用.你有几个 Select :

  1. Move the images to follow the same pattern
  2. Qualify the image path:
  3. Use the SASS helper:
    • background: image-url('image.png');

Css相关问答推荐

在react native中应用阴影

VueJS CSS动画不会扩展到v-card/v-col之外

如何在JavaFX中设置分隔符的样式?

如果`line-Height:1`,则垂直字母所占的高度

.NET 8 预览版 6 中不使用新项目模板提供 Blazor CSS 文件

当弯曲方向设置为列时如何制作等高卡片?

将重复的线性渐变锚定到元素的顶部

flex-wrap 导致 children 身高加倍

如何在变量中插入 SCSS 变量?

react 样式的条件类名称设置

如何在 Angular 中使用 CSS 设置 FontAwesome 图标的大小?

Adobe Illustrator 删除我在 svg 图像上的类名.我怎样才能防止这种情况?

在样式化组件中使图像重叠

使用 HTML 和 CSS 滚动表格

数据协议 URL 大小限制

如何在 Chrome 的判断器中添加/插入之前或之后的伪元素?

使用 inline-block 换行?

名称-值对的语义和 struct

如何仅在一侧设置 CSS 边框?

我应该在我的 Bootstrap 项目中使用 normalize.css 吗?