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

article/2025/5/15 6:42:35

“行高”即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

test test test

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

拓展阅读


http://chatgpt.dhexx.cn/article/gev38aXb.shtml

相关文章

CSS行高——line-height

初入前端的时候觉得CSS知道display、position、float就可以在布局上游刃有余了,随着以后工作问题层出不穷,才逐渐了解到CSS并不是几个style属性那么简单,最近看了一些关于行高的知识,就此总结一下。 所谓行高是指文本行基线间的垂…

深入理解css行高line-height

1.行高的定义 行高是相邻两行文本基线之间的垂直距离。看清楚是基线,估计有很多前端搞了几年的都说不出个所以然。小时候我们写英文26个英文字母的单词本(随便找个图) 一行里面有四条线,在css中一个行内非替换元素(例…

strlen

strlen strlen计算长度 strlen计算长度 strlen在计算长度时,一定要注意计算的字符串中是否含有\0字符(请注意,0和\0是有区别的,0代表数字,\0代表转义字符,值是48),比如你希望算0x12…

数字图像处理第九章——形态学图像处理

数字图像处理第九章 数字图像处理---形态学图像处理(一)预备知识1.1 集合理论中的基本概念1.2 二值图像、集合及逻辑算子 (二)膨胀和腐蚀2.1 膨胀2.2 结构元的分解2.3 strel函数2.4 腐蚀 (三) 膨胀与腐蚀的…

MATLAB教学_09影像处理二

本文视频地址:https://www.bilibili.com/video/av68228488?p9 主要学习了初阶影像处理。有三个内容: 图像阈值背景预测相关连的标签 计算米粒颗数 先将图片二值化。那么有米粒的区域应该是1,而没有的地方就是0。那么去计算有多少个一大群…

【计算机视觉】图像增强——图像的形态学操作

个人简介: > 📦个人主页:赵四司机 > 🏆学习方向:JAVA后端开发 > ⏰往期文章:SpringBoot项目整合微信支付 > 🔔博主推荐网站:牛客网 刷题|面试|找工作神器 > &#…

数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)

文章目录 一、实验目的二、实验仪器三、实验原理1. 结构元素:2. 腐蚀运算:3. 膨胀运算:4. 开运算:5. 闭运算: 四、实验内容:1. 形态学图像处理用于图像边界提取2.数学形态学用于图像的噪点去除(…

【2】MATLAB中strel('disk',r)的C实现

strel 是MATLAB中常用的类型,即是structuring element,用来构建结构元素。opencv中与其相似的函数是getStructuringElement()这个函数。 这里仅仅说是相似主要是因为两者还是有很多区别的。 getStructuringElement()可以获取常用的结构元素的形状&…

matlab strel详解,【2】MATLAB中strel('disk',r)的C實現

strel 是MATLAB中常用的類型,即是structuring element,用來構建結構元素。opencv中與其相似的函數是getStructuringElement()這個函數。 這里僅僅說是相似主要是因為兩者還是有很多區別的。 getStructuringElement()可以獲取常用的結構元素的形狀&#x…

matlab strel结构元素,【matlab】Strel函数--结构元素

###Date:2018.3.28 =========================================================================== Strel函数 主要用来构建形态学运算中的结构元素,使用的语法为strel(shape,parameters)。shape为形状参数,即设置什么样的结构元素;parameters为控制形状参数大小方向的参数…

Strel函数--结构元素

Strel函数 主要用来构建形态学运算中的结构元素,使用的语法为strel(shape,parameters)。shape为形状参数,即设置什么样的结构元素;parameters为控制形状参数大小方向的参数。 例: 建立一个负向45,长度为6的结构元素…

strel

文章目录 SyntaxDescriptionExamplesAlgorithms 形态结构要素 strel代表平坦的形态构造元素,这是形态扩张和侵蚀操作的重要组成部分。 平面结构元素是二维或二维的二进制值邻域,其中在形态计算中包含真实像素,而不包含错误像素。 结构元素的中…

图像处理函数——strel、roipoly、roifilt2、roifill

文章目录 1.strel2.roipoly3.roifilt24.roifill 1.strel 功能: 形态学结构元素,strel 对象表示一个平面形态学结构元素,该元素是形态学膨胀和腐蚀运算的重要部分。 语法: SE strel(shape, parameters) 创建一个结构元素对象SE。…

nginx日志配置,以及日志轮询

一、为nginx配置错误日志 Nginx错误日志是调试nginx的重要手段,属于核心功能模块的参数(ngx_core_module)该参数名字为err_log,是放在Main区块中全局配置 err_log的语法格式以及参数语法说明如下 err_log file lev…

nginx配置日志记录问题

去掉nginx.conf文件里面的llog_format main注释并修改为如下 log_format main $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"|&quo…

nginx服务器网站日志,nginx网站日志配置

nginx网站日志配置 [2020-09-10 10:47:43] 简介: 建站服务器 1、日志介绍nginx有两种日志,一种是访问日志,一种是错误日志。访问日志中记录的是客户端对服务器的所有请求。错误日志中记录的 建站服务器 ELK系统在安装完成后需要处理相关的日志文件&…

Linux Nginx日志——Nginx日志配置 access_log error_log rewrite_log 日志轮转

1、Nginx 日志介绍 Nginx 每个级别的配置都可以有独立的访问日志, 所需日志模块 ngx_http_log_module 的支持,日志格式通过 log_format 命令来定义,日志对于统计和排错是有利的。 nginx 日志相关的配置包括 access_log、rewrite_log、error_log# 设置访…

【Nginx 日志配置】【访问日志log_format】【错误日志error_log 指令】【Nginx的日志轮转】

文章目录 Nginx 日志配置log_format 指令中常用的一些变量:访问日志 案例可以配置段:http, stream, server, location作用域。error_log 指令 错误访问日志 级别rewrite_log 指令 用户跳转日志 一般不用配置流量控制相关功能配置日志记录 Nginx 日志配置…

关于nginx日志配置指令介绍

本文主要介绍了nginx日志配置指令详解,nginx有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志,需要的朋友可以参考下 日志对于统计排错来说非常有利的。本文总结了nginx日志相关的配置如access_log、log_format、open_log_file_cache、log_not_found、lo…

宝塔自定义nginx访问日志配置

nginx日志自定义配置 问题 有时nginx默认的日志满足不了需求,比如网站绑定了多个域名,想知道用于访问的是具体域名,这时候就需要自定义nginx日志了。 nginx 中access log 记录了用户访问的页面以及用户浏览器、ip和其他的访问信息 log_for…