Проблема
Документация поддержки Microsoft IE объясняет, что в Internet Explorer 6-9:
- Все теги стиля после первых 31 тегов стиля не применяются.
- Все правила стиля после первых 4095 правил не применяются.
- На страницах, которые используют правило @import для непрерывного импорта внешних таблиц стилей, которые импортируют другие таблицы стилей, таблицы стилей, содержащие более трех уровней, игнорируются.
Существует много свидетельств этой проблемы с script demos. См. Также Bless.
Необходимое решение
Нам нужен способ разделить скомпилированные таблицы стилей, созданные Sprockets в конвейере активов, чтобы сохранить максимальный селектор ниже 4096 и связать их с HTML в развернутом Rails-приложении. Как мы можем передать скомпилированный вывод обработанных активов (в частности, таблиц стилей) в качестве аргумента для метода, который может затем модифицировать файлы?
См. приведенные ниже попытки начать создание места. Если кто-то может помочь мне найти способ сделать либо оперативное (или совершенно новое решение), это будет фантастично!
Существующие попытки решения
-
Bless был создан для решения этой проблемы путем разделения таблиц стилей, чтобы сохранить максимальное количество селекторов на листе под лимитом, Bless запускается на сервере в node.js. Я еще не видел эквивалент Ruby. Эрик Филдс пытался обслуживать активы, скомпилированные с компасом, для Bless (работает в node), но это решение зависит от компиляции активов Compass и таким образом, похоже, не работает с конвейером активов. Обратите внимание, что вместо привязки к нескольким таблицам стилей Bless добавляет операторы
@include
к первому листу, что может быть способом сделать так, чтобы не касаться разметки. -
Когда Christian Peters (@crispy) обнаружил эту проблему, он реализовал splitter, например Bless, который также передал вывод Compass в пользовательский модуль, который отлично работал перед Rails 3.1. Позже он адаптировал свой сплиттер с помощью SprocketsEngine для интеграции с конвейером Rails Asset. Я пробовал реализовать новый код, но он не работает автоматически (хотя сплиттер отлично работает при вызове вручную в консоли).
Дополнительная информация
Дополнительные сведения о ограничениях CSS в IE 6-9 см. в следующих связанных вопросах: