line-height和vertical-align的关系(一)

说在前面:最近在学习张鑫旭大神的《css行高line-height的一些深入理解及应用》和《CSS深入理解vertical-align和line-height的基友关系》这两篇文章的时候遇到一些问题,困扰了很久,如果有遇到相同问题的,希望本文对你有所帮助,如果有理解错误,还请指出!更多内容还请看,以上两篇文章,比我讲的更详细,这里只分享自己的一些理解。

一、问题:

​ div盒子(其他元素同)在未设定高度的时候,高度由内容的高度撑开。好像这句话没什么问题,就像下面一样:

01.png
   * {
         margin: 0;
         padding: 0;
     }
div {
         width: 200px;
         border: 1px solid;
         margin: 50px auto;  
     }
img {
       width: 100px;
    }
<div>
     <img src="/Pictures/Saved Pictures/路飞.jpg" alt="">
</div>

​ 但细心的你一定发现,为什么图片的底部边缘怎么没有和div的底部边挨在一起,不是说div的高度在未设定的情况下,高度由内容的高度撑开嘛?

02.png

​ 首先这句话没有错,但为什么会有这个问题呢?

​ 这里就和vertical-align有关系了,图片(行内块元素同)默认和文字的对齐方式baseline,也就是说图片是基于基线对齐,那基线时什么呢?这里就又和line-height又有关了。

​ 这里直接用大神的话:

“行高”顾名思意指一行文字的高度。具体来说是指两行文字间基线之间的距离。基线实在英文字母中用到的一个概念,我们刚学英语的时使用的那个英语本子每行有四条线,其中底部第二条线就是基线,是a,c,z,x等字母的底边线。下图的红色线即为基线。

base_line.jpg

​ 如果对于行高有一定理解的你会问,在div盒子里面没有文字,怎么会和文字的基线对齐呢?这里可以理解为了让图片和文字对齐,在图片(行内块)前后有个透明字符存在且宽度为0,不占位置,方便的图片(行内块)在垂直方向的对齐,为了方便理解我们可以自己加一个真实的字符,情况也是相同的,请看:

03.png

​ 所以这里 div的高度 = 内容的高度 = 图片的高度 + 透明字符的高度,但这个等式不严谨,不是完全相等,还请看下面。

二、多出来的高度是什么?

​ 盒子的高度是怎么来的呢?

​ 答;盒子的高度是由所有行框高度累加起来的。

04.png

注意:文本框内的线与线的距离画的不是很严谨

这里还要解决两个问题:什么是行内框?什么行框?

行内框:

1.行内元素宽高组成的框或者行内块宽高形成的框;

2.行内元素的行内框的高度等于line-height

3.行内块的行内框的高度等于图片的高度 + padding + border

行框:

1.由所有的行内框组成的;

2.==行框的高度最高的行内框顶部 到 最低行内框的底部之间的距离==

那么我们现在就可以很清楚的知道,下面多出来高度的部分其实是 基线文本行框距离。

05.png

三、怎么解决这个问题?

​ 知道多出来的部分高度是什么就很好解决了。

​ 在还是图片(行内块)默认vertical-align:baseline情况下,我们可以让文本行内框的行高足够小,至少要使行高小于等于中线到基线的距离(文本默认在文本行内框中垂直居中),这样文本行内框的底部与基线重合或者在基线之上。在文本的基线和它的行内文本框底部重合的时候,最低的行内框是 图片文本框(和文本的基线对齐) 和 文本行内框;文本的行内框的底部在基线之上时,最低的就是图片文本框了。这两种情况下外面div的高度就和图片的高度相等了。

写成代码的话可以:

1.直接控制line-height的值,line-height=0 ;

06.png
* {
            margin: 0;
            padding: 0;
        }
        div {
            width: 200px;
            border: 1px solid;
            margin: 50px auto;
            line-height: 0;
            
        }
        img {
            width: 100px;
        }
<div>
        <img src="Pictures/Saved Pictures/路飞.jpg" alt="">
        <span>x</span>
    </div>

2.间接控制line-height行高等于0,可以让font-size = 0 。


07.png
 * {
            margin: 0;
            padding: 0;
        }
        div {
            width: 200px;
            border: 1px solid;
            margin: 50px auto;
            /* line-height: 0; */
            font-size: 0;
            
        }
        img {
            width: 100px;
        }
<div>
        <img src="Pictures/Saved Pictures/路飞.jpg" alt="">       
        <span>x</span>
    </div>

四、其他方法

​ 在理解多余出来的高度是怎么来的之后,我们还可以用其他方法来去掉这个多余的高度,使图片(行内块)不基于baseline对齐就好了,比如top、middle、bottom等等,或者解决改变图片的(行内块)的显示模式为block。

五 、待续

​ 迷迷糊糊,说了自己的一些理解,有的问题还没讲到,只能待有空了再补上😂

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • 参考文章:深入了解CSS的line-height属性Vertical-Align: 你需要知道的所有事【译】Ver...
    若邪Y阅读 3,440评论 1 6
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,751评论 1 92
  • vertical-align 先看一个例子 baseline(默认值)基线,盒子的基线大约在其内部文字(匿名)盒子...
    吴立宁阅读 2,531评论 0 4
  • 基本框 CSS假定每个元素都会生成一个或多个矩形框,这称为元素框。各元素框中心有一个内容区(content are...
    exialym阅读 765评论 0 2
  • 有些东西我们经常用,但是我们却并不了解它的原理,所以一旦换了场景,好多东西就不知道该怎么用了。最近一直很纠结ver...
    朱小维阅读 4,935评论 8 34