У меня есть страница с некоторыми интерактивными <div>
элементами, и я хочу вместо этого изменить их на <button>
s, чтобы было легче идентифицировать их с помощью jQuery.Но когда я изменяю <div>
s на <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
похожим на div
, поскольку теперь он является блочным элементом), но это не дало эффекта - кнопка осталась меньше.
По мере того как я увеличиваю ширину границы, расхождение увеличивается.Похоже, что кнопка border
находится внутри ее width
, а не выше и выше width
, как у <div>
.Насколько я понимаю, это нарушает коробочную модель , хотя W3C действительно говорит:
пользовательские агенты могут отображать границы для определенных элементов пользовательского интерфейса (например,кнопки, меню и т. д.) иначе, чем для «обычных» элементов .
Это нормальное / документированное / ожидаемое поведение для button
, когда его граница находится внутри его шириныа высота, а не снаружи?Могу ли я рассчитывать на это поведение?
(Моя страница использует тип документа HTML5, если это актуально.)