INPUT 和 SELECT 元素自定义大小

Posted

技术标签:

【中文标题】INPUT 和 SELECT 元素自定义大小【英文标题】:INPUT and SELECT elements custom size 【发布时间】:2010-10-30 02:04:52 【问题描述】:

据我了解,宽度/填充/边距属性仅适用于块级元素。但是,在 INPUT 和 SELECT 元素上,我可以指定宽度,这是可行的。应该吗?

我可以这样写:

<input type="text" style="display:block;" />

但有必要吗?

谁能解释一下它为什么有效?

【问题讨论】:

【参考方案1】:

实际上,它们并不是真正的内联元素,而是内联块元素。这允许您指定宽度、高度和其他特定于块的属性,而无需中断内联元素的流动。 In good browsers 你可以在任何元素上使用“display:inline-block”来实现同样的效果。

【讨论】:

虽然它不是一个广泛的测试,但至少在 Firefox 3 中,输入元素的计算样式(没有作者样式来更改它)是 display: inline - 不是 inline-block。 @David,是的,你是对的,尽管我假设(我找不到任何证据)Mozilla 在内部使用“display:-moz-inline-box”。我也做了一些测试,似乎 IE8 和 Chrome2 报告 SELECT 元素的“inline-block”,而 Opera9 报告“inline”。话虽如此,我相信您的答案是正确的,但假设这些元素为“display:inline-block”是相当安全的。【参考方案2】:

The spec says:

适用于:所有元素,但不可替换的内联元素、表格行和行组

表单控件,例如输入和选择元素被替换内联元素(该元素被替换为表单控件 - 它的文本内容不像普通元素那样显示)。

由于它们被替换,它们不是不可替换的,所以宽度属性适用。

【讨论】:

【参考方案3】:

表单元素是 html/CSS 世界的害群之马——有很多属性不能像普通的 HTML 元素那样工作。

虽然它没有回答您的问题,但您可能会发现以下讨论很有趣:http://meyerweb.com/eric/thoughts/2007/05/15/formal-weirdness/

【讨论】:

【参考方案4】:

从技术上讲,这是特定于浏览器的呈现属性。在这一点上,大多数浏览器确实允许您设置宽度,但不能保证(尤其是在旧浏览器上),您肯定会遇到错误。

输入元素的 W3 规范在技术上使其成为内联元素。内联块甚至不是 W3 规范的一部分,它是 CSS2 的一部分(因此旧浏览器不一致)。

例如,如果您将宽度指定为百分比并在其中放入大量文本,IE 会有一些有趣的错误。

长话短说,它几乎总是安全的,只是不是我见过的任何官方规范的一部分。

【讨论】:

【参考方案5】:

如果这不可能发生,你想过吗?引入 INPUT 元素时,没有 CSS。在 HTML 中,INPUT 元素的宽度绝对是创建正确表单所必需的。

【讨论】:

我明白了......这些天来做这件事的正确方法是什么?对它们指定 display:block 还是仅仅将这些元素视为历史例外? Display:block 仅在出于某些原因需要时才应使用。

以上是关于INPUT 和 SELECT 元素自定义大小的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义CollectionView中每个元素的大小和间距

jquery 自定义插件, 监听元素插件

jquery 自定义插件, 监听元素插件

jquery 自定义插件, 监听元素插件

vue自定义指令,包装函数节流。

如何从 index.html 自定义元素标签接收数组作为@Input?