Правильный способ заполнения и удаления полей из mat-form-field

#css #angular #layout #angular-material

#css #угловой #макет #angular-материал

Вопрос:

Я пытаюсь выполнить встроенную функцию редактирования для имени и фамилии в профиле пользователя. Мой макет выглядит так:

Как я ожидаю, что это будет выглядеть

Однако, когда я переключаюсь с использования стандартного тега ввода на использование mat-form-field (например, я хотел бы использовать для material), данные пользователя в конечном итоге выглядят так:

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

Я пытался использовать различные CSS, чтобы попытаться установить это на место, но я не могу вернуть все обратно в строку сведений о пользователе.

Проверяя это в инспекторе, я вижу, что используется класс .mat-form-field-infix, но я не могу переопределить свойства заполнения и верхней границы, которые он содержит. Я не уверен, как подойти к изменению элементов mat-X, поскольку кажется, что материал больше предназначен для сохранения вещей по мере их поступления.

Мне бы понравились некоторые идеи.

HTML

 <div fxLayout="column">
    <div fxLayout="row"><span>{{user?.email}}</span></div>
        <div fxLayout="row">
            <div fxLayoutAlign="space-between">
                <form [formGroup]="formGroup">
                    <mat-form-field>
                        <input matInput
                               formControlName="firstName"
                               value="{{user?.firstName}}"/>
                    </mat-form-field>
                    <mat-form-field>
                        <input matInput
                               formControlName="lastName"
                               value="{{user?.lastName}}"/>
                    </mat-form-field>
                </form>
            </div>
            <div>
                <button *ngIf="!edit" mat-icon-button (click)="editClicked()">
                    <mat-icon matTooltip="Edit User">edit</mat-icon>
                </button>
            </div>
        </div>
    </div>
  

CSS

Комментарии:

1. можете ли вы сделать stackblitz.com об этом .. будет гораздо легче ответить

2. @maxkart Я пытался это сделать, но есть некоторая ошибка между версиями stackblitz и моего пакета. Мой вопрос довольно специфичен для mat-form-field и как его стилизовать, поэтому, если вы хотите посмотреть, как это выглядит, попробуйте сделать небольшой пример.

Ответ №1:

Вот как удалить заполнение по умолчанию в mat-form-field :

в вашем глобальном styles.css добавьте это правило:

 .mat-form-field-no-padding .mat-form-field-wrapper {
  margin-bottom: -1.25em;
}
  

теперь mat-form-field добавьте этот класс mat-form-field-no-padding

Комментарии:

1. К сожалению, это не внесло никаких изменений в мой макет. Я все еще думаю, что это должно быть на .mat-form-field-infix

2. Это то, что сработало для меня. Дело в том, что вам нужно переопределить его в глобальном файле css, а не в шаблоне css. Кроме того, убедитесь, что ваш селектор более специфичен, чем стандартный, или используйте !important

3. Я не знал, что мы не можем изменять стили элементов mat на уровне шаблона, я попробую это снова.

4. Намного лучше, все еще немного не так, но, по крайней мере, он отвечает сейчас. Спасибо @emmbee!

5. Добро пожаловать! Вот официальные документы по этому вопросу angular.io/guide/component-styles#view-encapsulation