Лучший способ переопределить CSS плагина?
В настоящее время я использую специфичность CSS для переопределения стилей плагина. Я предпочитаю этот метод для редактирования плагина, так как он создает меньше проблем при обновлении.
Было бы удобно, если бы моя таблица стилей загружалась после плагинов, чтобы мне нужно было быть только таким же специфичным, а не более. Это сделало бы мои таблицы стилей намного красивее.
Как вы правильно заметили, наиболее элегантный подход — когда ваши CSS-переопределения загружаются после стилей, добавленных плагинами. Достичь этого довольно просто — нужно лишь убедиться, что ваш файл header.php
вызывает функцию wp_head()
до подключения вашей таблицы стилей:
<head>
<!-- здесь находится стандартная начальная разметка -->
<?php wp_head(); ?>
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" />
</head>

Плагины могут обрабатывать CSS несколькими способами.
- Лучший вариант: плагин ставит CSS в очередь и предоставляет возможность отключить его (отключите, скопируйте код CSS в свою таблицу стилей и наслаждайтесь);
- Хороший вариант: плагин использует хуки для функции, которая ставит стиль в очередь (отключите функцию, подключите свою с нужными изменениями);
- Обычный вариант: плагин ставит CSS в очередь напрямую. Смотрите Как убрать скрипт из очереди? (применимо и к стилям). Краткая версия — в будущих версиях WordPress появится функция для этого, а пока можно использовать
wp_deregister_*
. - Плохой вариант: плагин выводит CSS среди кучи другого кода. Тут нужно разбираться индивидуально...
В целом, на мой взгляд, лучше и проще отключать отдельные таблицы стилей и включать их в свою собственную, чтобы минимизировать проблемы и улучшить производительность (меньше файлов для загрузки).

Ещё один довольно элегантный способ — использовать специфичность CSS.
Итак, если в CSS плагина указано:
div.product div.images img {
......
}
вы можете определить в своём CSS:
body div.product div.images img {
......
}
Также смотрите ответ Майкла Радера на похожий вопрос.

Я сохраняю копию CSS плагина "not willing" в папку темы и импортирую его в CSS темы, добавив:
@import url('name-of-the-plugin-css.css');
конечно, заменяя название .css на то, которое я внедряю. Затем я изменяю копию CSS в папке темы и сохраняю её на сервер, как и с другими файлами. Ах да, иногда может потребоваться "закрепить" изменённые ID или классы, назначив им "!important".
Не знаю, соответствует ли это последним стандартам, но это не вредит и отлично работает.

В итоге я использовал !important для своего пользовательского CSS, и это переопределило стили плагина, с которым у меня были проблемы. Разработчик плагина использовал !important во всем CSS плагина, поэтому я не мог перезаписать стили без !important.
body {
font-family: "Open Sans", Arial, sans-serif !important;
font-weight: 300 !important;
}

Чтобы переопределить CSS плагина, который уже использовал специфичность и !important, я применил идентификатор для переопределения классов. Это немного упростило мой код. Конечно, это тоже не идеальное решение, так как оно работает только в том случае, если элементам назначены не только классы, но и идентификаторы.
Теоретически можно также использовать селекторы атрибутов. Однако я пока не проверял эту теорию на практике.

Чтобы переопределить CSS плагина, который уже использовал специфичность и !important, я применил идентификаторы для переопределения классов. Это немного упростило мой код. Конечно, это тоже не идеальное решение, так как работает только в случае, когда элементам присвоены не только классы, но и идентификаторы.
Теоретически можно также использовать селекторы атрибутов. Однако я пока не проверял эту теорию на практике.
