<img> 外层 div 高度大于 <img> 的原因

先看看如下的 HTML:

<!DOCTYPE html>
<div style="border:1px solid red; float:left; padding:0;"> <img src="xxx.jpg"></div>

在浏览器开发者工具中可以看到,div 的高度要高于 img 的高度,然而 div 本身并没有 padding。

尝试了各种解决的办法,一一说下:

  • 去掉 DOCTYPE 声明,这倒是好了,可这是 HTML5 的标准声明,这肯定不是正解。
  • 给 img 设置 display:block; 样式
  • 给 img 设置 vertical-align:bottom; 样式
  • 给 img 设置 float:left; 样式
  • 给 div 设置 line-height:0; 样式。因为 line-height 属性继承自其父元素,所以要在其父元素上设置这个值就可以了
  • 给 div 设置 font-size:0; 样式
  • 给 div 设置 height,值等同于图片,不过如果图片的高度不是固定的,就不太合适了

至于原因,初步怀疑和浏览器的 user agent stylesheet 有关。

https://developers.google.com/chrome-developer-tools/docs/settings 中,有这么一段描述:

The user agent refers to the browser. Each browser implements a default stylesheet consisting of basic style rules which are applied to DOM Elements in a page. If you've ever had a difficult time removing white-space between two elements, for example, it may have been because of the user agent stylesheet adding a default margin or padding to that particular type of element.

大意就是,user agent stylesheet 有时会给某些元素加上一个默认的 margin 和 padding,从而导致样式出问题。

早期的 Chrome(43.0 之前) 可以通过如下步骤关闭 user agent stylesheet:

  • Open Chrome dev tools
  • Click gear icon on bottom right
  • In General section, check or uncheck "Show user agent styles"

现在最好的办法就是通过 css reset 来将 user agent stylesheet 里设置的默认 margin 和 padding 重置为 0。

不过需要注意的是,不止 Chrome 有这玩意,IE、Firefox、Webkit 内核的浏览器都有。

参考资料:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,844评论 1 92
  • 1.块级元素和行内元素 块级(block-level)元素;行内(内联、inline-level)元素。 块元素的...
    饥人谷_小侯阅读 2,067评论 1 4
  • 一 外部式css样式 (也可称为外联式)就是把css代码写一个单独的外部文件中,这个css样式文件以“.css...
    KunMitnic阅读 991评论 0 1
  • 我刚刚跟朋友从城南的,水泉峪村回来。一路上挖了许多蒲公英,白蒿,还从路边的花椒树上掐了一些花椒叶。准备中午炸花椒叶...
    xuezhu766阅读 361评论 0 0
  • 说在最前面的话,简称前言: 很多人喜欢“谈人生” 说来也是可笑 一个连人都没生过,父母也没做过 一点生活阅历都没有...
    喵婷与肥妈阅读 698评论 0 2