我怎样才能改变mat-form-field
高度appearance="outline"
?
我需要减少 mat-form-field。
TLDR:调整周围容器的字体大小。
更长: 调整表单字段大小的功能内置在 Angular Material 中,因此除非您想更改字段中的相对比例,否则您无需为调整单个组件的大小而感到困惑(请参阅文档)。
调整字段大小的关键实际上只是调整周围容器中的字体大小。一旦你这样做了,其他一切都会随之扩展。例如
<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="you@youremail.com">
</mat-form-field>
</div>
结果形式:
<div style="font-size: 18px">
<mat-form-field...
</div>
结果形式:
如果您对表单内的填充比例不满意,这不是您的解决方案。但是,这与您如何简单地调整表单大小是不同的问题。调整大小很简单,改变填充和边距比更麻烦!
在你原来的 stackblitz 中将这些添加到你的 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%;
}
使用 @AkberIqbal 的解决方案搞乱了我对 mat-form-fields 的样式,而不是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%;
}
如您所见。我“寻找”每一堂课,直到找到大纲!我喜欢仅将轮廓样式应用于 outline-fields。
TL;DR 材料表单字段基于字段的font-size
属性。
不要在 CSS/SCSS 中错误地调整材质高度、划桨等... 输入和选择等材质表单元素基于font-size
. 此外,不建议使用内联样式,因此您可以简单地添加一些 CSS。`appearance 属性无关紧要。
::ng-deep .mat-form-field {
font-size: 12px; // example
}
如果有人想让 Akber Iqbal 的答案基于类(两种尺寸都可用):
: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 团队在未来的版本中增加对高密度 UI 的支持(高密度是材料设计规范的一部分)。
这是我使用的:
.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;}
这是另一种方法:
/* 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. */
}
正如许多帖子的人所解释的那样,Material angular 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;
}
对我来说这是一个很好的解决方案
这是我最近针对一个 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;
}
}
}
}
}
这里提到了无法隐藏浮动标签的“问题”:https ://github.com/angular/components/issues/11845
提到的一个很好的解决方法是不要在您的 mat-form-field 中包含 mat-label 并将其添加到您的 css 中,无论是本地的还是全局的。您可能需要使用 ::ng-deep。
.mat-form-field:not(.mat-form-field-has-label) .mat-form-field-infix {
border-top-width: 0;
}
将更改应用到选择器.mat-form-field .mat-form-field-infix
。在 Sass 中它将是:
.mat-form-field {
.mat-form-field-infix {
height: 16px;
}
}
这对我有用:
::ng-deep .mat-form-field-infix {
height: 25px;
font-size: 12px;
}