inline「一」:从 image 底部白边初识 line-height

本文首发于个人博客 http://www.lijundong.com/image-and-line-height/

今天在做一个静态页面时,图片底部出现一条 3px 高度的白边,既不是 margin 也不是 padding,找了好久没能解决,后来才发现与 line-height 相关,问题解决后查缺补漏,这里作下笔记。
解决问题之前需要理清楚几个概念,基线、line-height、vertical-align、inline 元素。

基线(baseline)

基线(Baseline) 是字体排印学中的概念,指的是多数字母排列的基准线,大多字母都沿着红色基线排列,举个例子辅助理解

图中 xHh 字母的下边缘红线就是基线的所在,那么有没有一个特定的条件来定义基线呢?这里有个概念可供参考

字母x的下边缘(线)就是基线的所在。

这里又引出了 x-height 的概念,此处不表。

line-height

关于 line-height 如何定义的讨论,有说法是两条基线之间的距离,看到这个结论我首先想到第一行的行高如何处理,后来去找了资料,发现两条基线之间的距离即是 line-height 这样的结论并不准确。
关于 line-height 的定义,MDN 阐述如下:

On block level elements, the line-height property specifies the minimum height of line boxes within the element.
On non-replaced inline elements, line-height specifies the height that is used to calculate line box height.

block 元素中, line-height 的值等于元素中高度最低的行框(line box) 的高度值。
在 non-replaced inline 元素中,line-height 的值等于行框(line box) 的高度值。

**注:**
**replaced element 对比 non-replaced element**- replaced element: 例如 img、video、canvas 此类渲染出的内容引用外部的元素
- non-replaced element: 渲染自身的 content

例如

<a href="lijundong.com">Leeon Blog</a>
此类,渲染出的内容来自自身。

inline(内联) 元素

HTML5 中的常见 inline 元素如下:

  • inline:span、strong、em
  • inline-block:input、button、textarea、select、img

vertical-align

vertical-align 作用于 inline 元素 以及 table-cell 元素,还有

::first-letter
::first-line
,更多内容可以参见 MDN

属性分类:

适用于 inline 元素的属性:

/* keyword values */
vertical-align: baseline;  /*基于基线对齐*/
vertical-align: sub;
vertical-align: super;
vertical-align: text-top;
vertical-align: text-bottom;
vertical-align: middle;
vertical-align: top;
vertical-align: bottom;/* <length> values */
vertical-align: 10em;
vertical-align: 4px;/* <percentage> values */
vertical-align: 20%;/* Global values */
vertical-align: inherit;
vertical-align: initial;
vertical-align: unset;

适用于 table-cell 的属性:

vertical-align: top;
vertical-align: bottom;
vertical-align: middle;

回到问题

问题代码示例如下,

<style >* {padding: 0;margin:  0;}body {background-color: #ccc;}img {width: 100px;}div ,p {font-size: 100px;background-color: #fff;}
</style>
<body><div ><img src="headpic.png"></div>
</body>

代码效果图如下,红框圈出部分为出现的白条

通过对代码稍作修改可以轻松看出问题所在,实图如下

有了上面的铺垫,现在回头看遇到的问题,就很简单了,究其原委,首先 img 元素默认对齐方式为

vertical-align: baseline;
,这就导致了,baseline 以下的部分被空了出来,显示了背景的白色。

问题找到了,对症下药可得出下面的解决方案:

  • 根本上消除 img 的对齐方式 —— 块状化:
img { display: block; 
}
  • 更改 img 对齐方式,以下三种均可
img {vertical-align: top;vertical-align: middle;vertical-align: bottom;
}
  • 更改行高,行高是两条 baseline 之间的距离,因此可以暴力的让行高消失
{ line-height: 0;/* font-size: 0; 当 line-height 使用数值、百分比或者 rem 定义时也可用这种方式,因为 line-height 参照的是 font-size 的值*/
}

总结

遇到问题多多求证,即便是很常见的问题也会挖出大学问,在求证的过程中也不能尽用拿来主义,多参考 w3c 和 MDN 的文档。
写的过程中,修修补补了好几回,关于 vertical-align 的内容讲的很仓促,后面会补上,如果文中表达有误,烦请指出,感谢。


参考:

  • CSS深入理解之vertical-align
  • CSS Baseline: The Good, The Bad And The Ugly
  • 基线 wiki
  • How CSS line-height is measured?
  • Understanding the CSS box model
  • Inline elements and line-height

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(转) STM32--ADC

原标题&#xff1a;STM32之ADC步骤小技巧&#xff08;英文&#xff09; 看到标题&#xff0c;别吓到哈、并不是要用英文写、至于原因是什么、请往下看&#xff1a; 言归正传&#xff1a;STM32的ADC模块的特色 1、1MHz转换速率、12位转换结果&#xff08;12位、记住这个12位哈、…

嗨,那里有回调!

因为是我的书包&#xff0c;所以我喜欢JavaScript 。 实际上&#xff0c;我已经开始喜欢JavaScritp的面向异步回调的编程风格 。 因此&#xff0c;当我发现自己处于非JavaScript环境中时&#xff08;例如Java&#xff09; &#xff0c;我往往会错过使用回调的机会。 好消息是…

GC内存可视化器教程–第一部分

正如您从以前的文章中可能已经读到的那样&#xff0c;要获得的Java程序员的一项关键技能就是理解和评估JVM的运行状况的能力&#xff0c;例如Java堆内存占用量以及垃圾回收过程。 为了实现上述目标&#xff0c;所有JVM供应商&#xff08;Oracle&#xff0c;IBM等&#xff09;都…

设置表格边框颜色

1、源码如下&#xff1a; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>设置表格边框颜色</title><meta http-equiv"keywords" content"keyword1,keyword2,keyword3"…

java se程序设计_JavaSE--Java 的基本程序设计结构

Java 对大小写敏感Java 中定义类名的规则很宽松。名字必须以字母开头&#xff0c;后面可以跟字母和数字的任意组合。长度基本上没有限制。但是不能使用 Java 保留字作为类名。标准的命名规范为&#xff1a;类名是以大写字母开头的名词。如果名字由多个单词组成&#xff0c;每个…

Python开发【第十九篇】:Python操作MySQL

本篇对于Python操作MySQL主要使用两种方式&#xff1a; 原生模块 pymsqlORM框架 SQLAchemypymsql pymsql是Python中操作MySQL的模块&#xff0c;其使用方法和MySQLdb几乎相同。 下载安装 1pip3 install pymysql使用操作 1、执行SQL 123456789101112131415161718192021222324252…

20180705 考试记录

T1 货物运输弱化版 题解&#xff1a; 倒着跑最短路就行没仔细看题凉凉 code: #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #define F(i,a,b) for(register int i(a);i<(b);i) using namespace std;int rd() {int x…

mysql集群跨地域同步部署_跨地域冗余 - 跨数据中心部署方案 - 《TiDB v2.1 用户文档》 - 书栈网 · BookStack...

跨数据中心部署方案作为 NewSQL 数据库&#xff0c;TiDB 兼顾了传统关系型数据库的优秀特性以及 NoSQL 数据库可扩展性&#xff0c;以及跨数据中心(下文简称“中心”)场景下的高可用。本文档旨在介绍跨数据中心部署的不同解决方案。三中心部署方案TiDB, TiKV, PD 分别分布在 3 …

使用Maven进行硒测试自动化

今天&#xff0c;我想帮助您更好地管理自动GUI测试&#xff08;Selenium&#xff09;。 在过去&#xff0c;我已经看到人们处理此问题的许多不同方式。 有些人只是使用Selenium-IDE编写这些普通HTML TestCases&#xff0c;将其存储在HDD上的某个位置&#xff0c;并在需要时手动…

js小练习题

1.2018年01月5日 11:40:30 星期三 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <title>Title</title>6 <script>7 8 function getCurrentDate(){9 //1. …

OC之OBJC2_UNAVAILABLE

OC之OBJC2_UNAVAILABLE】 1、What is OBJC2_UNAVAILABLE macro mean&#xff1f; 意即在OBJC2.0中&#xff0c;这些东西将被删除。 转自 https://www.cnblogs.com/tekkaman/archive/2013/04/24/3040727.html转载于:https://www.cnblogs.com/-WML-/p/9269067.html

使用prismjs为网站添加代码高亮功能

prismjs 是一款轻量、可扩展的代码语法高亮库&#xff0c;使用现代化的 Web 标准构建&#xff0c;使用 Prismjs 可以快速为网站添加代码高亮功能&#xff0c;支持超过113中编程语言&#xff0c;还支持多种插件&#xff0c;是简洁、高效的代码高亮解决方案。科技爱好者博客就是使…

Mockito – JAXB的RETURNS_DEEP_STUBS

很抱歉没有写一段时间&#xff0c;但是我正忙于为DZone编写JBoss Drools Refcard&#xff0c;而且我正在写一本有关Mockito的书&#xff0c;因此我没有太多时间来写博客了…… 无论如何&#xff0c;最近在我当前的项目中&#xff0c;我对使用Mockito和JAXB结构进行单元测试有一…

协作机器人(Collaborative-Robot)安全碰撞的速度与接触力

协作机器人&#xff08;Collaborative-Robot&#xff09;的安全碰撞速度和接触力是一个非常重要的安全指标。在设计和使用协作机器人时&#xff0c;必须确保其与人类或其他物体的碰撞不会对人员造成伤害。 对于协作机器人的安全碰撞速度&#xff0c;一般会设定一个上限值&…

jackson - @JsonProperty的使用

jackson的maven依赖 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.5.3</version> </dependency> 所以引入这一个依赖就可以了 JsonProperty 此注解用于属…

python 表达式求值数据结构_python 数据结构与算法

python 数据结构与算法1 python常见数据结构性能1.1 List1.1.1 安索引取值和赋值1.1.2 列表append和__add__()1.1.3 使用timeit模块测试执行时间1.1.4 List基本操作的大O数量级1.2 Dict1.2.1 dict数据类型2 线性结构 Linear Structure2.1 栈Stack2.1.1 抽象数据类型Stack2.1.2 …

CSS3新特性罗列

接触CSS3这么久了&#xff0c;总是到要用的时候直接拿来用&#xff0c;却没有好好地总结归纳一下&#xff0c;那就在这里好好梳理一下吧。 CSS3边框&#xff1a; 圆角边框&#xff1a; 关键&#xff1a;border-radius <!DOCTYPE html> <html> <head> <…

Log4j 2:性能接近疯狂

最近&#xff0c;Apache社区中一位受人尊敬的成员尝试了Log4j 2并在Twitter上写道&#xff1a; TheASF &#xff03;log4j2摇摇欲坠 &#xff01; 性能接近疯狂^^ http://t.co/04K6F4Xkaa — Mark Struberg&#xff08;struberg&#xff09; 2013年5月7日 &#xff08;来自M…

Uncaught SyntaxError: Invalid Unicode escape sequence异常处理

今天碰到一个问题&#xff0c;页面报错&#xff1a;Uncaught SyntaxError: Invalid Unicode escape sequence ,{index:operate,name:operate,label:<s:text name"com.vrv.cems.ptp.installSoft.operate"></s:text>,width:getPerWidth(0.1),formatter:fun…

26、jQuery

一. jQuery简介 (一) jQuery是什么&#xff1a; 是一个javascript代码仓库 是一个快速的简洁的javascript框架&#xff0c;可以简化查询DOM对象、处理事件、制作动画、处理Ajax交互过程。 (二) jQuery优势 体积小&#xff0c;使用灵巧(只需引入一个js文件)方便的选择页面元素(模…