如何修复 HTML5 输入框的高度不一致?
How to fix inconsistent height of HTML5 input boxes?
HTML5 中引入的一些新输入类型,例如 <input type="date">
在 Google Chrome 中更高。有没有办法在不设置固定高度的情况下修复不一致的高度?
目标是使下面列出的所有输入类型(包括提交按钮)都具有相同的高度。原因:
- 与设计相匹配,尤其是当它们水平放置时。
- 灵活性,当我需要一些输入框有更大的字体时。
$("input").each(function() {
h = $(this).outerHeight();
$(this).parent().append(h);
});
input {
font: inherit;
display: inline-block;
vertical-align: middle;
box-sizing: border-box;
border: 1px solid silver;
padding: 0.5rem;
margin: 0;
}
[type="search"] {
-webkit-appearance: textfield;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
background-color: silver;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Input Heights</h1>
<p><input type="text" placeholder="text"></p>
<p><input type="search" placeholder="search"></p>
<p><input type="tel" placeholder="tel"></p>
<p><input type="url" placeholder="url"></p>
<p><input type="email" placeholder="email"></p>
<p><input type="datetime" placeholder="datetime"></p>
<p><input type="date" placeholder="date"></p>
<p><input type="month" placeholder="month"></p>
<p><input type="week" placeholder="week"></p>
<p><input type="time" placeholder="time"></p>
<p><input type="datetime-local" placeholder="datetime-local"></p>
<p><input type="number" placeholder="number"></p>
<!-- <p><input type="range" placeholder="range"></p> -->
<!-- <p><input type="color" placeholder="color"></p> -->
<p><input type="submit" value="submit"></p>
您可以设置行高:
input {
vertical-align: top;
line-height: 22px;
}
<input type="text">
<input type="date">
不仅要设置元素高度,还要设置字体大小
input{
height: 1em;
font-family: Arial;
font-size: 1em;
font-size-adjust: 1;
padding-top: 0.1em;
padding-bottom: 0.1em;
}
问题似乎与 Chrome 添加到日期输入的箭头有关:
这些箭头比文本高,使整个输入比另一个高。它们也被视为文本,因此它们受到 font-size
和 line-height
的影响,这使得它有点棘手。
一个想法是将 min-height
应用于所有输入的内容区域,以匹配这些箭头的高度。经过几次测试,如果我们设置 min-height:1.5em
并设置 box-sizing:content-box
,我们可以得到相同的高度。使用 content-box
将确保其他输入的高度不会缩小。
$("input").each(function() {
h = $(this).outerHeight();
$(this).parent().append(h);
});
input {
font: inherit;
vertical-align: middle;
border: 1px solid silver;
padding: 0.5rem;
margin: 0;
display:inline-block;
min-height: 1.5em;
box-sizing:content-box;
}
[type="search"] {
-webkit-appearance: textfield;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
background-color: silver;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Input Heights</h1>
<p><input type="text" placeholder="text"></p>
<p><input type="search" placeholder="search"></p>
<p><input type="tel" placeholder="tel"></p>
<p><input type="url" placeholder="url"></p>
<p><input type="email" placeholder="email"></p>
<p><input type="datetime" placeholder="datetime"></p>
<p><input type="date" placeholder="date"></p>
<p><input type="month" placeholder="month"></p>
<p><input type="week" placeholder="week"></p>
<p><input type="time" placeholder="time"></p>
<p><input type="datetime-local" placeholder="datetime-local"></p>
<p><input type="number" placeholder="number"></p>
<!-- <p><input type="range" placeholder="range"></p> -->
<!-- <p><input type="color" placeholder="color"></p> -->
<p><input type="submit" value="submit"></p>
然后我们可以调整 padding
、font-size
、height
等,它们将始终保持相同的高度:
input {
font: inherit;
vertical-align: middle;
border: 1px solid silver;
padding: 0.5rem;
margin: 0;
display:inline-block;
min-height: 1.5em;
box-sizing:content-box;
}
.big input{
padding:20px;
}
.small input{
padding:2px;
}
.h-big input{
height:50px;
}
.h-small input{
height:10px;
}
<p><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
<p style="font-size:25px;"><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
<p style="font-size:10px;"><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
<p class="big"><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
<p class="small"><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
<p class="h-big"><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
<p class="h-small"><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
删除任何垂直填充并添加 max-height
然后将垂直填充替换为 line-height
(确保指定单位,空白为百分比)。
所有这些与 box-sizing: border-box
相结合将修复大部分输入。
现在,输入类型 submit 和真正的 <button>
是唯一的问题。文本与底部垂直对齐。我似乎无法改变它。我认为这些元素的默认浏览器样式存在问题,但 appearance: none
似乎无济于事。
也许有人可以对此进行改进?
$("input").each(function() {
h = $(this).outerHeight();
$(this).parent().append(h);
});
input, button {
font: inherit;
display: inline-block;
vertical-align: middle;
box-sizing: border-box;
border: 1px solid silver;
padding: 0;
margin: 0;
line-height: 50px;
max-height: 36px;
}
[type="search"] {
-webkit-appearance: textfield;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
background-color: silver;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Input Heights</h1>
<p><input type="text" placeholder="text"></p>
<p><input type="search" placeholder="search"></p>
<p><input type="tel" placeholder="tel"></p>
<p><input type="url" placeholder="url"></p>
<p><input type="email" placeholder="email"></p>
<p><input type="datetime" placeholder="datetime"></p>
<p><input type="date" placeholder="date"></p>
<p><input type="month" placeholder="month"></p>
<p><input type="week" placeholder="week"></p>
<p><input type="time" placeholder="time"></p>
<p><input type="datetime-local" placeholder="datetime-local"></p>
<p><input type="number" placeholder="number"></p>
<!-- <p><input type="range" placeholder="range"></p> -->
<!-- <p><input type="color" placeholder="color"></p> -->
<p><input type="submit" value="submit"></p>
<p><button>submit</button>
正如 MrLister 指出的那样,max-height
和 min-height
(用 em
表示)似乎是您最好的选择。我经常在生产系统上使用它并且没有任何抱怨:
function updateInputs() {
$("input").each(function() {
$('span', $(this).parent()).remove();
$('<span />', {
text: $(this).outerHeight()
}).appendTo($(this).parent())
});
}
$('#fontSizer').on('input', function() {
$('body').css('font-size', $(this).val() + 'px');
updateInputs();
});
$(window).on('load',updateInputs);
body {
font-size: 16px
}
input {
font: inherit;
display: inline-block;
vertical-align: middle;
box-sizing: border-box;
border: 1px solid silver;
padding: 0.5rem;
margin: 0;
max-height: 2.25em;
min-height: 2.25em;
}
[type="search"] {
-webkit-appearance: textfield;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
background-color: silver;
}
.fixed-top {
background-color: rgba(255, 255, 255, .85);
display: flex;
align-items: center;
justify-content: center;
top: 0;
width: 100%;
left: 0;
position: fixed;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Input Heights</h1>
<p><input type="text" placeholder="text"></p>
<p><input type="search" placeholder="search"></p>
<p><input type="tel" placeholder="tel"></p>
<p><input type="url" placeholder="url"></p>
<p><input type="email" placeholder="email"></p>
<p><input type="datetime" placeholder="datetime"></p>
<p><input type="date" placeholder="date"></p>
<p><input type="month" placeholder="month"></p>
<p><input type="week" placeholder="week"></p>
<p><input type="time" placeholder="time"></p>
<p><input type="datetime-local" placeholder="datetime-local"></p>
<p><input type="number" placeholder="number"></p>
<!-- <p><input type="range" placeholder="range"></p> -->
<!-- <p><input type="color" placeholder="color"></p> -->
<p><input type="submit" value="submit"></p>
<div class="fixed-top">
<input type="range" step="0.01" id="fontSizer" max="54" min="10" value="16">
</div>
请注意,范围滑块仅更改 <body>
上的 font-size
(并相应地更新显示的大小)。
一个完全不同的方法是增加普通的填充值,使它们达到与具有微调器的相同的大小。我最接近体面的东西是
:root {
--input-padding: 0.5rem;
}
input {
padding: calc(var(--input-padding) + .1475em) var(--input-padding);
line-height: 1.225em
}
input[type="date" i], input[type="datetime-local" i], input[type="month" i], input[type="time" i], input[type="week" i] {
padding: var(--input-padding)
}
function updateInputs() {
$("input").each(function() {
$('span', $(this).parent()).remove();
$('<span />', {
text: $(this).outerHeight()
}).appendTo($(this).parent())
});
}
$('#fontSizer').on('input', function() {
$('body').css('font-size', $(this).val() + 'px');
updateInputs();
});
$(window).on('load',updateInputs);
body {
font-size: 16px
}
input {
font: inherit;
display: inline-block;
vertical-align: middle;
box-sizing: border-box;
border: 1px solid silver;
margin: 0;
}
[type="search"] {
-webkit-appearance: textfield;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
background-color: silver;
}
.fixed-top {
background-color: rgba(255, 255, 255, .85);
display: flex;
align-items: center;
justify-content: center;
top: 0;
width: 100%;
left: 0;
position: fixed;
}
:root {
--input-padding: 0.5rem;
}
input {
padding: calc(var(--input-padding) + .1475em) var(--input-padding);
line-height: 1.225em
}
input[type="date" i], input[type="datetime-local" i], input[type="month" i], input[type="time" i], input[type="week" i] {
padding: var(--input-padding)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Input Heights</h1>
<p><input type="text" placeholder="text"></p>
<p><input type="search" placeholder="search"></p>
<p><input type="tel" placeholder="tel"></p>
<p><input type="url" placeholder="url"></p>
<p><input type="email" placeholder="email"></p>
<p><input type="datetime" placeholder="datetime"></p>
<p><input type="date" placeholder="date"></p>
<p><input type="month" placeholder="month"></p>
<p><input type="week" placeholder="week"></p>
<p><input type="time" placeholder="time"></p>
<p><input type="datetime-local" placeholder="datetime-local"></p>
<p><input type="number" placeholder="number"></p>
<!-- <p><input type="range" placeholder="range"></p> -->
<!-- <p><input type="color" placeholder="color"></p> -->
<p><input type="submit" value="submit"></p>
<div class="fixed-top">
<input type="range" step="0.01" id="fontSizer" max="54" min="10" value="16">
</div>
然而,它并不完美。误差不是线性的,我怀疑其中涉及一些舍入。有时在上面,有时在下面。
以em
单位定义高度(和填充),在这种情况下输入高度将遵循字体大小
$("input").each(function() {
var span = $('<span>');
$(this).parent().append(span);
setInterval(() => span.text($(this).outerHeight()), 100);
});
$('#button').on('click', function(){
$('form').css('font-size', 10 + Math.random() * 15);
});
input {
font: inherit;
display: inline-block;
vertical-align: middle;
box-sizing: border-box;
border: 1px solid silver;
margin: 0;
padding: 0.5em;
height: 2.5em;
}
[type="search"] {
-webkit-appearance: textfield;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
background-color: silver;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Input Heights</h1>
<button id="button">change font size</button>
<form>
<p><input type="text" placeholder="text"></p>
<p><input type="search" placeholder="search"></p>
<p><input type="tel" placeholder="tel"></p>
<p><input type="url" placeholder="url"></p>
<p><input type="email" placeholder="email"></p>
<p><input type="datetime" placeholder="datetime"></p>
<p><input type="date" placeholder="date"></p>
<p><input type="month" placeholder="month"></p>
<p><input type="week" placeholder="week"></p>
<p><input type="time" placeholder="time"></p>
<p><input type="datetime-local" placeholder="datetime-local"></p>
<p><input type="number" placeholder="number"></p>
<!-- <p><input type="range" placeholder="range"></p> -->
<!-- <p><input type="color" placeholder="color"></p> -->
<p><input type="submit" value="submit"></p>
</form>
HTML5 中引入的一些新输入类型,例如 <input type="date">
在 Google Chrome 中更高。有没有办法在不设置固定高度的情况下修复不一致的高度?
目标是使下面列出的所有输入类型(包括提交按钮)都具有相同的高度。原因:
- 与设计相匹配,尤其是当它们水平放置时。
- 灵活性,当我需要一些输入框有更大的字体时。
$("input").each(function() {
h = $(this).outerHeight();
$(this).parent().append(h);
});
input {
font: inherit;
display: inline-block;
vertical-align: middle;
box-sizing: border-box;
border: 1px solid silver;
padding: 0.5rem;
margin: 0;
}
[type="search"] {
-webkit-appearance: textfield;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
background-color: silver;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Input Heights</h1>
<p><input type="text" placeholder="text"></p>
<p><input type="search" placeholder="search"></p>
<p><input type="tel" placeholder="tel"></p>
<p><input type="url" placeholder="url"></p>
<p><input type="email" placeholder="email"></p>
<p><input type="datetime" placeholder="datetime"></p>
<p><input type="date" placeholder="date"></p>
<p><input type="month" placeholder="month"></p>
<p><input type="week" placeholder="week"></p>
<p><input type="time" placeholder="time"></p>
<p><input type="datetime-local" placeholder="datetime-local"></p>
<p><input type="number" placeholder="number"></p>
<!-- <p><input type="range" placeholder="range"></p> -->
<!-- <p><input type="color" placeholder="color"></p> -->
<p><input type="submit" value="submit"></p>
您可以设置行高:
input {
vertical-align: top;
line-height: 22px;
}
<input type="text">
<input type="date">
不仅要设置元素高度,还要设置字体大小
input{
height: 1em;
font-family: Arial;
font-size: 1em;
font-size-adjust: 1;
padding-top: 0.1em;
padding-bottom: 0.1em;
}
问题似乎与 Chrome 添加到日期输入的箭头有关:
这些箭头比文本高,使整个输入比另一个高。它们也被视为文本,因此它们受到 font-size
和 line-height
的影响,这使得它有点棘手。
一个想法是将 min-height
应用于所有输入的内容区域,以匹配这些箭头的高度。经过几次测试,如果我们设置 min-height:1.5em
并设置 box-sizing:content-box
,我们可以得到相同的高度。使用 content-box
将确保其他输入的高度不会缩小。
$("input").each(function() {
h = $(this).outerHeight();
$(this).parent().append(h);
});
input {
font: inherit;
vertical-align: middle;
border: 1px solid silver;
padding: 0.5rem;
margin: 0;
display:inline-block;
min-height: 1.5em;
box-sizing:content-box;
}
[type="search"] {
-webkit-appearance: textfield;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
background-color: silver;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Input Heights</h1>
<p><input type="text" placeholder="text"></p>
<p><input type="search" placeholder="search"></p>
<p><input type="tel" placeholder="tel"></p>
<p><input type="url" placeholder="url"></p>
<p><input type="email" placeholder="email"></p>
<p><input type="datetime" placeholder="datetime"></p>
<p><input type="date" placeholder="date"></p>
<p><input type="month" placeholder="month"></p>
<p><input type="week" placeholder="week"></p>
<p><input type="time" placeholder="time"></p>
<p><input type="datetime-local" placeholder="datetime-local"></p>
<p><input type="number" placeholder="number"></p>
<!-- <p><input type="range" placeholder="range"></p> -->
<!-- <p><input type="color" placeholder="color"></p> -->
<p><input type="submit" value="submit"></p>
然后我们可以调整 padding
、font-size
、height
等,它们将始终保持相同的高度:
input {
font: inherit;
vertical-align: middle;
border: 1px solid silver;
padding: 0.5rem;
margin: 0;
display:inline-block;
min-height: 1.5em;
box-sizing:content-box;
}
.big input{
padding:20px;
}
.small input{
padding:2px;
}
.h-big input{
height:50px;
}
.h-small input{
height:10px;
}
<p><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
<p style="font-size:25px;"><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
<p style="font-size:10px;"><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
<p class="big"><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
<p class="small"><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
<p class="h-big"><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
<p class="h-small"><input type="text" placeholder="text"><input type="date" placeholder="date"></p>
删除任何垂直填充并添加 max-height
然后将垂直填充替换为 line-height
(确保指定单位,空白为百分比)。
所有这些与 box-sizing: border-box
相结合将修复大部分输入。
现在,输入类型 submit 和真正的 <button>
是唯一的问题。文本与底部垂直对齐。我似乎无法改变它。我认为这些元素的默认浏览器样式存在问题,但 appearance: none
似乎无济于事。
也许有人可以对此进行改进?
$("input").each(function() {
h = $(this).outerHeight();
$(this).parent().append(h);
});
input, button {
font: inherit;
display: inline-block;
vertical-align: middle;
box-sizing: border-box;
border: 1px solid silver;
padding: 0;
margin: 0;
line-height: 50px;
max-height: 36px;
}
[type="search"] {
-webkit-appearance: textfield;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
background-color: silver;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Input Heights</h1>
<p><input type="text" placeholder="text"></p>
<p><input type="search" placeholder="search"></p>
<p><input type="tel" placeholder="tel"></p>
<p><input type="url" placeholder="url"></p>
<p><input type="email" placeholder="email"></p>
<p><input type="datetime" placeholder="datetime"></p>
<p><input type="date" placeholder="date"></p>
<p><input type="month" placeholder="month"></p>
<p><input type="week" placeholder="week"></p>
<p><input type="time" placeholder="time"></p>
<p><input type="datetime-local" placeholder="datetime-local"></p>
<p><input type="number" placeholder="number"></p>
<!-- <p><input type="range" placeholder="range"></p> -->
<!-- <p><input type="color" placeholder="color"></p> -->
<p><input type="submit" value="submit"></p>
<p><button>submit</button>
正如 MrLister 指出的那样,max-height
和 min-height
(用 em
表示)似乎是您最好的选择。我经常在生产系统上使用它并且没有任何抱怨:
function updateInputs() {
$("input").each(function() {
$('span', $(this).parent()).remove();
$('<span />', {
text: $(this).outerHeight()
}).appendTo($(this).parent())
});
}
$('#fontSizer').on('input', function() {
$('body').css('font-size', $(this).val() + 'px');
updateInputs();
});
$(window).on('load',updateInputs);
body {
font-size: 16px
}
input {
font: inherit;
display: inline-block;
vertical-align: middle;
box-sizing: border-box;
border: 1px solid silver;
padding: 0.5rem;
margin: 0;
max-height: 2.25em;
min-height: 2.25em;
}
[type="search"] {
-webkit-appearance: textfield;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
background-color: silver;
}
.fixed-top {
background-color: rgba(255, 255, 255, .85);
display: flex;
align-items: center;
justify-content: center;
top: 0;
width: 100%;
left: 0;
position: fixed;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Input Heights</h1>
<p><input type="text" placeholder="text"></p>
<p><input type="search" placeholder="search"></p>
<p><input type="tel" placeholder="tel"></p>
<p><input type="url" placeholder="url"></p>
<p><input type="email" placeholder="email"></p>
<p><input type="datetime" placeholder="datetime"></p>
<p><input type="date" placeholder="date"></p>
<p><input type="month" placeholder="month"></p>
<p><input type="week" placeholder="week"></p>
<p><input type="time" placeholder="time"></p>
<p><input type="datetime-local" placeholder="datetime-local"></p>
<p><input type="number" placeholder="number"></p>
<!-- <p><input type="range" placeholder="range"></p> -->
<!-- <p><input type="color" placeholder="color"></p> -->
<p><input type="submit" value="submit"></p>
<div class="fixed-top">
<input type="range" step="0.01" id="fontSizer" max="54" min="10" value="16">
</div>
请注意,范围滑块仅更改 <body>
上的 font-size
(并相应地更新显示的大小)。
一个完全不同的方法是增加普通的填充值,使它们达到与具有微调器的相同的大小。我最接近体面的东西是
:root {
--input-padding: 0.5rem;
}
input {
padding: calc(var(--input-padding) + .1475em) var(--input-padding);
line-height: 1.225em
}
input[type="date" i], input[type="datetime-local" i], input[type="month" i], input[type="time" i], input[type="week" i] {
padding: var(--input-padding)
}
function updateInputs() {
$("input").each(function() {
$('span', $(this).parent()).remove();
$('<span />', {
text: $(this).outerHeight()
}).appendTo($(this).parent())
});
}
$('#fontSizer').on('input', function() {
$('body').css('font-size', $(this).val() + 'px');
updateInputs();
});
$(window).on('load',updateInputs);
body {
font-size: 16px
}
input {
font: inherit;
display: inline-block;
vertical-align: middle;
box-sizing: border-box;
border: 1px solid silver;
margin: 0;
}
[type="search"] {
-webkit-appearance: textfield;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
background-color: silver;
}
.fixed-top {
background-color: rgba(255, 255, 255, .85);
display: flex;
align-items: center;
justify-content: center;
top: 0;
width: 100%;
left: 0;
position: fixed;
}
:root {
--input-padding: 0.5rem;
}
input {
padding: calc(var(--input-padding) + .1475em) var(--input-padding);
line-height: 1.225em
}
input[type="date" i], input[type="datetime-local" i], input[type="month" i], input[type="time" i], input[type="week" i] {
padding: var(--input-padding)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Input Heights</h1>
<p><input type="text" placeholder="text"></p>
<p><input type="search" placeholder="search"></p>
<p><input type="tel" placeholder="tel"></p>
<p><input type="url" placeholder="url"></p>
<p><input type="email" placeholder="email"></p>
<p><input type="datetime" placeholder="datetime"></p>
<p><input type="date" placeholder="date"></p>
<p><input type="month" placeholder="month"></p>
<p><input type="week" placeholder="week"></p>
<p><input type="time" placeholder="time"></p>
<p><input type="datetime-local" placeholder="datetime-local"></p>
<p><input type="number" placeholder="number"></p>
<!-- <p><input type="range" placeholder="range"></p> -->
<!-- <p><input type="color" placeholder="color"></p> -->
<p><input type="submit" value="submit"></p>
<div class="fixed-top">
<input type="range" step="0.01" id="fontSizer" max="54" min="10" value="16">
</div>
然而,它并不完美。误差不是线性的,我怀疑其中涉及一些舍入。有时在上面,有时在下面。
以em
单位定义高度(和填充),在这种情况下输入高度将遵循字体大小
$("input").each(function() {
var span = $('<span>');
$(this).parent().append(span);
setInterval(() => span.text($(this).outerHeight()), 100);
});
$('#button').on('click', function(){
$('form').css('font-size', 10 + Math.random() * 15);
});
input {
font: inherit;
display: inline-block;
vertical-align: middle;
box-sizing: border-box;
border: 1px solid silver;
margin: 0;
padding: 0.5em;
height: 2.5em;
}
[type="search"] {
-webkit-appearance: textfield;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
background-color: silver;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Input Heights</h1>
<button id="button">change font size</button>
<form>
<p><input type="text" placeholder="text"></p>
<p><input type="search" placeholder="search"></p>
<p><input type="tel" placeholder="tel"></p>
<p><input type="url" placeholder="url"></p>
<p><input type="email" placeholder="email"></p>
<p><input type="datetime" placeholder="datetime"></p>
<p><input type="date" placeholder="date"></p>
<p><input type="month" placeholder="month"></p>
<p><input type="week" placeholder="week"></p>
<p><input type="time" placeholder="time"></p>
<p><input type="datetime-local" placeholder="datetime-local"></p>
<p><input type="number" placeholder="number"></p>
<!-- <p><input type="range" placeholder="range"></p> -->
<!-- <p><input type="color" placeholder="color"></p> -->
<p><input type="submit" value="submit"></p>
</form>