css行高包含哪些,详解CSS行高

2023-11-10

“行高”即CSS中line-height所描述的属性,它表示两行文字间基线之间的距离,不允许使用负值。在弄清行高之前,我们先来了解几个概念:

顶线、中线、基线、底线

b7daef2df5cec37fbbed2f3765e07daf.png

上图所示线条从上到下为:

1

2

3

4

5

6

7

8

9

10

vertical-align:top; /*顶线*/

vertical-align:text-top;

vertical-align:super; /*上标*/

vertical-align:middle; /*中线*/

vertical-align:baseline; /*基线*/

vertical-align:sub; /*下标*/

vertical-align:bottom; /*底线*/

vertical-align:text-bottom;

行距 、半行距、内容区、inline-box、line-box、line-height

下图从上到下分别是顶线,中线,基线,底线

b8ee2b80c1b0838394551df32331c3a6.png

行距:底线到下一文本行顶线之间的垂直距离(行高与字体的差),即图中3所示区域;

半行距:行距/2;

内容区:顾名思义是内容显示区,由底线(bottom)与顶线(top)包裹,其高度等于字体大小,即图中1+2+4所示区域;

个人认为此处形容不太准确,应该描述为由text-top与text-bottom包裹

inline-box:

1,每个行内元素都会生成一个inline-box,inline-box是一个浏览器渲染模型中的一个概念,无法显示出来;

2,在没有padding影响的时候,inline-box的高度等于内容区的高度;有padding时,inline-box的高度等于font-size+padding-top+padding-bottom;

3,设定行高时,inline-box高度不变,内容区域上下两边分别增加一个半行距(图中蓝色区域)。

line-box:

1,指本行的一个虚拟的矩形框,也是浏览器渲染模式中的一个概念,无法实际显示;

2,当有多行时,每一行都会有一个line-box,且line-box不会重叠;

3,在没有margin等的影响的时候,line-box从上到下一个接一个的紧密排列;

4,line-box的高度是最上盒顶部到最下盒底部的距离,(保证足以容纳它所包含的所有inline-box);

5,对于一个非替换内联元素,行高指的是line-box的计算高度。

The line box height is the distance between the uppermost box top and the lowermost box bottom.

0bf6dafc3bb86b4ac42a4f7b0bef8a47.png

line-height:

其实,行高存在的主要意义就是影响line-box的布局,懵逼吗?来,上代码:

1

2

3

4

5

6

中文English

中文English

中文English

我是紧随的一行

4c3f0eb3a0ebf340facb14c1ed6b7da2.png

此时没有为父容器div设置行高,行高默认是能包裹所有inline-box的最小高度(灰色背景区)

为div设置行高:line-height:20px;

3a9ad6f73686d1639422ee5e8f04c208.png

可以看到line-box(浅灰色部分)收缩了,文字也发生了重叠,而且文字顶部紧跟着浅灰色背景的底部。

以下言论是笔者根据上面的一些概念自己折腾总结出来的,有些不准确,还望各位大牛牛指正

font-size大小就是内容区的高度大小,font-size的大小决定text-top到text-bottom之间的位置,一旦font-size属性确定,text-top与text-bottom的位置就会被确定;

line-height的大小就是line-box的大小,即line-height的大小决定顶线与底线的位置,一旦行高确定,top与bottom的位置就确定了。

top一定不能低于text-top的位置,bottom一定不能高于text-bottom的位置;

当line-height的值小于font-size的值时,top与bottom线的位置由font-size决定而不由line-height决定在此情况下,top与text-top,bottom与text-bottom重合。

inline-box与line-box就只有一个”in”的区别,很容易就懵逼,只要记住:inline-box是针对每个行内元素,而line-box是针对每一行,line-box包裹处在同一行的inline-box

行高的应用

行高最广泛的应用,就是实现单行文字和多行文字的垂直居中:

为父容器设置line-height或者font-size,确定各条线的位置;

设置vertical-align属性对齐即可,该属性影响在line-box中的inline-box的垂直位置。

对齐规则

一旦六线谱确定了,根据对齐规则就可以随心所欲的设置文字的位置了( 翻译自W3C规范):

1,以下的值仅仅对一个父内联元素或者父块容器盒有意义(此处理解为作为父元素的内联元素或作为父容器的块容器盒)

2,在下列定义中,对于一个行内级非可替换元素,参照对齐的box的高度是line-height,其他对齐的box是margin box

baseline:

box的baseline与parent box的baseline对齐;

如果该box没有baseline(why?),则该box的底外边缘与parent box的baseline对齐;

middle:

box的垂直中点与parent box的基线与parent box中小写字母x高度的一半的和对齐;

sub:

Lower the baseline of the box to the proper position for subscripts of the parent’s box. (This value has no effect on the font size of the element’s text.)

降低box的基线到合适的位置来作为parent box的下标;

super:

Raise the baseline of the box to the proper position for superscripts of the parent’s box. (This value has no effect on the font size of the element’s text.)

升高box的基线到合适的位置来作为parent box的上标;

text-top:

box的top与父容器的内容区的顶部对齐;

text-bottom:

box的bottom与父容器的内容区的底部对齐;

The following values align the element relative to the line box. Since the element may have children aligned relative to it (which in turn may have descendants aligned relative to them), these values use the bounds of the aligned subtree. The aligned subtree of an inline element contains that element and the aligned subtrees of all children inline elements whose computed ‘vertical-align’ value is not ‘top’ or ‘bottom’. The top of the aligned subtree is the highest of the tops of the boxes in the subtree, and the bottom is analogous.

大致意思是:top与bottom是相对于line box对齐,因为元素可能会有子元素相对于它对齐,所以top与bottom使用对齐子树的边界对齐。内联元素的对齐子树包括该元素和它所有内联子元素,并且这些内联子元素的vertical-align不能是top或者是bottom。对齐子树的顶部是所有子树中最高元素的顶部,底部是所有子树中最低元素的底部。

top:

对齐子树的顶部与line box的顶部对齐;

bottom:

对齐子树的底部与line box的底部对齐;

特殊元素基线:

inline-table的基线是table中第一行的基线。

inline-block的基线是正常流中最后一个盒子的基线;如果处于非正常流中,inline-block的基线是外边距的底部。

现在对于文字垂直居中是不是有了信手拈来的感觉?

单行文字垂直居中:

在父容器的line-height确定的情况下,直接设置vertical-align:middle就可以了

1

2

3

This is a test.

如果span里面内容太多,发生了换行,由于这多行内容还是在同一个内联元素中,因此这多行文字的基线仍然是第一行文字的基线。此时再用vertical-align:middle只能使第一行文字垂直居中,如何 实现多行文字的垂直居中?

2ef9dd1d3050178fe6a066dc9d8bf627.png

多行文字垂直居中:

再此之前,先来看看图片的垂直居中。

图片的垂直居中与单行文字的垂直居中类似,在父容器的行高确定的情况下,只需要设置vertical-align:middle就可以了

1

2

3

98dc1a1093ab0ab85ecb08124148141c.png

如果我们把这多行文字看成是一个图片,再利用图片的垂直居中不就可以了吗?

现在我们回忆一下img的特性:虽然是内联元素,但是可以设置宽高,这不就是inline-block的特点吗?

为此,我们需要为span设置display:inlne-block,vertical-align:middle:

098a01dcca6c5794afce255e69696d00.png

文字已经居中了,但是每行文字隔的太开了,这是因为line-height是继承属性,span在没有设置line-height的情况下会继承父元素的,因此需要为span设置一个line-height属性来约束这多行文字的行间距。

1

2

3

This is a test.This is a test.This is a test.

11af4f86d320732297314242cd70a116.png

拓展阅读

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

css行高包含哪些,详解CSS行高 的相关文章

  • 新系统如何确定性能测试目标

    前提 新系统上线没有明确数字对比 性能需求非可度量 完成目标 1 服务器的某些资源已耗尽 如CPU 内存 句柄 数据库存在大量slow query 2 需求证明系统是可水平扩展的 即增加服务器配置系统TPS 吞吐量 能上去
  • 回忆,这一年(华师918血泪贴)

    回忆 这一年 华师918血泪贴 考研前夕 回想一年前 当时这个时候我应该刚通过了部门的实习答辩 拿了不错的评分 不出意外就等着签三方了 打算骑牛找马看看秋招的机会 但是双非出身的我 一直希望摆脱那种囚笼困境 需要付出比常人更多才能得到人家脱
  • 【五一创作】跑alpaca-lora语言模型的常见问题(心得)

    训练部署alpaca lora语言模型常见问题 Alpaca Lora是一个开源的自然语言处理框架 使用深度学习技术构建了一个端到端的语言模型 在训练和部署alpaca lora语言模型时 可能会遇到一些常见问题 本文将介绍一些这些问题及其
  • 计算机应用基础绩点3.0,学分绩点和期末考说明(华师).doc

    学分绩点和期末考说明 华师 doc 由会员分享 提供在线免费全文阅读可下载 此文档格式为doc 更多相关 学分绩点和期末考说明 华师 doc 文档请在天天文库搜索 1 关于学分绩点的一些说明首先 我们先来了解下几个概念吧1 学分 是用于计算
  • 【CANN训练营】Ascend目标检测与识别-定制自己的AI应用

    参考 https gitee com ascend samples tree master cplusplus level3 application 1 cv detect and classify 1 准备工作 cd samples cp
  • python画易烊千玺_Python02

    class A object def init self 私有 在变量名称前加上 私有 不可继承 不可在外部调用 但是可以在内部调用 self a 1000 约定使用 来表示私有 self def B self print self a A
  • python(数据分析)第4天:绘制网格

    plt grid import matplotlib pyplot as plt import random import matplotlib from matplotlib import cycler from matplotlib f
  • 解决ssh_exchange_identification: read: Connection reset by peer

    解决ssh exchange identification read Connection reset by peer linux远程免密登陆出现上述报错 1 先在远程机器上 vi etc hosts allow 在里面写入 允许所有ip连
  • Pyspark的dataframe写入hive表

    文章最前 我是Octopus 这个名字来源于我的中文名 章鱼 我热爱编程 热爱算法 热爱开源 所有源码在我的个人github 这博客是记录我学习的点点滴滴 如果您对 Python Java AI 算法有兴趣 可以关注我的动态 一起学习 共同
  • 第八章,索引的创建与设计原则

    第八章 索引的创建与设计原则 1 索引的声明与使用 1 1 索引的分类 SQL的索引包括普通索引 唯一性索引 全文索引 单列索引 多列索引和空间索引等 功能逻辑上说 索引主要有 4 种 分别是普通索引 唯一索引 主键索引 全文索引 按物理实
  • 面试题-Java集合、IO

    一 Java集合 HashMap的内部结构 扩容 为什么是2的幂次方 https www cnblogs com chengxiao p 6059914 html HashMap的实现原理 http www importnew com 27
  • 三个空饮料瓶可以换一瓶饮料,给你1箱(50瓶)饮料,你能喝多少瓶饮料?

    突然想起来了一道小学生的数学题 三个空饮料瓶可以换一瓶饮料 给你1箱 50瓶 饮料 你能喝多少瓶饮料 哈哈 于是写了一段代码 不知道还有没有高人了指点下 本人小菜鸟一只 function demo num kong test num2 nu
  • 第三章部分作业重新调试结果(第五周)

    求 百钱百鸡 问题 鸡翁一值钱五 鸡母 一值钱三 鸡雏三值钱一 百钱买百鸡 问鸡翁 鸡母 鸡雏各几何 设买了x只鸡翁 y只鸡目 z只鸡雏 则有 x y z 100 5 x 3 y 1 3 z 100 15 x 9 y z 300 inclu
  • 变分贝叶斯

    Variational Bayesian inference 参考文献 徐亦达老师变分推断课件 A tutorial on variational Bayesian inference 白板推导指数族分布 白板推导变分推断 Log like
  • 实测最像ChatGPT的中文产品:能解释三体、懂弱智吧的梗,内测开启人人都能试!...

    明敏 发自 凹非寺量子位 公众号 QbitAI 最像ChatGPT的中文产品 出现了 昨晚 一个名叫Inspo的生成式对话AI 刚刚在 民间 开启内测 马上引发不小反响 体验过的博主表示 1分钟搞定3份策划 工作5年没它能写 有人自己上手试
  • IP数据报检验和计算

    在进行计算之前先补充一下基础知识 一 原码 反码和补码 原码 原码是计算机机器数中最简单的一种形式 数值位就是真值的绝对值 符号位位 0 时表示正数 符号位为 1 时表示负数 原码又称带符号的绝对值 为了方便整数和小数区别 整数的符号位与数
  • Android 实现按钮 跳转到某网页

    这个是我在刚开始学习Android的时候 我同学要做一个手机端的控制 他说我的东西都用 java web写好了 你只要给我写一个跳转按钮即可 其实很简单只是简单地按钮点击事件和Intent跳转 但是毕竟是第一次帮别人做东西还觉得挺有意义的
  • YouTube深度学习视频推荐系统

    YouTube推荐系统架构 YouTube推荐系统架构是经典的两级模型 召回 精排模型 第一级用候选集生成模型完成候选视频的快速筛选 在这一步 候选视频集合由百万量级降至几百量级 这相当于经典推荐系统架构中的召回层 第二级用排序模型 Ran
  • 【mac】iTerm2中ssh保持连接不断开

    1 概述 转载 http bluebiu com blog iterm2 ssh session idle html 一 一个iTerm2蛋疼的问题 最近基友搞了台mbp 在装一些常用app时 跟我交流到一个情况 用iTerm2进行ssh时

随机推荐

  • 树莓派串口调试助手minicom的简单使用

    安装 minicom sudo apt get install minicom 启动minicom minicom D dev ttyAMA0 minicom 默认波特率为115200 D 代表端口 b 设置波特率参数 例如 b 9600
  • 网络调试工具TCP/UDP socket的使用

    TCP UDP socket调试工具的使用 可以在想服务器发送命令 或者查看服务器返回的数据 打开界面后选择左边客户端还是服务端 使用TCP还是udp 点击创建相应的模拟环境
  • docker 容器满了常用处理方法

    docker 容器满了常用处理方法 1 运行 df h 查看剩余磁盘占用情况 2 进入到docker目录 cd var lib docker 3 运行du h max depth 1 检索文件的最大深度1 即只检索汇总计算当前目录下的文件
  • Oracle用function生成UUID方法

    CREATE OR REPLACE FUNCTION get uuidRETURN VARCHARISguid VARCHAR 50 BEGINguid lower RAWTOHEX sys guid RETURNsubstr guid 1
  • 移动端/帆软移动报表调用拨打电话

    HTML a标签的href 属性 tel 点击可以直接拨打电话 移动端 a href 13622178579 a 把某个单元格 形态赋值为 公式形态 a href style color 508ef9 a ps F1列存储电话号码
  • 自动化运维脚本语言shell练习(2)

    1 编写脚本for1 sh 使用for循环创建20账户 账户名前缀由用户从键盘输入 账户初始密码由用户输入 例如 test1 test2 test3 test10 2 编写脚本for2 sh 使用for循环 通过ping命令测试网段的主机连
  • 程序员,你今年读了几本书?

    调查显示 国人去年平均阅读 4 本书 程序员不应该只有 代码大全 4 23 世界读书日 GitChat 码农读书日 活动最后 1 天 用抄底的价格 抢你要的技术书 GitChat 特意筛选畅销度最高的品种 给予超大力度的优惠 深度学习入门
  • 如何关闭FileZilla Server开机自启

    FileZilla Server开机自启 有些软件开机自启 个人感觉是比较反感的 像流氓一样 如何关闭 选中此电脑 gt 右键单击 gt 点击管理 找到之后FileZilla Server FTP server之后右键点击属性 改成手动启动
  • 重t2加权是什么意思_王者荣耀中说的T0、T1,到底是啥意思?这下总算清楚了

    王者荣耀这款游戏可以说是相当火了 玩这款游戏的人应该有3亿左右了吧 而在这么庞大的人群中 也孕育出一种独特的语言 甚至有些老玩家也是没有听说过得 就比如今天我们要聊的 在王者荣耀中说的TO T1到底是什么意思呢 今天就给大家科普一下 TO英
  • testflight测试的直播软件,怎么使用 TestFlight 测试 App,注意些什么?

    原标题 怎么使用 TestFlight 测试 App 注意些什么 TF签名是什么 TF签名全称为TestFlight 实际为一个苹果官方研发的一款提供给ios开发者内测的一个工具类App 这款app可以在苹果商店搜索到 用户直接搜索打开Te
  • java 图形与动画_如何优化java动画编程中的显示效果

    展开全部 Java动画编62616964757a686964616fe4b893e5b19e31333264623234程有多种实现方法 但它们实现的基本原理是一样的 即在屏幕上画出一系列的帧来造成运动的感觉 Java多线程技术是Java动
  • C++——STL库中迭代器以及其代码实现简介

    文章目录 一 STL库中迭代器的简介 1 迭代器的定义 2 迭代器常用的运算 3 vector和deque提供的额外运算 4 迭代器的取值范围 二 STL库中迭代器的代码实现 总结 一 STL库中迭代器的简介 1 迭代器的定义 迭代器 it
  • ARouter初始化及跳转原理

    ARouter初始化及跳转原理 编译后生成文件 仓库类 class Warehouse Cache route and metas static Map
  • GZipStream归纳总结

    GZipStream 类 提供用于压缩和解压缩流的方法和属性 创建压缩流实例有个参数枚举CompressionMode 它有两个值分别是Compress DeCompress 表示压缩和解压 压缩和解压代码 实例化FileStream对象i
  • ZGC垃圾收集器-JVM(十五)

    上篇文章说了G1的特性 无分代 复制算法 大内存就可以用G1 可预测stw时间等特性 G1垃圾收集分类 JVM 十四 ZGC收集器 XX UseZGC ZGC Z Garbage Collector 是在jdk11新加入的低延迟垃圾收集器
  • Junit中测试插入等无返回值的操作要注意的问题

    问题一 到底插不插进数据库 由于测试数据有时比较随意 插入数据库会对数据库进行污染 我们在测试的时候通过控制事务 一般不提交至数据库 例如通过spring控制事务提交 默认让其回滚 TransactionConfiguration defa
  • 【C/C++内功心法】剖析预处理过程,详解其他预处理指令,提升C/C++内功

    文章目录 前言 一 undef 二 命令行定义 三 条件编译 四 文件包含 1 头文件被包含的方式 2 嵌套文件包含 总结 前言 大家好啊 我是不一样的烟火a 今天我将会为大家详细讲解其他的预处理指令 虽然本文章读完后不能让大家代码写得飞起
  • 分布式事务总结

    这次使用分布式事务框架过程中了学习了一些分布式事务知识 所以本文我们就来聊聊分布式事务那些事 首先我们先回顾下什么是事务 事务 什么是事务 这个作为后端开发 日常开发中只要与数据库有交互 肯定就会使用过事务 现在摘抄一段wiki的解释 解释
  • 直播项目vue-video-player 播放 rtmp流

    最近写的一个项目是跟直播相关的 那就必须涉及到播放器 我选择用的是vue video player 记录几个自己遇到的坑 第一个就是直播画面卡住的问题 我遇到的问题很奇怪 flash也打开了 画面也有了 但是就是一直卡住不动 这个问题卡了我
  • css行高包含哪些,详解CSS行高

    行高 即CSS中line height所描述的属性 它表示两行文字间基线之间的距离 不允许使用负值 在弄清行高之前 我们先来了解几个概念 顶线 中线 基线 底线 上图所示线条从上到下为 1 2 3 4 5 6 7 8 9 10 vertic