输入文本字段,不设置动画(材质设计)

时间:2018-10-19 07:15:30

标签: html css material-design

我已经设置了MDC,但是我的文本字段没有动画。

https://imgur.com/a/1h27vhD 该链接显示了应该处于的状态,以及我的字段处于的状态。

第一张图片来自我的网站,当您进入活动状态时,您可以在其中看到标签未设置动画到顶部,底部图片却没有显示。底部图像直接来自Google Material Design演示页面。

<link rel="stylesheet" href="https://unpkg.com/material-components-web/dist/material-components-web.min.css">
<script src="https://unpkg.com/material-components-web/dist/material-components-web.min.js"></script>

<div class="mdc-text-field mdc-text-field--outlined">
  <input type="text" id="tf-outlined" class="mdc-text-field__input">
  <label for="tf-outlined" class="mdc-floating-label">Your Name</label>
  <div class="mdc-notched-outline">
    <svg>
                                  <path class="mdc-notched-outline__path"/>
                                </svg>
  </div>
  <div class="mdc-notched-outline__idle"></div>
</div>

我在做什么错了?

我先谢谢你

4 个答案:

答案 0 :(得分:1)

使用以下代码段。也使用mdc.autoInit();

mdc.autoInit();
        
   <link rel="stylesheet" href="https://unpkg.com/material-components-web/dist/material-components-web.min.css">

<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
          
          
<body>   
     
     <div class="mdc-text-field mdc-text-field--outlined  mdc-text-field--with-trailing-icon" data-mdc-auto-init="MDCTextField">
      <i class="material-icons mdc-text-field__icon">delete</i>
      <input type="text" id="my-input" class="mdc-text-field__input">
      <label for="my-input" class="mdc-floating-label">Standard</label>
      <div class="mdc-notched-outline">
        <svg>
          <path class="mdc-notched-outline__path"/>
        </svg>
      </div>
      <div class="mdc-notched-outline__idle"></div>
    </div>


   <script src="https://unpkg.com/material-components-web/dist/material-components-web.min.js"></script>
           
</body>

答案 1 :(得分:0)

这是一个可能的解决方案:

  1. 您摆脱了<label></label>

  2. 您向placeholder="Your Name"标签添加了<input>属性

  3. 您可以使用CSS将占位符隐藏在焦点上

HTML:

<input type="text" id="tf-outlined" class="mdc-text-field__input" placeholder="Your Name">

CSS:

.mdc-text-field__input:focus::placeholder {
  visibility: hidden;
}

片段:

.mdc-text-field__input:focus::placeholder {
  visibility: hidden;
}
<link rel="stylesheet" href="https://unpkg.com/material-components-web/dist/material-components-web.min.css">
<script src="https://unpkg.com/material-components-web/dist/material-components-web.min.js"></script>

<div class="mdc-text-field mdc-text-field--outlined">
  <input type="text" id="tf-outlined" class="mdc-text-field__input" placeholder="Your Name">
  <div class="mdc-notched-outline">
    <svg>
                                  <path class="mdc-notched-outline__path"/>
                                </svg>
  </div>
  <div class="mdc-notched-outline__idle"></div>
</div>

答案 2 :(得分:0)

我之前也遇到过这个问题,您只需要在Javascript文件中添加以下行即可:

mdc.textField.MDCTextField.attachTo(document.querySelector('.mdc-text-field'));

此Javascript代码将CSS动画标签效果与div .mdc-text-field关联,并按以下顺序进行关联:

<div class="mdc-text-field">
  <input type="text" id="my-text-field" class="mdc-text-field__input">
  <label class="mdc-floating-label" for="my-text-field">Label</label>
  <div class="mdc-line-ripple"></div>
</div>

这就是为什么您无法在组件中看到正确的标签动画的原因。我认为MDC文档很好,但是具体性很差。

如果问题仍然存在,请告诉我,问候,我会尽快检查您的问题!

编辑:我忘了说;要获取网站中的所有文本字段,您必须使用:

const edtTexts = [].map.call(document.querySelectorAll('.mdc-text-field'), function(el) {
  return new mdc.textField.MDCTextField(el);
});

因此,您将获得一个具有 class =“ mdc-text-field” 的每个div数组。使用 document.querySelector ,您将找到第一个对象。

答案 3 :(得分:0)

这个对我有用。

import {MDCTextField} from '@material/textfield';

const mdcTexts = [].map.call(document.querySelectorAll('.mdc-text-field'), function(el) {
    return new MDCTextField(el);
});