У меня есть страница с несколькими интерактивными элементами <div>, и я хочу изменить их на <button>, чтобы упростить их идентификацию через jQuery. Но когда я изменяю <div> на <button> s, их размер изменяется. (Я строю их как фиксированную ширину и высоту, но кнопка отображается с другой шириной и высотой, чем div.)
Здесь jsfiddle, который воспроизводит проблему: http://jsfiddle.net/AjmGY/
Вот мой CSS:
.styled {
border: 4px solid black;
background: blue;
width: 100px;
height: 100px;
}
И мой HTML:
<div class="styled"></div>
<button class="styled"></button>
Я ожидаю увидеть две коробки одинакового размера, но нижний ящик (<button>) заметно меньше. Такое поведение совместимо во всех браузерах, на которых я его пробовал: Windows (Chrome, FireFox, IE, Opera) и Android (встроенный браузер и Dolphin).
Я попробовал добавить стиль display: block; к стилю, считая, что это может сделать их рендерингом с использованием тех же правил (т.е. сделать рендеринг button как a div, так как теперь он является блочным элементом), но это никакого эффекта - кнопка осталась меньше.
По мере увеличения ширины границы разница возрастает. Похоже, что кнопка border находится внутри width, а не выше и выше ее width, как и с <div>. Насколько я понимаю, это нарушает коробку , хотя W3C действительно говорит:
Является ли нормальным/документированным/ожидаемым поведением для button иметь свою границу внутри своей ширины и высоты, а не снаружи? Могу ли я полагаться на это поведение?
(Моя страница использует HTML-тип документа, если это относится.)