CSS line-height浅析(2)

上一篇仅仅考虑了纯文本的情况,现在,来探讨一下图像。

首先,请看如下代码:

 1 <head>
 2 <style>
 3 div {
 4     background-color: red;
 5     line-height: normal;
 6 }
 7 </style>
 8 </head>
 9 <body>
10 <div>
11 <img src="1.jpg" src="A picture" style="width:178px;height:100px">
12 </div>
13 </body>

其效果图是这样的:

可以看到,图像的下边缘依然有一些背景颜色,极其影响页面的美观,那么,这些红色背景是怎么来的呢?

如果我们改变line-height的值,会发现图像下边缘的红色背景区域也会跟着变化,比如将line-height值设置为50px,其效果图为:

那么,是什么原因导致了这一变化呢?

为了说明得更清楚,我们向页面中添加另外一些辅助性的东西;代码如下:

 1 <head>
 2 <style>
 3 div {
 4     font-size: 16px;
 5     background-color: red;
 6     line-height:50px;
 7 }
 8 span {
 9     display: inline-block;
10     background-color: green;
11 }
12 </style>
13 </head>
14 <body>
15 <div>
16 <img src="1.jpg" src="A picture" style="width:178px;height:100px">
17 <span>Something xxx</span>
18 </div>
19 </body>

其页面效果为:

如果我们改变字体大小,比如将font-size值设置为32px;其页面效果为:

通过上一篇文章的分析,我们知道,line-height决定了行内元素的高度,所以在我们只改变font-size而没有改变line-height的情况下,绿色背景的文本高度并没有变化。

由于font-size增加了,所以内容区的高度增加了。

图像的下边缘没变,文本的基线也就不变(vertical-align的默认值为baseline,基线对齐)。

然而,文本内容区增大了,在整体高度不变的前提下,只能行间距减小,于是整个盒子都表现得向上移动。

右边文本元素下边占的地方少了,左边图像下边的红色背景区域也相应减少了。

然后我们删掉<span>元素,保留所有CSS设置,会发现图像纹丝不动,如下图:

也就说,在图像右边有文本的时候,图像与其基线对齐;即使图像右边没有文本,图像也与一个假想的文本的基线对齐;由此,引出了一个“隐藏文本节点”的概念。

(注:此概念来自张鑫旭大神,如需了解原作者的观点,请移步他的个人博客,本文观点只代表我个人理解)

vertical-align:baseline,要求一个元素的基线与其父元素的基线对齐;

如果一个元素没有基线,比如<img>元素和<input>元素或者其它替换元素,则是元素的底端与父元素的基线对齐。

然而,父元素是一个空的div,如何确定父元素的基线?

这时,我们就可以假设,其实父元素中有一些隐藏文本,只是我们看不见,它们在暗中确定了父元素的基线。这就是我对于“隐藏文本节点”的理解。

通过前面的分析,可以得知,图像下边缘多出来的一部分红色背景,实际上是隐藏文本节点以及vertical-align:baseline在作怪。

那么相应地,也就提供了几种去除那些红色背景的方法。

方法一:由于vertical-align只能作用于行内元素和替换元素(如图像和表单输入元素),将图像块状化,就能解决问题。代码如下:

1 img {
2     display:block;
3 }

方法二:由于vertical-align的默认值为baseline,图像的下边缘与那些隐藏文本的基线对齐,才会多出来一些红色背景;如果改变vertical-align的值,将其设置为bottom,底线对齐,就能解决问题。代码如下:

1 img {
2     vertical-align: bottom;
3 }

方法三:设置line-height的值足够小,让隐藏文本的基线上移。代码如下:

1 div {
2     line-height: 0;
3 }

这三种方法的页面效果一致,实践中可根据需要使用。

时间: 2024-08-06 11:57:33

CSS line-height浅析(2)的相关文章

line height 与 vertical align

一.line height 其中代表inline box(包含上下间距,若height==line-height,则行间距=line-height - font-size/2),big代表content area. 注: 若line-height < content area ,则line box要取line-height的值,这也是为什么会重叠的原因. line-height属性取值: 1. % 若自身没有设置line-height,则line-height = 父元素的font-size *

Jquery CSS 操作 - height() 方法

一.height() 方法 height() 方法返回或设置匹配元素的高度 $(".btn1").click(function(){ $("p").height(50); }); height方法事例 Jquery CSS 操作 - height() 方法,码迷,mamicode.com

深入了解css的行高Line Height属性

来源:http://www.cnblogs.com/fengzheng126/archive/2012/05/18/2507632.html 什么是行间距? 古时候我们使用印刷机来出来文字.印刷出来的每个字,都位于独立的一个块中. 行间距,即传说中控制两行文字垂直距离的东东.在CSS中,line-height被用来控制行与行之间垂直距离. 不过,行间距与半行间距,还是取决于CSS中的line-height.那么,如何来使用line-height呢? 默认状态,浏览器使用1.0-1.2 line-

CSS——对height和line-height的理解

最近在做CSS界面时经常遇到line-height和height这两个属性,一直没搞很明白,今天静下心来好好网上查阅了一下,算是有所领悟.https://blog.csdn.net/a2013126370/article/details/82786681这个博主写的很不错,至少让我对line-height和height的理解更深刻了,值得借鉴. 一.一些基本概念 1.行高是指文本行基线间的垂直距离. 2.行距是上行的底线和下一行顶线之间的距离. 我个人理解,可以得出以下结论: 1. 在没有设置d

CSS position:absolute浅析

一.绝对定位的特征 绝对定位有着与浮动一样的特性,即包裹性和破坏性. 就破坏性而言,浮动仅仅破坏了元素的高度,保留了元素的宽度:而绝对定位的元素高度和宽度都没有了. 请看下面代码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>绝对定位的特征</title> 6 <style> 7 .box1,.box2,.b

demopu教你学习css,css中height,min-height,max-height的区别

min-height  样式用于设置元素的最小高度. max-height  样式用于设置元素的最大高度 Javascript object.style.maxHeight="20"; Jquery $().css('max-height',20); 更多学习  http://www.demopu.com/doc/css/max-height.html www.demopu.com / css / max-height

如何使CSS中height:100% 起作用

1.按照w3c中的width和height属性,可以明确%设定宽高是根据父元素的宽高来的: 2.Web浏览器在计算有效宽度时会考虑浏览器窗口的打开宽度.如果你不给宽度设定任何缺省值,那浏览器会自动将页面内容平铺填满整个横向宽度.即我们不设置宽,会自动填满整个横向宽度,因为页面并没有缺省的高度值,所以,当你让一个元素的高度设定为百分比高度时,无法根据获取父元素的高度,也就无法计算自己的高度. 解决方案: html,body{ height: 100%; margin: 0; padding: 0;

前端用户体验优化: JS &amp; CSS 各类效果代码段

前言 不定时更新 在线预览 https://zzyper.github.io/opti... 在线预览的源码 https://github.com/zzyper/opt... 部分内容仅兼容webkit内核,其他内核自行查询 可控密度的虚线分隔线 css .line { height: 1px; width: 100%; transform: scaleY(0.4); -webkit-transform: scaleY(0.4); background-image: linear-gradien

【原】移动web点5像素的秘密

最近和一个朋友聊天,朋友吐露了工作上的一些不开心,说自己总是喜欢跟别人比较,活得比较累,这种感觉大部分人经历过,往往觉得是自己心态不好,其实不然,这是人性,此时应该快速摆脱这种状态,想到DOTA大9神的笔录,游戏也是人生,懂得思考的人生才会不断促使自己进步,详细我不清楚了,大概意思是这样:人这一辈子就一次,快乐很重要,人如何感受到快乐,说起来真的不难,有两个点,一点是"你能够让别人喜欢你":另外一点是"跟好朋友一起时你能够卸下面具",是怎么样的就怎么样.希望能给不开

【转】移动web点5像素的秘密

你可能不知道的.5px 移动web设计中,在retina显示屏下网页会由1px会被渲染为2px,那么视觉稿中1px的线条还原成网页需要css定义为.5px.文章开头的漫画中,细心的设计师发现粗线条并吐槽,前端哥的理由是因为css的border-width不支持.5px,所以用了1px来替代,最终渲染为2px的粗线条,这个问题往往会被忽视,从而导致移动网页中普遍存在2px的粗线条. retina下的网页1px被渲染为2px(甚至是3px,例如iPhone 6 Plus),可参考的文章<高清显示屏原