2014-08-27 4 views
1

Почему заходящим бы line-height, чтобы соответствовать font-size причины этого странного поведение:Противоречивая высота линии между входным и LABEL

Высоты label является 16px, но input является 18px ... Почему?

Высота будет меняться, если я сменю line-height: 18px или выше. Что происходит?

JSFiddle Example

<style> 
label, input { 

    font-size: 16px; 
    line-height: 16px; 
    padding: 0; 
    margin: 0; 
    float: left; 
    border: none;    
    font-family: Arial, Helvetica, sans-serif; 
} 
label { 
    position: absolute; 
} 
</style> 
<form> 
    <label for="email">Enter your email</label> 
    <input type="email" name="email" />  
</form> 

Chrome v36 скриншотов показывает разницу высоты в 16/18px и не border, margin или padding: Label - 16px height Input - 18px height

+1

Интересно. Если вы не укажете высоту линии, то они будут равны 18px. На вход не влияет правило строки высоты (попробуйте изменить его на .5em.) – kinakuta

+1

Если вы внимательно присмотритесь, ввод текста добавит отладку 1px внизу и верхней части внутренней области ввода ввода. Может быть поведение браузера по умолчанию ... Итак, на самом деле, 'line-height' равны. – LcSalazar

+0

Инспектор Chrome показывает, что границы, отступов и полей нет. Поскольку значение 'line-height' установлено равным 16px, что вызывает разницу в высоте. – Justin

ответ

1

От MDN's documentation:

На инлайн элементов, таких как кнопки или другого элемента ввода, высота линии не имеет никакого эффекта.

Если вы удалите высоту линии, оба элемента будут иметь вычисленную высоту 18 пикселей. Установив высоту строки на размер шрифта (и fyi, обычно высота строки устанавливается на значение без единицы, например, 1 будет равно 1x размер шрифта.) Установив его на 16 пикселей, это фактически ограничивая высоту, основанную на высоте линии по умолчанию, от 18px, ее естественная высота, до 16px, значение ограничения строки. Если вы установили высоту линии в .5, you'll notice the effect более драматично:

input, label { 
    line-height: .5; 
    background: #eee; 
} 
input { 
    background: #aaa; 
} 
+0

Начинать иметь смысл. У меня есть это право: «font-size» - 16 пикселей, что фактически делает 18-пикс по умолчанию «line-height». При уменьшении 'line-height' ниже своего значения по умолчанию метка переполняется в пространстве выше, тогда как' input' игнорирует 'line-height' меньше, чем размер по умолчанию. Так что это означает, что 'input' позволяет' line-height' быть больше, чем значение по умолчанию, и становится больше с ним, но не меньше. – Justin

+0

Да, странно, что он позволяет вводить больше, но не меньше, но это в значительной степени суммирует его. – kinakuta

1

Вы могли бы быть смущены о том, что line-height представляет в CSS. Он фактически определяет интервал между строками в абзаце, а не фактическую высоту соответствующего элемента управления HTML.

FYI, разность высот обусловлена ​​границей 1px, которая присутствует во входе, но отсутствует на этикетке.

+0

Попробуйте изменить высоту линии в моем примере, и вы увидите, что она меняет высоту. http://jsfiddle.net/3cru8fv0/3/ – Justin

+0

Да, это может увеличить прописку внутри элемента управления, но для этого вы действительно должны использовать CSS-свойства 'padding' или' height', а не 'line-height'. 'line-height' служит совершенно другой цели. Посмотрите его в Интернете. – uncoder

+0

Посмотрите на мои скриншоты - границы нет. – Justin