javascript - 添加和删除相同的类后,Chrome 将输入字段变为多行
问题描述
所以我遇到了这个我有点困惑的小问题。首先是代码:
HTML:
<div>
<input id="input" type="text" value="Some long long long text that doesn't fit into the input text field">
</div>
<button type="button" onclick="show(false)">
hide
</button>
<button type="button" onclick="show(true)">
show
</button>
CSS:
input {
width: 100px;
height: 30px;
}
.hidden {
visibility: hidden;
position: absolute
}
JS:
var show = b => {
var input = document.getElementById('input');
input.classList[b ? 'remove' : 'add']('hidden');
}
我有一个input
type="text"
网页。一旦我将“隐藏/偏移”类添加到它的祖先 div,然后我删除了同一个类,input
它的内容就会变成多行(以防它太长而无法在字段中显示)。小提琴很好地说明了我的意思:
https://jsfiddle.net/yq9x01r8/1/
在 Chrome 中运行。单击隐藏按钮,然后单击显示按钮。
在本例中,.hidden
该类被直接添加到input
中。在我的页面中,它被添加到其中一个父母中,但它产生了相同的破碎字段(但是,我无法完全复制它,太多的东西和嵌套正在进行)。
输入应该这样做有什么理由吗?这是一个闪烁的错误吗?任何可以防止这种情况的CSS?请注意,如果可能的话,我宁愿不使用white-space: nowrap;
。谢谢你。
解决方案
Chrome 似乎没有遵循标准规则 - 添加!important
高度规则、添加overflow: hidden;
规则或使选择器#input
更具体,都不会阻止输入框变成多行。
然而,这可能是一个极端情况——hidden
规则相当奇怪。如果你更换
.hidden {
visibility: hidden;
position: absolute;
}
和
.hidden {
display: none;
}
Chrome 恢复正常运行。
关于评论信息,隐藏和显示输入而不更改其 CSS 的另一种方法是隐藏和显示其父元素:
var show = b => {
var input = document.getElementById('input');
input.parentNode.classList[b ? 'remove' : 'add']('hidden');
如果父节点显示为块元素,这只会挽救 Chrome 的行为 - 尝试将其包装input
在标签中而不将其显示规则更改为“块”只会导致当类的类span
重新出现多行输入元素时元素被移除。hidden
span
如果现有div
容器没有其他子元素,则只需将其更改为绝对元素即可。
尝试这个的想法来自于 CSS 在应用于绝对块时如何失败,但如果应用于position: static
同一个绝对块内的静态块 ( ) 则可以工作。
推荐阅读
- arraylist - 如何在 kotlin 中获取 ArrayList 的最后一个值?
- flutter - 颤振检测屏幕是否关闭
- sql - 如何进行 sql 数据透视
- java - 在 Spring 中将 Jade4J 配置为默认模板引擎
- javascript - 查找表中最大的数字
- shell - 在 groovy 中执行 shell 命令会引发“意外字符”错误
- jmeter - 在 Jmeter 中使用动态输入的正则表达式(正则表达式提取器)
- c# - Unity:按特定顺序解析所有已注册类型实例的列表
- java - 尝试在 Jsoup 中加载 URL 时发生了太多重定向
- go - 如何在运行测试之前自动清理 Visual Code 中的 go 缓存?