根据w3schools:
重要:使用CSS设置元素的宽度和高度属性时,只需设置内容区域的宽度和高度。要计算元素的完整大小,还必须添加填充,边框和边距。
我在实践中使用<img...>
标记找到的是,我是通过CSS指定宽度和高度,还是使用width
和height
属性<img...>
标记,不仅仅是我内容的大小受到影响。整个图像内容,填充和边框的大小都与我指定的宽度和高度相匹配。
在此上加上一些具体数字:
正常工作的CSS是:
.flag-image {
width: 20px;
height: 15px;
position: relative;
top: 3px;
padding: 1px;
border: lightgray 1px solid;
}
如果确实如此,我只应该指定内容大小,那么宽度和高度不应该是16px和11px吗?为什么,如果我使用16px和11px,我的旗帜图标被压得太小了?我拍了一个屏幕截图,放大了它,并计算了像素。这是20px和15px给我正确的结果。
这是img
标签的特别之处吗?我是否遗漏或误解了HTML或CSS规范?
答案 0 :(得分:3)
您的假设是正确的 - 默认情况下,img
元素在计算考虑边框和填充的大小时应与其他任何元素相同。对您所观察到的内容最可能的解释是,您的样式表或第三方库或框架的样式表在某处影响box-sizing: border-box
元素的img
规则。< / p>
如果删除该规则不是一个选项(例如,因为它a universal rule),您可以通过将box-sizing
重置为content-box
来覆盖它,以便您可以设置尺寸最有意义的是:
.flag-image {
width: 16px;
height: 11px;
position: relative;
top: 3px;
padding: 1px;
border: lightgray 1px solid;
box-sizing: content-box;
}
或者您可以选择使用它并保留宽度和高度声明,但缺点是数字看似违反直觉。
答案 1 :(得分:1)
如果您想要提到的确切box-sizing: border-box
和width
,则需要对图片使用height
...请参阅以下示例
如果您使用width
和height
属性到img
而不是css,那么如果{{1},则图片的总宽度将为width + padding + border
}未设置为box-sizing
border-box
console.log("img1 dimension: " + $(".img1").outerWidth() + "x" + $(".img1").outerHeight())
console.log("img2 dimension: " + $(".img2").outerWidth() + "x" + $(".img2").outerHeight())
console.log("img3 dimension: " + $(".img3").outerWidth() + "x" + $(".img3").outerHeight())
.img1,
.img2 {
width: 30px;
height: 25px;
position: relative;
padding: 1px;
border: lightgray 1px solid;
}
.img3 {
position: relative;
padding: 1px;
border: lightgray 1px solid;
}