Как отметил 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>
Обратите внимание, что ползунок диапазона изменяет только font-size
на <body>
(и обновляет отображаемый размер соответственно).
Совершенно другой подход заключается в увеличении значения отступа для обычных, чтобы они достигли того же размера, что и те, у которых есть счетчики.Самое близкое, что я получил к чему-то приличному, это
: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>
Однако, это не идеально.Ошибки не являются линейными, и я подозреваю, что есть некоторое округление.Иногда выше, иногда ниже.