Как найти неиспользуемые / неприменимые правила CSS в таблице стилей?


18

У меня есть огромный файл CSS и файл HTML. Я хотел бы узнать, какие правила не используются при отображении файла HTML. Есть ли инструменты для этого?

Файл CSS развивался в течение нескольких лет, и, насколько я знаю, никто ничего не удалял из него - люди просто снова и снова писали новые основные правила.

РЕДАКТИРОВАТЬ: было предложено использовать селекторы Dust-Me или инструмент производительности веб-страницы Chrome. Но они оба работают на уровне селекторов, а не на отдельных правилах. У меня есть много случаев, когда правило внутри селектора всегда переопределяется - и это то, от чего я в основном хочу избавиться. Например:

body { color: white; padding: 10em; }
h1 { color: black; }
p { color: black; }
...
ul { color: black; }

Весь текст в моем HTML находится внутри какого-то элемента-обертки, поэтому он никогда не бывает белым. bodyПадение всегда работает, поэтому, конечно, весь bodyселектор не может быть удален. И я бы тоже хотел избавиться от таких бесполезных правил.

РЕДАКТИРОВАТЬ: И еще один случай бесполезного правила: когда оно дублирует существующее, ничего не меняя:

a       { margin-left: 5px; color: blue; }
a:hover { margin-left: 5px; color: red; }

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

РЕДАКТИРОВАТЬ: Я ценю все ответы, но, к сожалению, инструменты, которые вы предложили, не сделали никаких полезных предложений. Я проголосовал за ваши ответы, но я буду ждать инструмента, который делает вещи более детально, как указано выше.

Спасибо,


Вы можете использовать отсутствие подходящего инструмента как возможность: поскольку вы понимаете, что вам нужно, вы можете стать лучшим человеком, который создаст такой инструмент. Вы можете проверить код существующих инструментов на предмет идей и приемов, а затем создать что-то, что работает на уровне правил, а не селектора. Ваш шанс на славу и удачу! ... ну, может быть, просто слава;)
иконоборца

@ Брэндон: этот вопрос только что попал в отметку «заметный вопрос» ... так что вы можете быть правы :-)
liori

Ответы:


8

Расширение Dust Me Selecters Firefox

В Инструментах разработчика Chrome вы можете использовать инструмент Производительность веб-страницы, чтобы найти неиспользуемые правила CSS.


Отлично, я проверю это прямо сейчас!
Лиори

Эти инструменты могут удалить только ненужные селекторы. Я уточнил свой вопрос.
Лиори

2
@liori: Я не думаю, что это возможно. В вашем примере с полями второе правило полей может показаться излишним, но оно имеет более высокую специфичность и может переопределить более позднее правило. Например, если у класса .abcдругой запас, <a class="abc">я думаю , что изменился бы его запас при наведении. Теперь это, вероятно, не то, что вы намереваетесь, но это, безусловно, может быть, и вы не можете слепо удалить это дублирующее правило.
Рассерженная шлюха

@DisgruntledGoat: Я думаю о случае закрытого мира: если он не указан, он не существует. Поэтому, если a.abcв HTML нет определений или <a class="abc"/> нигде нет, он не существует. Во всяком случае, я уже закончил задачу, которая побудила меня задать этот вопрос здесь, и я закончил с применением много эвристики. Я попробовал Chrome Developer Tools, но они мне не сильно помогли.
Лиори

5

Вы также можете взглянуть на Unused-CSS.com. Этот инструмент изучит ваши страницы и создаст оптимизированные CSS-файлы без неиспользуемых селекторов.


4

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


2

Проверьте uncss, это модуль узла.

«UnCSS - это инструмент, который удаляет неиспользуемый CSS из ваших таблиц стилей. Он работает с несколькими файлами и поддерживает внедренный Javascript CSS».

https://www.npmjs.com/package/uncss

Редактировать после комментария:

Я думаю, что вы просите две разные вещи:

  1. Удалите неиспользованные правила автоматически, это то, что uncss может сделать для вас. Я также сделал этот инструмент CSS пока, но он не автоматический, как вы спрашиваете: https://www.npmjs.com/package/css-byebye

  2. Оптимизируйте таблицу стилей, где правила могут быть объединены / упрощены.

В этом случае я бы порекомендовал два инструмента, которые делают такие вещи:

Они делают более или менее одинаковые оптимизации, иногда один имеет лучшие результаты, чем другой, а иногда наоборот. Это зависит от вашей таблицы стилей. (вы могли бы бегать один за другим тоже: P)

Я использую их как часть процесса сборки с grunt. Так что на самом деле это не визуальная вещь, как вы просите, но они выполняют ту оптимизацию, которую вы хотите.

Вот что они говорят о CSSO (полная информация здесь: https://en.bem.info/tools/optimizers/csso/ )

Структурные оптимизации:

  • Объединение блоков с одинаковыми селекторами
  • Объединение блоков с одинаковыми свойствами
  • Удаление переопределенных свойств
  • Удаление переопределенных сокращенных свойств
  • Снятие повторяющихся селекторов
  • Частичное объединение блоков
  • Частичное расщепление блоков
  • Удаление пустого набора правил и правил
  • Минимизация полей и отступов

Судя по главной странице, он работает на уровне селектора. Может ли он на самом деле удалить правила в двух примерах, которые я упомянул в вопросе?
Лиори

Я отредактировал свой ответ. Я протестировал ваш первый пример с веб-интерфейсом CSSO: result: body {color: #fff; padding: 10em} h1, p, ul {color: # 000}
Kev

1

@John: отличный инструмент, спасибо за ссылку

@liori: Я бы также порекомендовал плагин Firefox Web Developer, который позволяет вам отображать имена / свойства элементов, редактировать CSS в реальном времени (не записывает в ваш файл CSS), чтобы вы могли редактировать и тестировать изменения CSS без ошибок. необходимости сохранять и загружать свой CSS каждые 3 секунды. + загружает больше функций.

Есть также очень хороший инспектор DOM, который подключается к Firebug, который также подключается и отлично подходит для сортировки Javascript.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.