Правильный способ вызова медиа-специфичных CSS в конвейере ресурсов Rails 3.1 - PullRequest
20 голосов
/ 20 февраля 2012

Каков правильный / rails / наилучший способ вызова css для конкретных носителей (т. Е. Print, screen и т. Д.) При использовании конвейера ресурсов Rails 3.1? Я знаю, что об этом уже спрашивали, но все решения, которые я видел, кажутся очень хакерскими, а не элегантным решением Rails, которое я ожидал.

Насколько я могу судить, предлагаемый подход заключается в настройке папки таблиц стилей следующим образом:

assets
-stylesheets
--application.css
--application-print.css
--print
---custom-print.css
--screen
---custom-screen.css

содержимое application.css равно

/*
*= require_self
*= require_tree ./screen
*/

содержимое application-print.css равно

/*
*= require_self
*= require_tree ./print
*/

затем включить следующее в макет

<%= stylesheet_link_tag 'application', media = 'screen, projection' %>
<%= stylesheet_link_tag 'application-print', media = 'print' %>

Хорошо, пока все хорошо.

НО, в моем случае custom-print.css применяется на экране, а css не применяется к выводу на печать.

Кроме того, этот подход, похоже, влияет на изображения, вызываемые из css. то есть вместо поиска изображений в ресурсах / изображениях, теперь он ищет изображения в ресурсах / таблицах стилей / экране. Здесь может происходить что-то еще, так как это затрагивает только javascript css. Я сделаю еще несколько проверок и доложу.

Итак, мой вопрос: как вы относитесь к css для конкретных медиа в конвейере ресурсов Rails? Что считается лучшей практикой? И что я делаю не так?

Спасибо за ваше время!

1 Ответ

16 голосов
/ 20 февраля 2012

Проблема в синтаксисе вызова метода.

stylesheet_link_tag 'application', :media => 'screen, projection'
stylesheet_link_tag 'application-print', :media => 'print'

В вашем коде вы присваивали локальную переменную с именем media

...