【问题标题】:Angular Material form shrinking when field is valid字段有效时,角度材料形式收缩
【发布时间】:2023-03-06 12:08:01
【问题描述】:

我正在使用 Angular Material 作为联系表单。但是,当前 2 个元素中的一个或两个都有效时,表单的宽度会缩小。因此,当主题有效时,表格会缩小,而当电子邮件有效时,表格会再次缩小。当它是一行和一列时,表单会缩小。

我发现解决此问题的一种方法是将 flex 放在表单元素上,但这会导致表单填满页面的整个宽度,这是不可取的。我还在其上方和下方调整了表单和跨度元素,但它只是使表单比两个字段有效时更挤压。

<div layout="column" layout-gt-md="row" layout-align="start center" layout-align-gt-md="center start">
<form name="contactForm">
    <div layout="row" layout-align="space-between center">
        <div>
            <h3>Contact Form</h3>
            <span>Fill out the contact form to send me an email.</span>
        </div>
    </div>
    <div layout-gt-md="row">
        <md-input-container class="md-block" flex>
            <label>Subject</label>
            <input minlength="5" md-maxlength="30" required name="subject" ng-model="contact.subject" />
            <div class="hint">Give your message a subject.</div>
            <div ng-messages="contactForm.subject.$error">
                <div ng-message-exp="['required', 'minlength', 'maxlength']">The subject has to be between 5 and 30 characters long.</div>
            </div>
        </md-input-container>
        <div flex="5" show-gt-md>
            <!-- Spacer //-->
        </div>
        <md-input-container class="md-block" flex>
            <label>Client Email</label>
            <input required name="email" ng-model="contact.email"
                   minlength="10" md-maxlength="100" ng-pattern="/^.+@.+\..+$/" />
            <div class="hint">What email should I reply to?</div>
            <div ng-messages="contactForm.email.$error">
                <div ng-message-exp="['required', 'minlength', 'maxlength', 'pattern']">
                    Your email must be between 10 and 100 characters long and be a valid email address.
                </div>
            </div>
        </md-input-container>
    </div>
    <div layout-gt-md="row">
        <md-input-container class="md-block" flex>
            <label>Body</label>
            <textarea name="body" ng-model="contact.body" required minlength="15" md-maxlength="1500" rows="5"></textarea>
            <div class="hint">What would you like to message me about?</div>
            <div ng-messages="contactForm.body.$error">
                <div ng-message-exp="['required', 'minlength', 'maxlength']">The body must be between 15 and 1500 characters long.</div>
            </div>
        </md-input-container>
    </div>
    <div layout-gt-md="row">
        <span flex></span>
        <md-button class="md-raised" ng-disabled="contactForm.$invalid"><md-icon class="material-icons">mail_outline</md-icon>Send</md-button>
    </div>
</form>
</div>

编辑

目前,我已经解决了 CSS 媒体查询的问题,但我不想这样做。

@media screen and (min-width: 960px) {
    form {
        width: 610px;
    }
}

@media screen and (max-width: 959px) {
    form {
        width: 400px;
    }
}

编辑

Codpen 已添加

【问题讨论】:

  • 你会做笔吗?
  • @nextt1 我已经添加了代码笔。我使用了 angular material 网站上的空白应用程序。实际上,正因为如此,我了解到这个错误很可能存在于 ngMessages 中。

标签: html angularjs angular-material


【解决方案1】:

您正在使用start center layout-align 与column。现在center 对齐在许多情况下会产生不希望的结果。所以最好使用&lt;span flex&gt;&lt;/span&gt; 将require 元素居中。例如。

 <div layout="row">
    <span flex></span>
    <div>
      <h3>Contact Form</h3>
      <span>Fill out the contact form to send me an email.</span>
    </div>
    <span flex></span>
  </div>

因此,请查看以下链接以检查工作示例。 http://codepen.io/next1/pen/YqRVWo

【讨论】:

  • 这行得通,但它迫使我将表单中的每个元素居中。这不是很糟糕,但我宁愿使用 css 媒体查询,也不愿使用丑陋的表单。我认为这只是我需要在 angular material github 上发布的一个错误。感谢您的帮助。
  • @Clint 您可以使用&lt;span flex="10"&gt;&lt;/span&gt; 任何适当的值来根据需要进行定位。因为您使用了start center layout-align 我使用了&lt;span flex&gt;&lt;/span&gt; 作为替换。
  • 谢谢,我对 flex 的真正工作原理感到困惑。您的帖子使我找到了这个解决方案:删除布局对齐,弯曲表单的每一侧,并将表单设置为根据屏幕大小弯曲。弯曲表格似乎已经解决了这个问题。我觉得比较傻。再次感谢您的帮助!
  • 没问题:)
猜你喜欢
  • 2023-03-20
  • 2022-11-25
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 2019-04-23
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多