Как изменить высоту в поле mat-form-field

Как изменить рост в mat-form-field с помощью appearance = "outline"?

Мне нужно уменьшить поле мат-формы.

Мой пример ввода

Как изменить высоту в поле mat-form-field

в css: input.mat-input-element {height:105px} - это то, что вы имеете в виду?

Akber Iqbal 19.02.2019 08:06

это то, что я имею в виду, но я хочу уменьшить контроль и просто уменьшить внутренний элемент, а не поле формы мата.

Stack Overflow 19.02.2019 08:47

можете ли вы представить картину того, что вы хотели достичь

davecar21 19.02.2019 09:26

добавил картинку...

Stack Overflow 19.02.2019 09:32

еще один связанный вопрос здесь, stackoverflow.com/questions/59977079/…

user12425844 30.01.2020 08:21
Приемы 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 сценарий полностью изменился.
68
5
93 031
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

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

Добавьте их в свой CSS в файле оригинальный стекблиц.

::ng-deep .mat-form-field-flex > .mat-form-field-infix { padding: 0.4em 0px !important;}
::ng-deep .mat-form-field-appearance-outline .mat-form-field-label { margin-top:-15px; }
::ng-deep label.ng-star-inserted { transform: translateY(-0.59375em) scale(.75) !important; }

ОБНОВЛЕНО: с переходом для метки...

::ng-deep .mat-form-field-flex > .mat-form-field-infix { padding: 0.4em 0px !important;}
::ng-deep .mat-form-field-label-wrapper { top: -1.5em; }

::ng-deep .mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label {
    transform: translateY(-1.1em) scale(.75);
    width: 133.33333%;
}

Я добавил это в свой код, это изменило поведение заполнителя.

Stack Overflow 19.02.2019 10:23

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

Akber Iqbal 19.02.2019 10:27

@StackOverflow: я также добавил эффект перехода, вы можете поиграть со значениями, чтобы получить именно тот эффект, к которому вы стремитесь.

Akber Iqbal 19.02.2019 10:47

Спасибо за код stackblitz. Это полезно для удаления лишнего заполнения. Как я могу убедиться, что высота поля матовой формы похожа на 36px?

rainversion_3 18.06.2019 15:53

@rainversion_3, добавьте это в css ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-thick{ height: 36px; } ::ng-deep .mat-form-field-flex > .mat-form-field-infix { border-top: 5px solid transparent; } ... дайте мне знать, если это сработает для вас.

Akber Iqbal 19.06.2019 06:32

Высота меняется, когда я навожу курсор и фокусируюсь, иначе это высота по умолчанию. Как узнать, какой класс и свойство нужно изменить? Есть ли документация на него?

rainversion_3 19.06.2019 10:03

высота фиксируется на 36 пикселей независимо от того, не касаетесь ли вы ее, фокусируете или наводите на нее курсор... вы можете проверить рабочую демонстрацию: stackblitz.com/edit/…

Akber Iqbal 19.06.2019 11:03

Чтобы применить указанный стиль к текущему компоненту и всем его потомкам, обязательно включите селектор :host перед ::ng-deep :) спасибо @akber за его работу как шарм :)

Whisher 25.11.2019 17:28

stackblitz не работал, задал вопрос сюда, спасибо stackoverflow.com/questions/59977079/…

user12425844 30.01.2020 08:22

::ng-deep — это устарел.

Ross Brasseaux 15.08.2020 20:33

переместите свой стиль в файл styles.scss, чтобы сделать его глобальным, потому что, скорее всего, вам понадобятся одинаковые стили для всех ваших полей во всем приложении, не забудьте удалить ::ng-deep, когда вы перемещаете его в файл styles.scss, он там не требуется.

Awais Nasir 09.02.2021 11:30

Использование решения @AkberIqbal испортило мой стиль для полей формы мата, а не outline. Также это решение не нуждается ни в каких !important;. С !important; ты уже потерялся :D.

Итак, вот безопасный способ добавить ваши глобальные стили: (кажется излишним, но я скорее сэкономлю, чем сожалею)

mat-form-field.mat-form-field.mat-form-field-appearance-outline > div.mat-form-field-wrapper > div.mat-form-field-flex > div.mat-form-field-infix  { padding: 0.4em 0px }
mat-form-field.mat-form-field.mat-form-field-appearance-outline > div.mat-form-field-wrapper > div.mat-form-field-flex > div.mat-form-field-infix > span.mat-form-field-label-wrapper { top: -1.5em; }

.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label {
    transform: translateY(-1.1em) scale(.75);
    width: 133.33333%;
}

Итак, как вы видите. Я «выслеживаю» каждый класс, пока не найду схему! Мне нравится, когда стиль контура применяется только к полям контура..

ты знаешь ответ на это? stackoverflow.com/questions/59977079/…

user12425844 30.01.2020 08:22

Я понятия не имею, что такое "формула". Я скопировал значения из верхнего ответа. Вы можете прочитать источник github, чтобы найти подсказки.

Andre Elrico 30.01.2020 12:09

Вот мое недавнее решение для поля высотой 32 пикселя с закругленными углами.

  & .mat-form-field-wrapper {
    height: 44.85px;

    & .mat-form-field-flex {
      height: 32px;

      & .mat-form-field-outline {
        $borderRadius: 25px;
        height: 28px;

        & .mat-form-field-outline-start {
          border-radius: $borderRadius 0 0 $borderRadius;
          width: 13px !important; // Override Material in-line style
        }

        & .mat-form-field-outline-end {
          border-radius: 0 $borderRadius $borderRadius 0;
        }
      }

      & .mat-form-field-infix {
        left: 4px;
        padding: 0;
        top: -7px;

        & .mat-form-field-label,
        & .mat-input-element {
          font-size: 12px;
        }

        & .mat-form-field-label-wrapper {
          top: -1.04375em;

          & .mat-form-field-label {
            height: 16px;
          }
        }
      }
    }
  }

Размер в библиотеке материалов основан на em(rem). Лучше не смешивать.

Wildhammer 26.11.2019 01:12

Смешивать и сочетать что? Используйте px, когда вы всегда хотите одного и того же размера. Используйте (r)em, когда хотите, чтобы это было относительно.

Russ 26.11.2019 05:08

Если кто-то хочет сделать ответ Акбера Икбала классовым (чтобы были доступны оба размера):

:host ::ng-deep {
  .my-custom-component-small { // add my-custom-component-small class to your mat-form-field element
    .mat-form-field-flex > .mat-form-field-infix { padding: 0.4em 0 !important;}
    .mat-form-field-label-wrapper { top: -1.5em; }

    &.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label {
      transform: translateY(-1.1em) scale(.75);
      width: 133.33333%;
    }
  }
}

Надеемся, что команда Angular добавит поддержку пользовательского интерфейса высокой плотности в будущих выпусках (высокая плотность является частью спецификации дизайна материалов).

TLDR: настроить размер шрифта окружающего контейнера.

Длиннее: Функциональность для изменения размеров полей формы встроена в Angular Material, поэтому, если вы не хотите изменять относительные пропорции в поле, вам не нужно заморачиваться с изменением размеров отдельных компонентов (см. документацию).

Ключом к настройке размера поля на самом деле является просто настройка размера шрифта в окружающем контейнере. Как только вы это сделаете, все остальное будет масштабироваться вместе с ним. например

Размер шрифта контейнера: 12px;

<div style = "font-size: 12px">
  
  <mat-form-field appearance = "outline">
    <mat-label>Your name</mat-label>
    <input matInput placeholder = "Jane Doe">
  </mat-form-field>

  <mat-form-field appearance = "outline">
    <mat-label>Your email</mat-label>
    <input matInput placeholder = "[email protected]">
  </mat-form-field>

</div>

Результирующая форма:

Размер шрифта контейнера: 18px;

<div style = "font-size: 18px">
  
  <mat-form-field...

</div>

Результирующая форма:

NB

Это не решение для вас, если вас не устраивает соотношение заполнения внутри форм. Однако это другой вопрос, чем просто изменить размер форм. Изменить размер просто, изменить соотношение отступов и полей еще сложнее!

этот вопрос не касается изменения размера шрифта. Речь идет об отношении расстояния от текста/метки к границам, которое на какой-то вкус слишком широкое.

Andre Elrico 30.01.2020 12:11

Андре спросил, как изменить высоту поля формы, и он ответил, что: высота всех элементов формы определяется относительно размера шрифта, так что это все, что вам нужно изменить. Вы правы в том, что он не изменит относительных пропорций — он сохранит все пропорциональным и масштабирует все это. но вопрос не в изменении пропорций. Ваш вопрос отличается от ОП.

Peter Nixey 31.01.2020 15:35

Пожалуйста, оцените отмеченный ответ (он меняет пропорции, и ОП доволен этим и отмечает его как ответ). И внимательно посмотрите на изображения ОП. На изображениях видно, что пропорции должны измениться. Хороших выходных.

Andre Elrico 31.01.2020 16:44

По какой-то причине исходные изображения не загружались, когда я смотрел на вопрос, поэтому был виден только текст. По картинкам видно, что вы правы в своей интерпретации.

Peter Nixey 01.02.2020 18:32

Это лучший ответ! Работал как шарм. Спасибо!

Pranav Bhatia 03.12.2020 15:48

Спасибо ! очень быстрое решение

Pedro Bezanilla 07.07.2021 16:04

Это то, что я использовал:

.small-input.mat-form-field-appearance-outline .mat-form-field-infix {
    padding: .25em 0 .75em 0;
    font-size: 14px;
}
.small-input.mat-form-field-appearance-outline .mat-form-field-infix .mat-select-arrow{margin-top: 10px;}
.small-input.mat-form-field-appearance-outline .mat-select-empty + .mat-form-field-label-wrapper .mat-form-field-label{margin-top: -0.75em;}

Я пробовал этот код, и он работал для полей ввода, но не для меток (в моих вводах мат-автозаполнения). Переименовав small-input в compact-input, я использовал этот селектор, чтобы расположить метку на пустом объекте: .compact-input.mat-form-field-appearance-outline .mat-form-field-infix .mat-form-field-label-wrapper .mat-form-field-label.mat-empty.mat-form-field-empty { margin-top: -0.75em; }

coppereyecat 13.10.2021 01:47

Вот еще один подход:

/* Angular Material Overrides */
.mat-form-field-appearance-outline .mat-form-field-outline {
  color: #ccc; /* Override outline color. */
}

.mat-form-field-appearance-outline .mat-form-field-infix {
  padding: .65em 0; /* Original top/bottom value was 1em. */
}


.mat-input-element {
  position: relative;
  top:  -1.2em; /* Adjust accordingly to keep placeholder/input text vertically centered. */
}

.mat-form-field-label-wrapper {
  top: -1.2em; /* Adjust accordingly to keep <mat-label> text vertically centered. */
}

TL;DR Поля формы материала основаны на font-size свойстве поля.

Не делайте ошибку, регулируя высоту материала, гребля и т. д. в вашем CSS/SCSS... Элементы материальной формы, такие как ввод и выбор, основаны на font-size. Кроме того, встроенные стили не рекомендуются, поэтому вы можете просто добавить немного CSS. Атрибут «внешний вид» не имеет значения.

::ng-deep .mat-form-field {
    font-size: 12px; // example
}

12 пикселей? это просто не очень хорошая практика .. не будет так читабельно на мобильном телефоне: P

Mackelito 02.12.2020 21:24

Эта «проблема» невозможности скрыть плавающую метку упоминается здесь: https://github.com/angular/components/issues/11845

Упомянутый приятный обходной путь заключается в том, чтобы не включать метку мата в поле формы мата и добавлять его в свой css, локальный или глобальный. Вам может понадобиться использовать ::ng-deep.

.mat-form-field:not(.mat-form-field-has-label) .mat-form-field-infix {
  border-top-width: 0;
}

Как объяснили многие постеры, поле угловой формы материала основано на размере шрифта, поэтому для всех вас, кто хочет определить пользовательское поле формы, вот мой код для изменения размера как высоты, так и ширины, не затрагивая входной шрифт или значок переключить размер.

  • Определите внутри компонента css этот код и примените их как класс к метке mat-form-field.

.custom-form-field {
  width: 200px;
  font-size: 10px;
  margin-top: 3px;
  margin-bottom: -1.25em;

  mat-datepicker-toggle {
      font-size: 12px;
  }

  input.mat-input-element {
      padding-bottom: 2px;
      font-size: 12px;
      color: $title-color;
  }
}

Вы можете глубоко переопределить значение заполнения стиля контура:

    ::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix {
  padding: .5em;
}

Для меня это было хорошим решением

Примените изменение к селектору .mat-form-field .mat-form-field-infix. В Sass это будет:

.mat-form-field {
  .mat-form-field-infix {
     height: 16px;
  }
}

Если вы не используете «mat-label» внутри «mat-select», то ниже css будет работать

::ng-deep {
    .mat-form-field-infix {
        border: 0px !important;
    }
    .mat-form-field-appearance-outline .mat-select-arrow-wrapper {
        transform: none !important;
    }
}

До:

Before adding the above css

После:

After adding the above css

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