css - 尝试创建像文本框这样的 Material 设计,输入验证问题

标签 css html material-design

我正在尝试创建受 Material 设计启发的文本框。

我已经阅读了类似的问题/答案。但是,我的问题略有不同,请继续阅读。

这是我的页面样式表 -

.textBoxContainer{
height:50px;
position:relative;
margin:20px;
}

.textbox{
    border-bottom: solid 2px #984343;    
    border-top: none;
    border-left: none;
    font-family: Candara;
    width: 30%;
  }

.textbox + .lbl{
position:absolute;
top:0px;
left:0px;
transition:all .2s ease-out;
}

.textbox:focus{
 border-bottom: solid 2px #4CAF50;
  outline:none;    
}

 .textbox:focus + label, input:valid+label{
 top:-15px;
 font-size:10px;
 }

这是我要创建的文本框 -

<div class='textBoxContainer'>
<input class='textbox' type="text" />
<label class='lbl'>
phone no....
</label>
</div>

它工作得很好,就像受 Material 设计启发的文本框一样,文本在输入时向上移动。

但是,在输入完成后,如果我移出文本框,标签会再次折叠回文本框。

我原以为“input:valid”会有助于防止它发生,但事实并非如此。 我可以用 javascript 解决这个问题,但是有没有不使用 js 的方法?

我也尝试过在输入字段中添加“必需”,但这也无济于事。

如果我需要进一步解释,请告诉我。

最佳答案

我相信这需要使用 javaScript。如果您不想使用 javascript,只需将标签保留在文本字段的顶部,或者只使用占位符即可。

使用 JavaScript 实现它的方法如下:

onfocusout 事件监听器添加到您希望该标签保留的所有文本字段。

<input class='textbox' type="text" onfocusout="leaveFocus(event)" />

接下来,您必须创建每次 textField 失去焦点时调用的函数。

function leaveFocus(event) {

    const textField = event.target;
    // Check if textField is empty
    if (textField.value !== '') {
        textField.classList.add('has-text);
    } else {
        // Otherwise, textFiled has text
        textField.classList.remove('has-text);
    }
}

该函数检查文本字段是否为空。如果是,则删除 has-text 类,如果有文本,则添加 has-text 类。

现在在您的 css 中,您必须将 has-text 添加到标签向上的所有样式中,如下所示:

.textbox:focus, .has-text{
     border-bottom: solid 2px #4CAF50;
     outline:none;    
}

 .textbox:focus + label, .has-text + label, input:valid+label{
     top:-15px;
     font-size:10px;
 }

如果这回答了您的问题,请告诉我;如果您需要更多帮助,请告诉我。

关于css - 尝试创建像文本框这样的 Material 设计,输入验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53384094/

相关文章:

html - 背景图像不会重复

javascript - 在动态链接上调用的最少事件

javascript - 使用 toBlob 下载 Canvas 图像

angularjs - 如何在 Angular Material 的 md-autocomplete 组件中禁止自由文本?

javascript - 如何在 Materializecss 中编辑选项卡的名称?

javascript - 触摸友好的下拉菜单

javascript - Bootstrap-Datepicker 无法正常工作

css - Bootstrap 3 : Vertically Center Navigation Links when Logo Increasing The Height of Navbar

html - 部分填充时如何强制 body 成为屏幕的大小?

android - 自定义 Material 设计工具栏