: стиль хоста не применяется в angular6 - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь изменить цвет outline для mat-form-field.

 :host /deep/ .mat-form-field-appearance-outline :host /deep/ .mat-form-field-outline {
    color: white;
}

Это, однако, не работает.Использование :host, кажется, является проблемой, потому что следующее работает нормально:

/deep/ .mat-form-field-appearance-outline /deep/ .mat-form-field-outline {
    color: white;
}

Но если я не использую :host, этот стиль будет применяться и к другим компонентам.Я не уверен, почему :host не работает.

1 Ответ

1 голос
/ 06 июля 2019

проблема со следующим кодом - второй селектор :host. потому что он не может соответствовать ни одному элементу хоста после соответствия .mat-form-field-appearance-outline

:host /deep/ .mat-form-field-appearance-outline :host /deep/ .mat-form-field-outline {
    color: white;
}

при удалении второго селектора :host он работает таким образом, что применяет стили к текущему компоненту и всем его дочерним элементам. (кстати, второй /deep/ селектор также не нужен)

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

/deep/ .mat-form-field-appearance-outline /deep/ .mat-form-field-outline {
    color: white;
}

выше объяснены понятия здесь

Применение псевдокласса :: ng-deep к любому правилу CSS полностью отключает вид-инкапсуляцию для этого правила. Любой стиль с :: ng-deep применяется становится глобальным стилем. Для того, чтобы охватить указанный стиль к текущему компоненту и всем его потомкам, обязательно включите селектор хоста перед :: ng-deep. Если комбинатор :: ng-deep используется без селектора псевдо-класса: другие компоненты.

, поэтому, когда вы используете :host /deep/ в любом селекторе CSS, он выбирает элементы в текущем компоненте и его дочерних элементах. чтобы предотвратить его влияние на дочерние элементы, вы должны сделать свой селектор более конкретным, добавив пользовательский класс к элементам, которые хотите выбрать, и объедините его с селектором :host /deep/, таким образом;

:host /deep/ .redOutline.mat-form-field-appearance-outline .mat-form-field-outline {
    color: white;
}

и добавьте класс redOutline к mat-form-field элементам, которые вы хотите выбрать.

вот рабочая демоверсия https://stackblitz.com/edit/angular-qy7g4r

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...