Что означает «@extend необходимо использовать с заполнителем%»?

При проверке следующих операторов SASS я получаю предупреждение @extend must be used with a %placeholder.

.reg-text {
  color: #202226;
  font-family: $font-page;
  font-size: 17px;
  line-height: 25px;
}

.reg-text-header {
  @extend .reg-text;
  font-weight: 600;
}

Что означает предупреждение и как его исправить. Афайк, .extend существует с целью расширения классов.

Это выглядит как совершенно законное использование @extend: вы уверены, что не используете какой-то вариант линтинга, который предписывает использование %placeholders вместе с @extend? См .: github.com/brackets-userland/brackets-sass-lint/blob/master/‌… или github.com/brigade/scss-lint/blob/master/lib/scss_lint/linte‌ r /… - я предполагаю, что ваш компилятор использует один из этих линтеров.

Terry 08.01.2019 02:14

@Terry Я смотрю на варианты линтинга по умолчанию. Функция placeholder-in-extend включена. Я, конечно, могу выключить его, но мне хотелось бы знать причину, по которой они думают, что это плохо.

AngryHacker 08.01.2019 02:38

Это потому, что если вы не используете заполнители, вы фактически создаете новый класс, и компилятор должен разделять запятыми все его возможные комбинации. См .: thesassway.com/intermediate/understanding-placeholder-select‌ ors

Terry 08.01.2019 02:40
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
13
3
3 787
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это относится к мнению, что использование @extend с обычными селекторами CSS - плохая идея.

Я лично согласен с этим мнением, но, тем не менее, это мнение. Использование @extend с любым типом селектора - это то, что позволяет спецификация Sass, поэтому я, возможно, свяжусь с разработчиками вашего линтера и попросу, чтобы терминология в вашей ошибке объяснила это.

Если вы используете @extend для расширения определения селектора, каждый раз, когда селектор расширяется, он компилируется в CSS, который включает ссылку на селектор каждый раз, когда используется ключевое слово @extend.

Если, однако, вы используете @extend с селекторами-заполнителями, начинающимися с % (так называемые «тихие классы»), функциональность будет в большей степени соответствовать передовой практике. Во-первых, любые неиспользуемые селекторы-заполнители даже не отображаются в окончательном CSS (отлично подходит для создания повторно используемых библиотек дизайна).

Например, если у вас есть блок многократно используемого содержимого в селекторе CSS, подумайте о его преобразовании для использования вместо него селектора заполнителя:

.reg-text {
    color: #202226;
    font-family: $font-page;
    font-size: 17px;
    line-height: 25px;
}

.reg-text-header {
    @extend .reg-text; // this is inefficient and causes specificity issues!
    font-weight: 600;
}

// Instead, do this:

%reg-text {
    color: #202226;
    font-family: $font-page;
    font-size: 17px;
    line-height: 25px;
}

div.your-actual-selector-on-the-page .reg-text {
    @extend %reg-text;
}

div.your-actual-selector-on-the-page .reg-text-header {
    @extend %reg-text; // This compiles much neater and doesn't get in the way of specificity.
    font-weight: 600;
}

Другие вопросы по теме