【问题标题】:Angular Material UI TextArea Fill Height/WidthAngular Material UI TextArea 填充高度/宽度
【发布时间】:2021-03-18 05:22:13
【问题描述】:

使用 Angular v11 和 Angular Material Form field 如何让 textarea mat-form-field 占据容器的整个空间(在我键入时不会自动增长,但即使是空的也要填充空间)?它应该是仅使用 CSS 的动态解决方案,因此页面大小调整时,文本字段也会调整。

这里是pic of actual page I'm working on。我试图在stackblitz 上制作样本,但是 Material UI 甚至没有在那里正确显示 - 可以吗?仍然希望它有助于澄清我的问题。

【问题讨论】:

    标签: angular angular-material


    【解决方案1】:

    我最终找到了完全动态的解决方案,无需使用 calc 或任何硬编码调整(请注意,您可以在 textarea 上方的部分中添加内容并动态调整大小),请参阅stackblitz。 使它工作的关键之一是这个 CSS,我不太明白:

    *,
    ::after,
    ::before {
      box-sizing: border-box;
    }
    

    【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,您可以在 style.css 文件中添加此 CSS。并将 fill-container 添加到 mat-form 字段元素中

    .mat-form-field.fill-container,
    .mat-form-field.fill-container .mat-form-field-infix,
    .mat-form-field.fill-container .mat-form-field-flex,
    .mat-form-field.fill-container .mat-form-field-wrapper {
      height: 100%;
      width: 100%;
    }
    
    .mat-form-field.fill-container textarea {
      height: calc(100% - 25px);
    }
    

    在模板中

    <mat-form-field appearance="fill" class="fill-container">
        <mat-label>Textarea</mat-label>
        <textarea matInput [matTextareaAutosize]="false"></textarea>
    </mat-form-field>
    

    这里是 stackblitz 示例。 https://stackblitz.com/edit/angular-9ms3ph?file=src/app/form-field-overview-example.html

    另外,如果你可以使用matTextareaAutosize 代替这种风格,我推荐使用这个@Input 属性

    这样

    <div>
      
      <mat-form-field appearance="fill" class="test">
        <mat-label>Textarea</mat-label>
        <textarea matInput [matTextareaAutosize]="true"></textarea>
      </mat-form-field>
    
    </div>
    

    【讨论】:

    • 它已经填满了宽度。我也希望它填充高度(高度:100% 不起作用)。我也希望漂亮的 Material 格式保持不变。
    • @Ben 我发现了一种损坏的风格,我已经更新了(答案和示例)。
    • 它对我不起作用。同样在您的 stackbitz 示例中,它不起作用-尝试输入很多内容,您会看到它超出了文本框...并且还超出了页面底部。
    • @Ben 请刷新我已修复的 Stackblitz 示例。
    • 现在看起来好多了……但是你有没有不使用 calc() 和硬编码 25px 的解决方案?
    【解决方案3】:

    我知道这样做不是一个好主意,但可以尝试一下

    <div #parent>
    
      <!-- ... other elements -->
    
      <mat-form-field class="textarea-mat-field">
         <mat-label>Text Content</mat-label>
         <textarea 
          matInput  
          placeholder="Enter document text..." 
          #newTextContent
          style="height: {{parent.offsetHeight - newTextContent.getBoundingClientRect().top}}px"></textarea>
      </mat-form-field>
    </div>
    

    【讨论】:

    • 我想要动态的。随着页面大小的调整,它也应该如此。最好不要使用任何脚本,仅使用 CSS 解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2020-11-17
    • 1970-01-01
    • 2017-01-05
    相关资源
    最近更新 更多