Как я могу извлечь только используемый CSS на данной веб-странице и объединить его в отдельную таблицу стилей?
У меня есть сайт, чьи таблицы стилей становятся подавляющими, а полные 50% -90% или около того не используются на определенных страницах. Вместо 23 отдельных блокирующих CSS-листов я бы хотел узнать, какие из них используются на странице, на которую я хотел бы настроить таргетинг, и экспортировать их в один лист.
Я видел несколько вопросов, которые рекомендуют "Dust me selectors" или аналогичные дополнения, на которых будут указаны, какие селекторы используются и которые не используются; но это не то, что я хочу. Мне нужно иметь возможность экспортировать все используемые стили из всех листов для этой конкретной страницы в один новый лист, который можно использовать для замены 23 других. Решение должно иметь возможность поддерживать отзывчивый веб-сайт (медиазвонки). Страница веб-сайта, на которую я нацелен, - это http://tripinary.com.
Я нашел: https://unused-css.com, но это платная услуга, и мне нужно бесплатно;
Следующая ближайшая вещь, с которой я столкнулся, - http://www.csstrashman.com/, но это не смотрит на таблицы стилей. Фактически, он полностью игнорирует их, и в конечном итоге у меня возникают проблемы с отзывчивостью сайта. Много раз, этот сайт просто падает.
Я не против программного решения, если кто-то должен был сделать это раньше и может рекомендовать направление.
Ответы
Ответ 1
(удалил мой комментарий в ответ RwwL, чтобы сделать его тщательным ответом)
UnCSS, будь то node.js или как задача grunt или gulp, может перечислить используемые правила CSS массивом страниц в массиве Media Queries.
uncss: https://github.com/giakki/uncss
grunt-uncss: https://github.com/addyosmani/grunt-uncss
gulp -uncss: https://github.com/ben-eb/gulp-uncss
многостраничный:
Вы можете передать files
в качестве аргумента для любого из трех плагинов, например:
var files = ['my', 'array', 'of', 'HTML', 'files'],
options = { /* (…) */ };
uncss(files, options, function (error, output) {
console.log(output);
});
Избегайте:
URL-адреса (массив):
массив URL-адресов для загрузки с помощью Phantom (поверх файлов, уже прошедших, если они есть).
ПРИМЕЧАНИЕ. Эта функция устарела, вы можете передавать URL-адреса непосредственно в качестве аргументов.
Запросы на средства массовой информации и учитываются:
media (массив):
По умолчанию UnCSS обрабатывает только таблицы стилей с медиа-запросом "все", "экран" и те, у кого нет. Укажите здесь, какие другие включить.
Вы можете добавлять таблицы стилей, игнорировать некоторые из них, добавлять встроенные CSS и многие другие параметры, такие как htmlroot
Остальные проблемы:
1/ Условные классы, если вы используете их для IE9-. Очевидно, что они не будут сопоставлены в среде WebKit PhantomJS!
HTML:
<!--[if IE 9]><html class="ie9 lte-ie9" lang="en"><![endif]--> <!-- teh conditional comment/class -->
CSS:
.ie9 .some-class { property: value; ] /* Only matched in IE9, not WebKit PhantomJS */
Должны ли они добавляться вручную или script в элемент html
в тестовой среде? (то, как это делает, не имеет значения)
Есть ли опция в uncss?
Пока вы не используете стиль :not(.ie9)
(странный), это должно быть хорошо.
EDIT: вы можете использовать опцию игнорировать с шаблоном чтобы заставить uncss "предоставить список селекторов, которые не должны удаляться UnCSS" . Не будет проверено.
2/ Скрипты, которые будут определять разрешение (ширина видового экрана) и адаптировать к нему контент, удаляя/добавляя его или добавляя класс в контейнер. Они будут выполняться в PhantomJS в разрешении рабочего стола, я думаю, и поэтому не буду выполнять свою работу, поэтому вам нужно будет изменить вызовы на PhantomJS или что-то в этом роде... Или загляните в опции или проблемы GitHub из трех проектов (я не " т)
Другие инструменты, о которых я слышал, не тестировались или едва или не могли протестировать, не знаю о части MQ:
- в grunt-uncss readme, часть покрытия
- ucss из Opera (там уже есть ответ, не удалось заставить его работать)
- Гелий
- CSSESS
- mincss
У Адди Османи есть бесчисленные презентации с более чем 100 слайдами, в которых представлены такие потрясающие инструменты, как этот: https://speakerdeck.com/addyosmani/automating-front-end-workflow (вы пожалеете еще больше, что дни сделаны только из 24 часов, а не 48 err wait 72 ^^)
Ответ 2
Как насчет Плагин использования CSS для Firebug?
Шаги:
- Посетите свою страницу в Firefox
- Вкладка "Использование CSS" в Firebug
- Нажмите кнопку "Сканировать"
- Нажмите жирное имя файла
- Сохранить страницу селекторов CSS на диск
Вот несколько снимков экрана и пройдите. Не уверен насчет медиа-запросов или если он будет работать на вашем сайте, и он, вероятно, не сохранит -webkit
и т.д., Но, возможно, он поможет вам в этом.
Ответ 3
Opera Software выпустила сканер CSS в Github, который утверждает, что может найти неиспользуемые и дублирующие селектора. Это может сделать трюк, если вам удобно использовать инструмент командной строки. https://github.com/operasoftware/ucss
Ответ 4
Вы можете проверить в Google Chrome, выполнив проверку элемента (F12). В неиспользуемом CSS есть строка над тегами.
Ответ 5
Если вы хотите, вы можете попытаться создать script, который выполняется на (непроизводственном) сервере, который проходит через каждое правило css, удаляет его из таблицы стилей, загружает страницу с помощью чего-то вроде phantomjs и проверяет на см., если что-либо изменилось с момента последнего загрузки страницы. Если это так, то верните правило css, если нет, затем оставьте его и перейдите к следующему правилу. Это займет некоторое время, но это сработает. Вам также потребуется настроить экземпляр вашего сервера, который не использует кеширование для его запуска.
Ответ 6
Попробуйте использовать этот инструмент, который представляет собой простой js-скрипт https://github.com/shashwatsahai/CSSExtractor/. Этот инструмент помогает получить CSS с определенной страницы, содержащей список всех источников для активных стилей, и сохранить его в JSON с источником как Ключ и правила как ценность. Он загружает весь CSS из ссылок href и сообщает все стили, примененные к ним. Вы можете изменить код, чтобы сохранить все CSS в файле .css. Тем самым объединяя все ваши CSS.