Как управлять активами таблицы стилей CSS в Rails 3.1? - PullRequest
23 голосов
/ 23 мая 2011

Я только изучаю новый конвейер ресурсов в Rails 3.1. Одна конкретная проблема, с которой я столкнулся, заключается в том, что Sprockets просто объединяет все найденные таблицы стилей CSS в одну массивную таблицу стилей. Я понимаю, почему это выгодно по сравнению с ручным объединением таблиц стилей и минимизацией для производства. Но я хочу иметь возможность выборочно каскадировать таблицы стилей вместо того, чтобы все правила смешивались вместе. Например, я хочу:

master.css

должен быть загружен всеми страницами в приложении Rails, но я хочу

admin.css только для загрузки страницами / представлениями в разделе администратора / пространстве имен.

Как я могу воспользоваться преимуществами того, что Rails 3.1 объединяет таблицы стилей и минимизирует их для производства, но также обладает прежней гибкостью, позволяющей загружать только определенные комбинации таблиц стилей для макета?

Или это нужно сделать, добавив класс в теги body в макетах-

body class = "admin"

А затем целевые правила стиля в зависимости от ситуации. Используя селекторы SASS, это может быть разумным решением.

Ответы [ 5 ]

8 голосов
/ 29 мая 2011

Вот как я решил проблему со стилем: (извините за Haml)

%div{:id => "#{params[:controller].parameterize} #{params[:view]}"}
    = yield

Таким образом, я начинаю все страницы, специфичные для .css.sass файлы с:

#post
  /* Controller specific code here */
  &#index
    /* View specific code here */
  &#new
  &#edit
  &#show

Таким образом, вы можете легко избежать любых столкновений.

Надеюсь, что это помогло некоторым.

2 голосов
/ 04 сентября 2011

У меня есть сообщение об этом на моем веб-сайте: Использование Rails 3.1, SCSS и конвейера ресурсов для разграничения ваших таблиц стилей

И посмотрите этот ответ на другой вопрос: Использование конвейера ресурсов Rails 3.1 для условного использования определенных CSS

Надеюсь, это поможет.

С наилучшими пожеланиями, Лассе

1 голос
/ 25 августа 2011

@ nathanvda: конечно ...

Мы используем несколько файлов макетов.Поэтому в нашем приложении / views / layouts вместо просто application.html.haml (мы используем HAML) мы фактически игнорируем макет приложения и используем 3 пользовательских макета:

admin.html.haml (раздел администратора)только просмотры)

зарегистрирован.html.haml (только зарегистрированные / авторизованные пользователи)

незарегистрированный.html.haml (только незарегистрированные / неподписанные пользователи)

В верхней части моего файла admin.html.haml у меня будут теги ссылок моей таблицы стилей на отдельный манифест admin.scss (мы используем SCSS).Этот манифест загрузит все необходимые подстили только для раздела администратора.Это позволяет нам определять правила только для раздела администратора, а также использовать общие стили.Например, мы используем jquery-ui на всем сайте, поэтому стили, связанные с jquery-ui, находятся в их собственной таблице стилей, и мы включаем их в манифесты для всех трех файлов манифеста css.

Это решение недать вам один файл CSS, который можно кэшировать, но в итоге вы получите 3 файла CSS, каждый из которых можно кэшировать.Это позволяет найти компромисс между производительностью и некоторой гибкостью при организации правил CSS, поэтому нам не нужно беспокоиться о коллизиях правил CSS.

0 голосов
/ 28 июня 2011

Я использую что-то вроде

application.html.erb «>

show.html.erb

content_for: body_id do page_specific_body_id конец

0 голосов
/ 24 мая 2011

То, как я это делал до сих пор, - это две отдельные папки a / и u /, где a / для представления администратора и u / для представления пользователя.Затем в макете я указываю на соответствующий файл application.css с assets / u / application.css (js).Немного боли от необходимости каждый раз перемещать автоматически сгенерированные файлы, но намного меньше, чем от необходимости каждого файла отдельно в манифесте.

...