Управление CSS с помощью Aurelia-CLI: каждое представление загружает другой файл CSS для принудительного применения на всем сайте, вызывая конфликты
У меня есть проект с 6 просмотров (HTML). Каждое из этих представлений имеет соответствующую модель представления (.js) и таблицу стилей только для этого представления (.css).
Aurelia-cli делает замечательную работу по бесплатному повторению моего файла и объединению всех файлов.js и.css в пару файлов, чтобы на них можно было ссылаться, уменьшая при этом время загрузки и размер страницы. Поэтому, если у меня есть папка welcome с welcome.html, welcome.js и welcome.css, я могу загрузить CSS для welcome.html следующим образом <require from="./welcome.css"></require>
и CSS будет введен в <head></head>
теги при загрузке страницы.
Проблема в том, что при переходе к следующему представлению правила CSS из welcome.html / welcome.css все еще находятся в пределах <head>
Таким образом, тег веб-страницы все еще применяется. После посещения всех 6 просмотров в моем приложении у меня теперь 6 <style>
теги в пределах <head>
отметьте все правила всех шести страниц, которые применяются на каждой странице, на которую я захожу, без выгрузки до тех пор, пока страница не будет обновлена. Излишне говорить, что после посещения пары страниц весь сайт становится беспорядочным мусором.
Так что мои вопросы
- Почему это особенность
- Я пропускаю лучшую практику здесь?
- Есть ли способ теперь загрузить CSS для страницы при посещении, выгрузить ее при удалении и загрузить новые страницы CSS на свое место?
Если бы у меня было 10-страничное приложение с глобальной таблицей стилей, начальной загрузкой, анимацией CSS и шрифтом awesome, в конце дня у меня было 14 конфликтующих стилей, постоянно внедряемых в html, в который встраивается остальная часть приложения.
Какие-либо предложения? Спасибо за чтение.
1 ответ
Столкнувшись с подобными ситуациями, экспериментируя долгие часы, я пришел к простому выводу: мне не нравится этот подход "везде вводить CSS-файлы". Разрешите мне немного поспорить об этом, пожалуйста.:)
В чем выгода?
- Мы уже создали комбинированную глобальную таблицу стилей с обычными вещами (начальная загрузка, font-awesome и т. Д.). Предположительно, это в главном разделе
index.html
, Конечно, потому что мы хотели бы иметь хороший экран-заставку, прежде чем приложение загрузится само. Даже в официальном скелетон-навигационном приложении - Еще одна причина, чтобы избежать
<require>
это его асинхронный характер, который дает нам небольшой (или нет) контроль над порядком загрузки CSS. Он идеально подходит для модулей / пользовательских элементов JS, но не для нескольких файлов CSS. - И наконец, есть эти другие
<require>
теги, размещенные в каждом представлении, просто чтобы сделать нашу и без того "простую" ситуацию еще более "простой".
Итак, не проще ли упаковать остальные таблицы стилей приложения в эту уже существующую глобальную таблицу стилей в явном порядке?
Мое предложение
У Aurelia-cli есть замечательная особенность, называемая генераторами. Вы можете расширить его функциональность, как вы хотите. Имея это в виду, вы можете создавать новые задачи для пользовательской предварительной / последующей обработки CSS и вставлять их в процесс сборки.
- Вы имеете полный контроль над процессом.
- Будет создан 1 минимизированный файл. Он будет содержать все в ожидаемом порядке загрузки CSS.
- Размер CSS-файла небольшого приложения составляет ~10-30 КБ, верно? Это не повредит.:)
Пару дней назад я создал небольшой проект, который также решает эту проблему: https://github.com/martonsagi/aurelia-custom-skeleton. Рабочая демоверсия здесь.
- В процессе сборки создается
base.css
из глобальных отделов, иapp.css
из пользовательских файлов CSS. Это для целей отладки. - Эти два файла объединены в
styles.min.css
, который развернут и упоминается вindex.html
, - Если вам нужно создать действительно исполняемое приложение без внешних файлов, у вас все еще есть возможность встроить эту 1 комбинированную таблицу стилей.