Как переопределить стили md-input-container в angular2?

У меня есть следующий фрагмент кода для md-input-container с использованием углового материала:

<md-input-container>
      <input mdInput [placeholder]="'common.password' | translate" type="password" formControlName="password" (change)="onPasswordChange($event.target.value)" required validate-onBlur/>
      <md-hint *ngIf="frmLoginInfo.controls.password.pristine" class="s-text-caption s-hint">{{ 'signup.pwdRule' | translate }}</md-hint>
</md-input-container>

В этом контейнере есть div внутри класса (mat-input-wrapper), у которого есть отступ padding-bottom: 1.296875em.

Как изменить этот стиль заполнения контейнера?

PS: Добавление класса в контейнер и установка padding: 0px как important также не работает.

введите здесь описание изображения


person Shruti Agarwal    schedule 24.07.2017    source источник
comment
.mat-input-wrapper { padding-bottom: 0px !important;} должно работать   -  person sTx    schedule 24.07.2017
comment
да @sTx, хотя это изменит все экземпляры .mat-input-wrapper на 0 отступов   -  person 0mpurdy    schedule 24.07.2017
comment
поэтому вы должны добавить id или class для родительского элемента, как @ 0mpurdy сказал в своем ответе, и указать как #parent > .mat-input-wrapper{....}   -  person sTx    schedule 24.07.2017


Ответы (4)


Обновлять

Официальный ответ от Angular по поводу /deep/ или >>> (Спасибо @DeborahK)

Поддержка эмулированного / глубокого / CSS-селектора (комбинатор потомков Shadow-Piercing aka >>>) устарела, чтобы соответствовать реализациям браузера и намерениям Chrome удалить. :: ng-deep был добавлен, чтобы предоставить временное решение для разработчиков, которые в настоящее время используют эту функцию.

От: http://angularjs.blogspot.co.uk/2017/07/angular-43-now-available.html

Другой связанный вопрос


Добавьте к компоненту более конкретный стиль - см. Специфику CSS

html

<md-input-container id="forceStyle">
    <input mdInput [placeholder]="'common.password' | translate" type="password" formControlName="password" (change)="onPasswordChange($event.target.value)" required validate-onBlur/>
    <md-hint *ngIf="frmLoginInfo.controls.password.pristine" class="s-text-caption s-hint">{{ 'signup.pwdRule' | translate }}</md-hint>
</md-input-container>

css

>>> #forceStyle .mat-input-wrapper {
  padding-bottom: 0px;
}

Вам понадобится >>>, как описано здесь

Однако /deep/ и >>> устарели, как объяснено здесь

введите здесь описание изображения

Живой пример плунжера

person 0mpurdy    schedule 24.07.2017
comment
Спасибо за помощь, но это тоже не работает ... После проверки элемента в инструменте разработчика Chrome я не могу увидеть примененные стили. - person Shruti Agarwal; 24.07.2017
comment
@ShrutiAgarwal - этот пример должен работать с небольшим изменением: #forceStyle.mat-input-wrapper - после того, как я увидел ваш экран - person sTx; 24.07.2017
comment
Я обновил ответ исправлением и живым демонстрационным примером, хотя имейте в виду, что /deep/ устарел - см. Альтернативы в проблеме GitHub, которую я связал. - person 0mpurdy; 24.07.2017
comment
Я думаю, что deep нет необходимости, просто более конкретная цель - person sTx; 24.07.2017
comment
@ShrutiAgarwal - убедитесь, что вы очистили кеш, даже обслужите приложение снова, потому что иногда изменения не загружаются - person sTx; 24.07.2017
comment
Как использовать / deep / в моем коде? это ошибка выдачи. Могу ли я тоже что-то изменить в HTML? - person Shruti Agarwal; 24.07.2017
comment
просто добавьте его перед стилем, не забудьте пробел между ним и идентификатором - вы можете увидеть пример в опубликованной мной ссылке на плункер - person 0mpurdy; 24.07.2017
comment
Я использую scss, и это дает мне ошибку, говорящую о ожидаемом правиле или селекторе - person Shruti Agarwal; 24.07.2017
comment
Похоже, у вас эта проблема, используйте >>> вместо /deep/ - person 0mpurdy; 24.07.2017

HTML

<div id="wrapper">
  <md-input-container>
     <input mdInput [placeholder]="'common.password' | translate" type="password" formControlName="password" (change)="onPasswordChange($event.target.value)" required validate-onBlur/>
      <md-hint *ngIf="frmLoginInfo.controls.password.pristine" class="s-text-caption s-hint">{{ 'signup.pwdRule' | translate }}</md-hint>
  </md-input-container>
</div>

CSS

#wrapper .mat-input-wrapper{padding-bottom: 0px !important;}

Важно .mat-input-wrapper должен быть дочерним по отношению к wrapper - из вашего примера я не знаю, откуда взялся этот класс


Я думаю, что после обновления вашего сообщения должно работать следующее: #forceStyle > .mat-input-wrapper{padding-bottom: 0 !important} - должно работать даже без important, но на всякий случай.

Убедитесь, что вы очистили кеш и даже перезапустите приложение, потому что иногда изменения не загружаются

person sTx    schedule 24.07.2017
comment
Я очистил кеш и перезапустил приложение. Не сработало. - person Shruti Agarwal; 24.07.2017
comment
Это так странно .... можете ли вы задать стиль #forceStyle полям, рамкам, чему угодно и проверить, видите ли вы это в инспектировании? - person sTx; 24.07.2017
comment
Да, я добавил к нему границу, и она будет добавлена. - person Shruti Agarwal; 24.07.2017
comment
теперь попробуйте #forceStyle > div{padding-bottom: 0 !important} - person sTx; 24.07.2017
comment
Этот стиль не применяется - person Shruti Agarwal; 24.07.2017
comment
Позвольте нам продолжить это обсуждение в чате. - person sTx; 24.07.2017

Попробуй это:

<div class="box-model"> 
       <md-input-container fxFlex="auto" class="custom-search-mdinput">
         <input mdInput [placeholder]="'common.password' | translate" type="password" formControlName="password" (change)="onPasswordChange($event.target.value)" required validate-onBlur/>
         <md-hint *ngIf="frmLoginInfo.controls.password.pristine" class="s-text-caption s-hint">{{ 'signup.pwdRule' | translate }}</md-hint>
        </md-input-container>
</div>

@Component({
    selector: "dashboard",
    templateUrl: "dashboard.component.html",
    styles: [`.box-model .mat-input-wrapper {
        margin: 0px !important;
        padding-bottom: 0px !important;
    }`
    ],
person Vignesh    schedule 24.07.2017
comment
Позвольте нам продолжить это обсуждение в чате. - person Vignesh; 24.07.2017

Используйте deep для укладки

/deep/ .mat-input-wrapper { 
  padding-bottom: 0px ;
}
person jaseelmp    schedule 25.07.2017