CSS行高——line-height

article/2025/5/15 6:29:11

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

所谓行高是指文本行基线间的垂直距离。要想理解这句话首先得了解几个基本知识:

顶线、中线、基线、底线

<!DOCTYPE html>
<html><head><title>Test</title><style type="text/css" >span{padding:0px;line-height:1.5;}</style></head><body><div class="test"><div style="background-color:#ccc;"><span style="font-size:3em;background-color:#999;">中文English</span><span style="font-size:3em;background-color:#999;">English中文</span></div></div></body>
<html>

wps_clip_image-14492

从上到下四条线分别是顶线、中线、基线、底线,很像才学英语字母时的四线三格,我们知道vertical-align属性中有top、middle、baseline、bottom,就是和这四条线相关。

尤其记得基线不是最下面的线,最下面的是底线。

行高、行距与半行距

行高是指上下文本行的基线间的垂直距离,即图中两条红线间垂直距离。

行距是指一行底线到下一行顶线的垂直距离,即第一行粉线和第二行绿线间的垂直距离。

半行距是行距的一半,即区域3垂直距离/2,区域1,2,3,4的距离之和为行高,而区域1,2,4距离之和为字体size,所以半行距也可以这么算:(行高-字体size)/2

wps_clip_image-14662

内容区、行内框、行框

内容区:底线和顶线包裹的区域,即下图深灰色背景区域。

wps_clip_image-14718

行内框,每个行内元素会生成一个行内框,行内框是一个浏览器渲染模型中的一个概念,无法显示出来,在没有其他因素影响的时候(padding等),行内框等于内容区域,而设定行高时行内框高度不变,半行距【(行高-字体size)/2】分别增加/减少到内容区域的上下两边(深蓝色区域)

行框(line box),行框是指本行的一个虚拟的矩形框,是浏览器渲染模式中的一个概念,并没有实际显示。行框高度等于本行内所有元素中行内框最大的值(以行高值最大的行内框为基准,其他行内框采用自己的对齐方式向基准对齐,最终计算行框的高度),当有多行内容时,每行都会有自己的行框。

<div style="background-color:#ccc;"><span style="font-size:1em;background-color:#666;">中文English</span><span style="font-size:3em;background-color:#999;">中文English</span><span style="font-size:3em;background-color:#999;">English中文</span><span style="font-size:1em;background-color:#666;">English中文</span></div>

wps_clip_image-14832

line-height

基本概念搞明白了我们就可以说说本文的主角line-height属性了。

定义:line-height 属性设置行间的距离(行高),不能使用负值。该属性会影响行框的布局。在应用到一个块级元素时,它定义了该元素中基线之间的最小距离而不是最大距离。line-height 与 font-size 的计算值之差(行距)分为两半,分别加到一个文本行内容的顶部和底部。可以包含这些内容的最小框就是行框。

可能的值

说明
normal默认,设置合理的行间距。
number设置数字,此数字会与当前的字体尺寸相乘来设置行间距。相当于倍数
length设置固定的行间距。
%基于当前字体尺寸的百分比行间距。
inherit规定应该从父元素继承 line-height 属性的值。

貌似很简单,但感觉没什么用出的样子,那就让我们看看line-height的几个应用

div文字垂直居中

div居中对齐一直是个难题,水平还好解决些,margin:0 auto; 可以解决现代浏览器,IE下text-align:center。但垂直居中就没那么简单了,默认是这样子的。

 

<div style="width:150px;height:100px;background-color:#ccc;"><span>This is a test.<br/>This is a test.</span></div>

wps_clip_image-14888

我们可以利用line-block这样做

<div style="width:150px;height:100px;line-height:100px;background-color:#ccc;font-size:0;"><span style="display:inline-block;font-size:10px;line-height:1.4em;vertical-align:middle;">This is a test.<br/>This is a test.</span></div>

wps_clip_image-14910

单行就比较简单了,把line-height设置为box的大小可以实现单行文字的垂直居中

<div style="line-height:100px;border:dashed 1px #0e0;">This is a test.</div>

 

wps_clip_image-14956

 

元素对行高影响

行框高度是行内最高的行内框高度,通过line-height调整,内容区行高与字体尺寸有关,padding不对行高造成影响。

<div style="border:dashed 1px #0e0;margin-bottom:30px;"><span style="font-size:14px;background-color:#999;">This is a test</span></div><div style="border:dashed 1px #0e0;"><span style="font-size:14px;padding:20px;background-color:#999;">This is a test</span></div>

wps_clip_image-15002

第二个span虽然因为padding原因内容区变大,当行高并未改变

行高的继承

行高是可继承的,但并不是简单的copy父元素行高,继承的是计算得来的值。

<div style="border:dashed 1px #0e0;line-height:150%;font-size:10px;"><p style="font-size:30px;">1232<br/>123</p></div>

按一般理解既然line-height可以继承,那么p元素的行高也是150%了,可是事实是这样的

wps_clip_image-15035

非但没有变成150%,反而连100%都没有,重叠了!这就是继承计算的结果,如果父元素的line-height有单位(px、%),那么继承的值则是换算后的一个具体的px级别的值;上例p得到的是10px*150%=15px的行高,而P的字体大小为30px,所以发生了重叠。

而如果属性值没有单位,则浏览器会直接继承这个“因子(数值)”,而非计算后的具体值,此时它的line-height会根据本身的font-size值重新计算得到新的line-height 值。

<div style="border:dashed 1px #0e0;line-height:1.5;font-size:10px;"><p style="font-size:30px;">1232<br/>123</p></div>

wps_clip_image-15080

所以在使用line-height时,除非你刻意否则尽量使用倍数设值


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

相关文章

深入理解css行高line-height

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

strlen

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

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

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

MATLAB教学_09影像处理二

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

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

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

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

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

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

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

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

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

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

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

Strel函数--结构元素

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

strel

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

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

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

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

一、为nginx配置错误日志 Nginx错误日志是调试nginx的重要手段&#xff0c;属于核心功能模块的参数&#xff08;ngx_core_module&#xff09;该参数名字为err_log&#xff0c;是放在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有两种日志&#xff0c;一种是访问日志&#xff0c;一种是错误日志。访问日志中记录的是客户端对服务器的所有请求。错误日志中记录的 建站服务器 ELK系统在安装完成后需要处理相关的日志文件&…

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

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

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

文章目录 Nginx 日志配置log_format 指令中常用的一些变量&#xff1a;访问日志 案例可以配置段&#xff1a;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默认的日志满足不了需求&#xff0c;比如网站绑定了多个域名&#xff0c;想知道用于访问的是具体域名&#xff0c;这时候就需要自定义nginx日志了。 nginx 中access log 记录了用户访问的页面以及用户浏览器、ip和其他的访问信息 log_for…

Nginx日志配置、错误界面配置、流量控制 第九天

目录 nginx日志配置 nginx日志介绍 access.log error.log open_log_file_cache rewrite.log nginx的日志轮转 nginx错误界面配置 nginx流量控制 nginx如何限流 配置基本限流 nginx流量限制&#xff08;高级&#xff09; 流量控制相关功能 nginx日志配置 nginx日志…