CSS深入理解之line-height

2023-11-19

慕课学习-->前端开发-->HTML/CSS-->CSS深入理解之line-height

line-height

一、line-height的定义

行高line-height,两行文字基线之间的距离。

1、什么是基线?字符(x)下边缘

2、为什么是基线?基线是*线定义之根本。

3、需要两行么?不需要,两行的定义决定了一行的表现

行高line-height可以让单行文本垂直居中?

其实并不是真的垂直居中,只是看起来居中。

二、line-height与行内框盒子模型

所有内联元素的样式表现都与行内框盒子模型有关!例如浮动的文字环绕效果......

 

<p>这是一行普通的文字,这里有个 <em>em</em> 标签</p>

上面是一行普通的文字,有个em标签。但是却包含了4中盒子。

1、“内容区域”(content area,是一种围绕文字看不见的盒子。“内容区域”(content area)的大小与font-size大小相关。

2、“内联盒子”(inline boxes“内联盒子”不会让内容成块显示,而是排成一行。如果外部含inline水平的标签(spanaem等),则属于“内联盒子”。如果是光秃秃的文字,则属于“匿名内联盒子”;

3、“行框盒子”(line boxes,每一行就是一个“行框盒子”,每个“行框盒子”又是由一个一个“内联盒子”(inline boxes)组成;

4、<p>标签所在的“包含盒子”(containing box,此盒子由一行一行的“行框盒子”(line boxes)组成。

 

了解行内框盒子模型,对理解line-height有什么现实意义?

三、line-height的高度机理

<p>这是一行普通的文字,这里有个<em>em</em>标签</p>

这是一行普通的文字,这里有个em标签。

console.log(document.querySelector("p").clientHeight);//p标签的高度

 

元素高度从何而来?是里面的文字撑开的?不是的。

元素p的高度是由line-height行高决定的

内联元素的高度是由line-height决定的!

Line-height明明是两基线距离,单行文字哪来行高,还控制了高度?

(1)行高由于其继承性,影响无处不在,即使单行文本也不例外;

(2)行高只是幕后黑手,高度的表现不是行高,而是内容区域和行间距。只不过正好:内容区域高度(content area+ 行间距(vertical spacing= 行高(line-height

 

内容区域:

(1)内容区域(content area)高度只与字号(font-size)以及字体(font-family)有关,与line-height没有任何关系。

(2)simsun宋体字体下,内容区域高度等于文字大小值。也就是说,在simsun字体下:font-size + 行间距 = line-height

(3)行间距上下拆分就有了“半行间距”。

行高决定内联盒子高度;行间距墙头草,可大可小(甚至负值),保证高度正好等同于行高。

 

如果行框盒子里面有多个不同行高的内联盒子,高度如何表现?

(1)举例:

<p>这是一行普通的文字,这里有个<em style=”line-height:80px”>em</em>标签</p>

这是一行普通的文字,这里有个em标签。

console.log(document.querySelector("p").clientHeight);//p标签的高度

<p>的高度是80px

<p>这是一行普通的文字,这里有个<em style="line-height:80px;vertical-align:40px;">em</em>标签</p>   <p>的高度为98px

(2)如果行框盒子里面有多个不同行高的内联盒子,高度并不一定等于高度最高的内联元素的高度。

 

含多个行框盒子的包含容器

多行文本的高度就是单行文本高度累加。

 

若行框盒子里面混入inline-block水平元素(如图片),高度如何表现?

四、line-height各类属性值

1、line-height支持的属性值

Normal<number><length><percent>inherit

(1)line-height:normal,默认属性值,跟着用户的浏览器走,且与元素字体关联。

Chrome浏览器下,微软雅黑的normal值为1.32(字体占据的高度/字体大小)

Chrome浏览器下,宋体的normal值为1.14

(2)line-height:<number>,使用数值作为行高值。例如:line-height:1.5,根据当前元素的font-size大小计算。假如文字大小(font-size20px,则行高为1.5*20px=30px

(3)Line-height:<length>,使用具体长度值作为行高值。例如:line-height:1.5emline-height:1.5remline-height:20pxline-height:20pt

(4)Line-height:<percent>,使用百分比作为行高值。例如:line-height:150%,相对于设置了该line-height属性的元素的font-size大小计算。假设文字大小font-size20px,则行高值为20px*150%=30px

(5)Line-height:inherit,行高继承(IE8+),例如:input{line-height:inherit;}input框等元素默认行高是normal,使用inherit可以让文本框样式可控性更强。

2、line-height:1.5line-height:150%line-height:1.5em,有什么区别?

(1)line-height:1.5,所有可继承元素根据font-size重计算行高;

(2)line-height:150%/1.5em,当前元素根据font-size计算行高,继承给下面的元素。

3、body全局数值行高使用经验:body{ font-size:14px; line-height:1.5; }

匹配20像素的使用经验,line-height=20px/14px=1.4285714...

body{ font-size:14px; line-height:1.4286; }

五、line-height与图片的表现

1、行高会不会影响图片实际占据的高度?

行高不会影响图片实际占据的高度!

2、消除图片底部间隙的方法

(1)图片块状化---无基线对齐,img{ display:block;}

(2)图片底线对齐,img{ vertical-align:bottom;}

(3)行高足够小 -- 基线位置上移,.box{ line-height:0;}

3、小图片和大文字,基本上高度受行高控制

六、Line-height的实际应用

1、实现:大小不固定的图片、多行文字垂直居中

1)大小不固定的图片垂直居中(近似垂直居中)

<style>
.box {
	line-height:200px;
	text-align:center;
	background:#eee;
}
.box>img{vertical-align:middle;}
</style>
<div class="box">
	<img src="1.png">
</div>

2)多行文字垂直居中(也是近似垂直居中)

<style>
.box {
	line-height:200px;
	text-align:center;
	background:#eee;
}
.box>.text{
	display:inline-block;
	line-height:normal;
	text-align:left;
	vertical-align:middle;
}
</style>
<div class="box">
	<div class="text">多行文字水平垂直居中实现的原理跟图片水平垂直居中是一样的,区别在于要把多行文本所在的容器的display水平转换成和图片一样,也就是inline-block,以及重置外部继承的text-align和line-height属性值。</div>
</div>



 


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

CSS深入理解之line-height 的相关文章

  • 使用 GD lib 过滤器标准化 CSS 过滤器

    我想让用户拖动范围滑块并通过实时预览 CSS 滤镜 调整图像的亮度和对比度 然后使用 GD 库保存调整 但是 我似乎无法从 CSS 过滤器和 GD lib 亮度和对比度过滤器获得相同的结果 我的 CSS 过滤器范围为 50 150 其中 1
  • Firefox 上的 Angular JS 输入日期

    我有这些输入和这个模型
  • 如果执行了锚点 href 链接,则禁用 onClick 事件

    我有一张桌子 每一行都是一个由 js 调用的某个页面 例如 google com 的链接 onClick window open 方法 tr class tr 在最后一栏中我有一个锚点链接链接到其他页面 例如 jsfiddle td cla
  • 使网格项跨越到隐式网格中的最后一行/列

    当我不知道行数时 是否可以使网格项跨度从第一行到最后一行 假设我有以下 HTML 内容 其中包含未知数量的框 我怎样才能做到第三个 box从第一条网格线到最后一条网格线 container display grid grid templat
  • 下拉 24 小时选项值和 12 小时显示

    我需要创建一个时间数组 以便在 HTML 下拉列表中使用 数组键应采用 24 小时格式 值应采用 12 小时制 包含 am 和 pm 在数据库中我想存储 24 小时格式 有没有一种快速的方法来创建数组而不是每小时键入 example 00
  • Mobile Safari (iPhone) CSS 垂直居中/行高 CSS 问题

    有一个问题 我一直试图在各个项目中解决 但运气不佳 我有一些divs 内的文本以 CSS 为中心 使用display block and line height 我也尝试过padding和固定的高度 通常 这些设置要么只是标题 要么有时是按
  • 我可以使用 Google Analytics 确定用户浏览器对 HTML5 的支持吗?

    Google Analytics 分析 是否能够检测访问浏览器的 HTML5 支持级别 我想知道我的访问者浏览器中有多少百分比支持 HTML5 目前 获取此数据的唯一方法是分析访问者的浏览器统计信息 然后尝试在每个浏览器自己的帮助页面上查找
  • 如何在 HTML 表格上使用分页?

    我正在尝试使用这个分页library http flaviusmatis github io simplePagination js 在我的 HTML 表格页面 特别是浅色主题 中 但不知何故 我无法理解如何在我的 HTML 页面中以这种方
  • Swift - 将图像插入 PDF 不再适用于 iOS 13

    目前正在开发在我的贷款计算器应用程序上导出 PDF 的功能 我有一个预览屏幕 可以在您保存 PDF 之前显示它 预览屏幕由带有 html 的 webView 组成 其中包含占位符 我能够成功地将图像插入到正确的占位符上 并将其显示在 PDF
  • IE8 中空 div 层的 z-index 问题

    我在 IE8 中遇到 z index 问题 其他尚未测试 以下 JS 创建一些 html css document write img src border 0 document write div style background col
  • 如何使用 poedit 解析 Timber(树枝)模板并检测要翻译的引用字符串

    我想用 poedit 解析 Timber 的树枝模板 并且需要翻译引用的内容 问题是我找不到不跳过引用内容的解析器 Example
  • iOS 键盘显示后分屏宽度

    我刚刚开始研究 Cordova 应用程序对分屏多任务处理的支持 到目前为止 该应用程序在模拟器中的 iPad 上显示和调整大小都很好 但是当我单击编辑字段并显示软件键盘时 100 宽度的值开始返回整个屏幕 而不是给出的窗口 初始显示 到目前
  • 如何使用CSS将文本放在“框”的右上角或右下角

    我怎样才能得到here and and here位于右侧 与 lorem ipsums 位于同一行 请参阅以下内容 Lorem Ipsum etc here blah blah blah blah lorem ipsums and here
  • 加载背景图像的图像不显示

    我真的很困惑 我正在尝试创建一个带有图标和一些按钮的登陆页面 但我无法设法使我正在使用的背景图像显示出来 即使它是根据 Chrome 的开发工具包加载的 我只有这些行 索引 html div class row div class tryh
  • Rails 中的 PDF 导出

    我需要将包含一些图表的 HTML 页面导出为 PDF 有哪些好的 gem 可以做到这一点 PDFKit http railscasts com episodes 220 pdfkit http railscasts com episodes
  • 中心引导表宽度为 100%?

    table class table table striped table hover table responsive table
  • 响应式2列2行布局

    我一直在试图弄清楚如何创建这个布局 我有一个 2 列布局 左列有 1 行 右侧有 2 行 我试图让它流畅地调整 我遇到的问题是 我希望右侧顶部图像的顶部与左侧图像的顶部对齐 而底部图像的底部与左侧图像的底部保持对齐 我应该使用桌子吗 这是我
  • 在桌面和移动设备上编写 2 列和 3 列的 Flexbox 代码(换行)

    我真的很难弄清楚这个 CSS flexbox 解决方案 基本上有两个问题 一个是 2 列布局 另一个是 3 列布局 2 列 我认为这可能非常简单 3 列 这可能更高级一些 容器类是 嗯 container 而孩子们只是 left right
  • iframe 主体删除空间

    我的 iframe 风格为style width 100 几乎覆盖了页面宽度 但它在左侧和右侧留下了一个小边距 所以我添加了body margin 0px 删除空间 它有效 但问题是删除边距影响其他事物 例如段落 p inside 有没有办
  • 优化 CSS 交付 - Google 的建议

    谷歌建议在 head 中使用非常重要的 CSS 内联 并在内部使用其他 CSS

随机推荐

  • C语言程序环境剖析——探究从.c到.exe之路

    程序环境 1 程序的翻译环境和执行环境 2 详解编译 链接 2 1 翻译环境 2 2 编译的三部分 预编译 编译 汇编 2 3链接 3 运行环境 1 程序的翻译环境和执行环境 在ANSI C的任何一种实现中 都存在两个不同的环境 翻译环境
  • JavaWeb —— AJAX

    目录 AJAX 基本介绍 A synchronous JavaScript And XML 多用在 1浏览器搜索联想 2用户注册中离开光标 校验数据的正确性 同步和异步的区别 AJAX快速入门 AJAX 基本介绍 A synchronous
  • Manjaro deepin 睡眠后无法唤醒

    最近尝试换了新的桌面 之前是xfce 使用deepin感觉很棒 也很好看 但是遇到下面一个问题 问题 因为我是双系统 因此经常会来回切win linux 但是发现换了deepin桌面后睡眠无法使用了 经常一睡就凉咯 无法唤醒 经过查找问题
  • Activity的四种启动模式和应用场景

    Activity的四种启动模式和应用场景 简介 通过设置ActivityManifestActivity launchMode可以设置Activity的启动模式 默认情况下 使用启动模式 standard 同时 launchMode可以通过
  • 算法编程6:连续子数组的最大和

    问题描述 输入一个整型数组 数组中的一个或连续多个整数组成一个子数组 求所有子数组的和的最大值 要求时间复杂度为O n 示例 输入 nums 2 1 3 4 1 2 1 5 4 输出 6 解释 连续子数组 4 1 2 1 的和最大 为 6
  • CentOS的Linux系统安装docker

    docker的官方网站教程 https docs docker com engine install centos prerequisites 参照官方教程 安装了 yum install y yum utils 搜索其他教程都安装了 yu
  • 字节流、字节流、转换流、打印流

    字节流 字节流 转换流 打印流 一 字符流 概述 字符流只能操作有文字的文件 纯文本文件 字符流的操作原理 字符输入流 先把字节从文件中读取出来 使用的字节流读的 根据文件的编码集把字节数变为对应的字符 把字符 读到内存中 解码的过程 字符
  • react组件状态同步-状态提升

    假设定义组件TemperatureInputSon import React from react class TemperatureInputSon extends React Component constructor props su
  • Linux安装部署Tomcat服务器

    Tomcat Tomcat 服务器是一个免费的开放源代码的Web 应用服务器 属于轻量级应用服务器 在中小型系统和并发访问用户不是很多的场合下被普遍使用 是开发和调试JSP 程序的首选 对于一个初学者来说 可以这样认为 当在一台机器上配置好
  • 【MATLAB第19期】基于贝叶斯Bayes算法优化CNN-LSTM长短期记忆网络的单列时间序列模型及多输入单输出回归预测模型

    基于贝叶斯Bayes算法优化CNN LSTM长短期记忆网络的单列时间序列模型及多输入单输出回归预测模型 前言 前面在 MATLAB第8期 讲解了基于贝叶斯Bayes算法优化LSTM长短期记忆网络的时间序列预测模型 即单输入数据时间序列预测
  • 从“玩枪”到“玩键盘”,退伍军人到程序员的华丽转型

    前言 我的生活平淡无奇 甚至可以说毫无希望 如果你了解我以前的生活 再看到我现在的境况 一定会惊讶 为什么一个人的变化会如此之大 叛逆 事情要从上学时候说起 我从小就是一个叛逆的孩子 贪玩 不爱学习 喜欢 舞枪弄棒 所以在学校的成绩一直都不
  • win10下安装vivado 2018.3之后ise14.7 的impact 无法使用

    软件版本号 操作系统win10 ise14 7 vivado 2018 3 ise14 7 在win10里面问题总结 1 ise14 7 闪退问题 比较好解决 论坛上比较多的解决方法 2 ise 14 7 windows 10 版本的ise
  • Extjs ToolBar动态更改图标

    使用setIconClass方法 Ext getCmp javaEye setIconClass javaEyeCss 其中 javaEye 是toolbar里的一个图标项 javaEyeCss 是css里定义的一个样式 形如 javaEy
  • PHP实现简易版区块链

  • 通过wireshark抓取telnet登陆密码

    笔者学校有一台设备 ip地址是 192 168 84 10 先打开wireshark捕获无线网卡 使用telnet登陆如图所示 按下回车 笔者这里输入的密码是 A603 现在回到wireshark停止抓包 并且在filter处输入如下的过滤
  • 将uboot,kernel,rootfs下载到开发板上

    1 为什么要下载 所谓下载 也称烧录 部署 1 1 什么是u boot Hi3518EV200 单板的 Bootloader 采用 U boot u boot是一种普遍用于嵌入式系统中的Bootloader Bootloader是在操作系统
  • input type=file 获取选择文件名称、路径方法及input上传按钮美化

    获取文件名 document getElementById upload files 0 name 获取文件路径 document getElementById upload value 页面效果 原生代码
  • Git使用教程总结

    第一篇 SVN VS GIT 转载 https blog csdn net daybreak1209 article details 78216798 svn 集中式 中央版本控制 n个版本 联网 局域网 同步 git 分布式 没有中央的概
  • Spring的多线程事务

    使用编程式事务手动管理多线程事务的生命周期 通过原子类 CountDown去控制多线程事务的全局提交或回滚 public class ThreadTransactionUtil 事务管理 private DataSourceTransact
  • CSS深入理解之line-height

    慕课学习 gt 前端开发 gt HTML CSS gt CSS深入理解之line height line height 一 line height的定义 行高line height 两行文字基线之间的距离 1 什么是基线 字符 x 下边缘