Zxhnext 我的前端之旅

line-height和vertical-align

2017-03-22
Zxhnext
css

阅读量


1. 了解行内元素的盒子

1.1. 匿名文本:不在内联元素标签内的光秃秃的文字就是匿名文本

 <div>hello<span>wrold</span></div>
 <!--hello就是匿名文本  wrold就不是匿名文本-->

1.2. em框(字符框):em框由字体定义.就是单个字符外包裹的看不见的框.不同的字体可能超出框的边界,也可能更矮一些.em框的高度由font-size决定
1.3. 内容区:内容区由多个em框串起来组成.在一行显示.
1.4. 行间距:行间距=行高-内容区域高度
1.5. 行内框(内联盒子):行内框高度等于行高.
1.6. 行框盒子:每一行就是一个行框盒子,由多个行内框组成.行框的上边界等于里面最高的行内框上边界.行框的下边界等于里面最低的行内框下边界.
1.7. 包含盒子:标签中有多行文字.多个行框就组成了一个包含盒子.
行内元素盒子模型

2. 精讲line-height

line-heigt的含义:

文字基线距离下一行文字基线的距离成为行高.

内联元素的高度由行高决定
1.行高由于其继承性,影响无处不在.即使单行文本也不例外
2.了解行内元素的盒子模型.

行高=内容区域高度+行间距

line-height数值计算

1.使用数值作为行高值如何计算
例如:line-height:1.5
假设字体大小为20px
line-height=1.5 * 20px =30px

2.使用数值加单位作为行高值
例如 30px 10rem 5em 10pt

3.使用百分比作为行高值
例如:line-height:150%
假设文字大小为20px
line-height=150% * 20 = 30px

为什么要使用数值作为行高值?

    .box1{font-size: 14px;line-height: 1.5; width: 300px;}
    .box2{font-size: 14px;line-height: 30px; width: 300px;}
    .son{font-size: 50px;}
   <div class="box1">
       1.5的行高
       <p class="son">
         这里的font-size为50px  
       </p>
   </div>
   <div class="box2">
       30px的行高
       <p class="son">
          这里的font-size为50px   
       </p>
   </div>

数值作为行高被继承后会根据当前元素的字体大小重新计算行高.但是数值加单位的方式等于把父元素的行高原封不动的继承了过来.(百分比设置行高也一样)

思考一个问题:为什么行高设置成元素的高度就可以让文字垂直居中?
要结合line-height的知识和行内元素盒子模型去理解

用line-height:0 消除图片底部间隙

*{margin: 0;padding: 0;}
    .box{width: 600px;background-color: aqua;line-height: 0}
   <div class="box">
       <img src="img.jpeg" alt="">
       <span>你好</span>
   </div>

原理解释:
行高不会影响图片实际占据的高度.
图片默认与文字基线对齐.当内联框的行高为0时,也就没有行间距,缝隙就不存在.

3. 精讲 vertical-align

定义:行内元素的垂直对齐方式
vertical-align只能在行内元素中起作用

vertical-align属性支持数值单位的值和百分比值.
行内元素默认在父元素的基线上.如果vertical-align值越大,元素在基线上面离基线越远.如果vertical-align值越小,元素在基线下面离基线越远.

vertical-align其他几种值详解
1.vertical-align:bottom; 元素的底部和内联元素整行的底部对齐.
2.vertical-align:top; 元素的顶端和内联元素郑航的顶端对齐.
3.vertical-align:middle; 元素的中心点和父级基线上1/2 x-height对齐
4.vertical-align:text-top
盒子的顶部和父级”内容区”的顶部对齐
5.vertical-align:text-bottom
盒子底部和父级”内容区”的底部对齐

6.vertical-align:super
提高盒子的基线到父级合适的上标基线位置
7.vertical-align:sub
降低盒子的基线到父级合适的下标基线位置
8.将图片文字和图片对齐方式: align=”absmiddle”
9.图片居中方法 object-fit 只能用于『可替换元素』(replaced element) 。所谓可替换元素,是指元素的内容和表现不是由CSS控制的,独立渲染的外部元素,比如: img、 object、 video 和 表单元素,如textarea、 input,audio和 canvas在一些特殊情况下,也可以作为可替换元素。

在使用 object-fit 时,一定要设定元素的size,也就是 width 和 height

直入正题,object-fit 有五个可选值,分别是:

fill 默认值。填充,可替换元素填满整个内容区域,可能会改变长宽比。
contain 包含,保持长宽比,保证可替换元素完整显示,长宽比和内容区域的长宽比不一致时,内容区域会出现空白。
cover 覆盖,保持长宽比,保证内容区域被填满,所以可替换元素可能会被切掉一部分,从而不能完整展示。
none 顾名思义,就是什么都没有啦,当然不是什么都没有啦,而且千万不要以为和fill是一样的!实际效果是,保持可替换元素原尺寸和比例。
scale-down 等比缩小。效果类似 contain 或 none
用法也超级简单:

.cover{    object-fit: cover;
}.contain{    object-fit: contain;
}.fill{    object-fit: fill;
}.scale-down{    object-fit: scale-down;
}

object-position
当元素被 object-fit 裁切的时候,你一定想知道如何控制裁切的位置。 嗯,顾名思义, object-position 就是为了解决这个问题的。

不过,object-position 不难理解,类似 background-position,不多说了。

浏览器兼容性 IE 全家不支持,包括最新的 EDGE
android 4.4.4+ 支持,Chrome 29+ 支持
Safari 7.1+ 和 iOS 8+ 支持 object-fit,不支持object-position

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

赞赏支持

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦


相关推荐

上一篇 z-index布局

下一篇 Bootstrap与less

评论