При проверке следующих операторов 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 существует с целью расширения классов.
@Terry Я смотрю на варианты линтинга по умолчанию. Функция placeholder-in-extend включена. Я, конечно, могу выключить его, но мне хотелось бы знать причину, по которой они думают, что это плохо.
Это потому, что если вы не используете заполнители, вы фактически создаете новый класс, и компилятор должен разделять запятыми все его возможные комбинации. См .: thesassway.com/intermediate/understanding-placeholder-select ors






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