如何删除Image元素下面的空白行及为什么行内元素有底线
翻译练习
原博客地址:Removing White Space Below Image Elements, or Why Inline Elements Have Descenders
HTML中Image元素下面展示的空白行经常造成困惑,但是这里有一个合乎逻辑的解释:Image是行内元素,行内元素都有底线。
如果你曾经试着把一个<img>标签包裹在一个设置了边框或者背景色的容器里,你就会碰到臭名昭著的“什么鬼???!!!为什么我的图像下面有内边距?”的问题。如果你尽职尽责地去查找“删除图像下面的空白行”,你大概会找到解决方案(或者这篇文章,提供了解决方案):使用CSS把img设置为块级元素,然后图像下面这个烦人的空白行就神奇地消失了。可能看起来像这样:
img{
display: block;
}
底线的问题
现在你清楚了解决方案,让我解释一下为什么会这样。了解原因会帮助你记住解决方案,也会让你理解这不是一个bug,而是一个历史遗留的问题。
让我们绕道看看字体排版的世界:

当你看着我在这里写的文本时,你会注意到小写字母分成三组:a, c, e, m, n, o, r, s, u, v, w, x, z, æ, and ø,这些高度一致,都包含在基线和肩线之间(见上图)。其他的字母要么有顶线(b, d, f, h, k, l, t),要么有底线(g, j, p, q, y)。顶线是字母肩线突出向上的部分,底线是字母基线以下的部分。

这些跟图像有什么关系呢?简单:在HTML中<img>标签是一个行内元素。这意味着它被当成文本处理。当文本被放置在页面中时就为底线留出了空间。换句话说,你在看到的图像下面的空白行就是浏览器假设在文本中在图片之前或之后应给有一个底线,从而给它留出空间。这个空白行问题出现的原因是因为图像最初被引入的时候是被认定为行内元素的,今天我们主要把它当成块级元素来使用。正如我早先所说,这都是由于历史遗留的问题。
所以,总结一下:图像是假定为有底线的行内元素。当你想让它表现的像块级元素,那就把它定义为块级元素,然后底线就神奇的消失了。
完结。
如何删除Image元素下面的空白行及为什么行内元素有底线的更多相关文章
- CSS里常见的块级元素和行内元素
根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display属性值为“block”,成为“块级 ...
- CSS学习笔记——盒模型,块级元素和行内元素的区别和特性
今天本来打算根据自己的计划进行前端自动化的学习的,无奈早上接到一个任务需求需要新增一个页面.自从因为工作需要转前端之后,自己的主要注意力几 乎都放在JavaScript上面了,对CSS和HTML这方面 ...
- 行内元素有哪些?块级元素有哪些?CSS的盒模型?转载
块级元素:div p h1 h2 h3 h4 form ul行内元素: a b br i span input selectCss盒模型:内容,border ,margin,padding css中的 ...
- 【CSS3】块级元素与行内元素的区别
一.行内元素与块级函数的三个区别 行内元素的特点: 和其他元素都在一行上: 高,行高及外边距和内边距部分可改变: 宽度只与内容有关: 行内元素只能容纳文本或者其他行内元素. 行内元素设置width无效 ...
- Html行内元素和块级元素
1.关于行内元素和块状元素的说明 根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display ...
- html块级元素与行内元素
1.关于行内元素和快元素的说明: 根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display ...
- [HTML/CSS]盒子模型,块级元素和行内元素
目录 概述 盒子模型 块级元素 行内元素 可变元素 总结 概述 在div+css中,了解块级元素和行内元素还是非常有必要的,比如:对行内元素使用width属性就会失效.虽然自己不是做前端的,但是,在项 ...
- CSS行内元素
一.典型代表 span a ,strong em del, ins 二.特点: 在一行上显示 不能直接设置宽高 元素的宽和高就是内容撑开的宽高. <style type="text/c ...
- 【HTML】行内元素与块级元素
一.行内元素与块级元素的三个区别 1.行内元素与块级元素直观上的区别 行内元素会在一条直线上排列,都是同一行的,水平方向排列 块级元素各占据一行,垂直方向排列.块级元素从新行开始结束接着一个断行. 2 ...
随机推荐
- Codeforces Round #649 (Div. 2) B. Most socially-distanced subsequence
题目链接:https://codeforces.com/contest/1364/problem/B 题意 给出大小为 $n$ 的一个排列 $p$,找出子序列 $s$,使得 $|s_1-s_2|+|s ...
- 【noi 2.6_9284】盒子与小球之二(DP)
题意:有N个有差别的盒子和分别为A个和B个的红球和蓝球,盒子内可空,问方案数. 解法:我自己打的直接用了求组合C的公式,把红球和蓝球分开看.对于红球,在N个盒子可放任意个数,便相当于除了A个红球还有N ...
- Bone Collector II HDU - 2639 01背包第k最大值
题意: 01背包,找出第k最优解 题解: 对于01背包最优解我们肯定都很熟悉 第k最优解的话也就是在dp方程上加一个维度来存它的第k最优解(dp[i][j]代表,体积为i能获得的第j最大价值) 对于每 ...
- Java基础(第一期)
Java基础 1.注释 Java中注释有三种: 单行注释 // 多行注释 /* */ 文本注释(用的较少) /** */ 书写注释是一个非常好的习惯 BAT 平时写代码一定要注意规范 //有趣的代码注 ...
- Windows Terminal 更换主题
1. 打开设置,是个json文件 2. 在此处获取主题配置:https://atomcorp.github.io/themes/ 3.将主题配置粘贴到schemes节点(可以增加N个) 4.配置每个命 ...
- 国产smartbits版本-minismb测试高恪路由器IP限速
Minismb测试仪表是复刻smartbits的国产版本,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具测试任何ip网络设备的端口吞吐率,带宽,并发连接数和 ...
- 【非原创】codeforces 1060E Sergey and Subway 【树上任意两点距离和】
学习博客:戳这里 本人代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 con ...
- 【非原创】codeforces 1070C Cloud Computing 【线段树&树状数组】
题目:戳这里 学习博客:戳这里 题意:有很多个活动,每个活动有持续天数,每个活动会在每天提供C个CPU每个CPU价格为P,问需要工作N天,每天需要K个CPU的最少花费. 解题思路:遍历每一天,维护当前 ...
- Redis五大类型及底层实现原理
目录 简单动态字符串链表字典跳跃表整数集合压缩列表对象 对象的类型与编码字符串对象列表对象哈希对象 集合对象有序集合对象类型检查与命令多态内存回收对象共享对象的空转时长 简单动态字符串 导读 Red ...
- free ebooks all in one
free ebooks all in one pdf / ppt mobi / epub free programming ebooks free IT ebooks open free ebooks ...