iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >line-height和vertical-align的作用是什么
  • 114
分享到

line-height和vertical-align的作用是什么

2023-06-08 07:06:32 114人浏览 安东尼
摘要

line-height和vertical-align的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。line box:包裹 inline box 的一

line-height和vertical-align的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

  • line box:包裹 inline box 的一个盒子,一个或多个 line box 堆叠撑起一个 html 元素。

  • inline(-level) box:可以是一个由行内元素包裹的盒子,也可以是一个纯文字的匿名盒子。

  • content area:对于非替换元素来说,content area 的范围由 font-size 以及字体本身决定;对于替换元素来说,由元素自有宽高决定。

  • baseline:一个元素基线的位置由该元素内字母 x 底部所在的位置决定,当然字体不同基线所在的位置也就不同。

通过一段代码可以理解一下:

div {  background-color: #ccc;  font-size: 20px;  color: #fff;}span {  color: red;}<div>文字1<span>文字2</span>文字3</div>

line-height和vertical-align的作用是什么

白色的文字就是一个匿名 inline box,红色的文字是一个由 span 包裹的 inline box。这三个 inline box 组成一个 line box,可以理解为灰色的区域,因为在这个例子里就是由一个 line box 撑开了 div。如果有多行的文字,那就有多个 line box。

关于 content area,W3C 有一段这样的解释:

CSS 2.1 does not define what the content area of an inline box is (see 10.6.1 above) and thus different UAs may draw the backgrounds and borders in different places.

这篇文章对非替换元素 content area 的定义就是自有宽高加上 margin,padding 以及 border。我认为应该将 content area 理解为 content box。

line box 高度

浏览器会计算 line box 中每一个 inline box 的高度,对于不同的 inline box 计算方式有所不同:

如果是一个替换元素(比如 imginput),inline-* 元素或者是 flexbox 中的子元素,高度由其 margin box 决定;

inline-block 元素:

div {  background-color: #ccc;  color: #fff;}span {  display: inline-block;  height: 30px;  margin: 10px;  background: #fff;  color: red;}<div>xxx<span>xxx</span>xxx</div>

line-height和vertical-align的作用是什么

这里 span inline box 的高度就是 height + margin 2。如果 height 的值是 auto,高度就是等于 line-height + margin 2。

如果是一个非替换元素,高度由它的 line-height 决定,而不是 content area,虽然有时候看起来像 content area 撑开了 line box 的高度。

div {  background-color: #ccc;  font-size: 20px;  color: #fff;  font-family: Sana;}span {  background: #fff;  color: red;}<div>xxx<span>xxx</span>xxx</div>

line-height和vertical-align的作用是什么

这张图片可以明显地看出撑开 line box 的是 line-height,而不是 content area。

这篇文章用了 virtual-area height 来表示 line-height 撑开的高度,而我的理解其实就是 inline box 的高度。

line box 中所有 inline box 的最高点以及最低点决定了它的高度(该计算包括了 strut 的高度,后文会提到 strut)。

非替换元素的的 margin,padding 以及 border 并不会影响 line box 高度的计算。当一个 inline-level box 的 line-height 小于 content area 的时候,line box 的高度就会小于 content area,此时元素的 background 以及 padding 等就会溢出到 line box 之外。

以下代码可以说明这个问题:

div {    background: #eee;    border: 1px solid #000;    box-sizing: border-box;    font-size: 50px;    line-height: 10px;}span {    background: red;    margin: 10px;    padding: 10px;}<div><span>xxx</span></div>

line-height和vertical-align的作用是什么

leading:

content area 的高度与 inline box 的高度差就是 leading,这个 leading 会等分被添加到 content area 的顶部与底部,所以说 content area 永远位于 inline box 的中间(垂直居中)。

strut:

浏览器认为每一个 line box 的起始位置都存在一个宽度为 0,没有任何字符的 匿名 inline box,称为 strut,这个 strut 是会从父元素继承 line-height 的,因此它的高度会影响整个 line box 高度的计算。

一个例子

line-height和vertical-align的作用是什么

div { background: #eee; border: 1px solid #000; box-sizing: border-box; }<div><img src="./image.png" alt=""></div>

在图片中可以看到 img 与外层的 div 存在一个间隙,这就是上文提到的 strut 造成的。

在这个例子中,默认情况下 img 的底边与父元素的基线对齐(img { vertical-align: baseline }),而这个基线实际上就是 strut 基线所在的位置。如下图所示:

line-height和vertical-align的作用是什么

strut 其实就相当于一个不可见的字母 x,上文已经提到 strut 本身是具有 line-height 的,所以就导致图片底部多了一段间隙。

总结一下存在间隙原因:

  • strut 存在 line-height

  • vertical-align 默认值为 baseline

对应的解决方案:

  • 修改 strut 的 line-height,因为 strut 的 line-height 不是能够直接设置的,所以需要设置父元素的 line-height,然后让 strut 继承,或者修改 font-size

  • 将 vertical-align 设置为其他值line-height

W3C 中对于 line-height 的解释是这样的:

On a block container element whose content is composed of inline-level elements, 'line-height' specifies the minimal height of line boxes within the element. The minimum height consists of a minimum height above the baseline and a minimum depth below it, exactly as if each line box starts with a zero-width inline box with the element's font and line height properties. We call that imaginary box a "strut."

我的简单理解是,对于由行内元素组成的块级元素而言,line-height 决定了 line box 的最小高度,浏览器会假定每一个 line box 以一个宽度为 0 的 inline box (strut)开始,而这个 strut 从父元素继承到 font 以及 line-height。

  • nORMal 是 line-height 的默认值,W3C 对它并没有一个明确的定义。normal 会将 content area 作为一个计算因素。

  • line-height 并不是两条 baseline 之间的距离。

  • line-height 的值推荐使用数值,而不是使用 em 单位,因为 em 单位会根据从父元素继承到的 font-size 来计算行高。

vertical-align

W3C 对 baseline 以及 middle 的定义如下:

baseline: Align the baseline of the box with the baseline of the parent box. If the box does not have a baseline, align the bottom margin edge with the parent's baseline.

元素基线与父元素基线对齐,如果元素没有基线,比如 img,则使用 margin 底边与父元素基线对齐。

middle: Align the vertical midpoint of the box with the baseline of the parent box plus half the x-height of the parent.

元素的垂直中点位置与父元素的基线加上一半 x-height 的位置对齐。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: line-height和vertical-align的作用是什么

本文链接: https://www.lsjlt.com/news/252598.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • line-height和vertical-align的作用是什么
    line-height和vertical-align的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。line box:包裹 inline box 的一...
    99+
    2023-06-08
  • vertical-align和line-height怎么在css中使用
    这期内容当中小编将会给大家带来有关vertical-align和line-height怎么在css中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。<!DOCTYPE html>&...
    99+
    2023-06-08
  • CSS 行高属性指南:line-height 和 vertical-align
    标题:CSS 行高属性指南:line-height 和 vertical-align引言:在进行网页设计或者前端开发过程中,我们经常需要调整文本的行高和垂直对齐方式,以达到更好的排版效果。在 CSS 中,我们可以使用 line-height...
    99+
    2023-10-21
    CSS 属性 行高
  • CSS中vertical-align属性的作用是什么
    CSS中vertical-align属性的作用是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。基线要了解vertical-align属性,必须懂得基线,怎么理解基线呢?我们...
    99+
    2023-06-08
  • css中height和line-height的区别是什么
    本篇内容介绍了“css中height和line-height的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2024-04-02
  • CSS中line-height和height有什么用
    这篇文章给大家分享的是有关CSS中line-height和height有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、一些基本概念行高是指文本行基线间的垂直距离(也叫行距)行间距是上行的底线和下一行顶线...
    99+
    2023-06-08
  • CSS的vertical-align有什么用
    CSS的vertical-align属性用于控制元素的垂直对齐方式。它适用于行内元素和表格单元格等具有文本基线的元素。vertica...
    99+
    2023-10-20
    CSS
  • css中vertical-align是什么意思
    小编给大家分享一下css中vertical-align是什么意思,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   verti...
    99+
    2024-04-02
  • css中vertical-align属性有什么用
    这篇文章主要为大家展示了“css中vertical-align属性有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css中vertical-align属性...
    99+
    2024-04-02
  • vertical-align使用介绍是怎样的
    vertical-align使用介绍是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 前言 最近学习CS...
    99+
    2024-04-02
  • CSS的vertical-align属性怎么使用
    本文小编为大家详细介绍“CSS的vertical-align属性怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“CSS的vertical-align属性怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-04
  • CSS的line-height属性有什么用
    本篇内容介绍了“CSS的line-height属性有什么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • CSS line-height属性有什么用
    CSS line-height属性用于设置元素中文本行之间的间距。它可以被应用于块级元素、行内元素和替换元素。通过设置line-he...
    99+
    2023-10-11
    CSS
  • css中text-align的作用是什么
    这篇文章主要介绍“css中text-align的作用是什么”,在日常操作中,相信很多人在css中text-align的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • css中font-size字体单位和line-height有什么用
    小编给大家分享一下css中font-size字体单位和line-height有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!px(pixel)像素相信大家对...
    99+
    2023-06-08
  • CSS min-height的作用是什么
    CSS min-height属性用于设置一个元素的最小高度。它指定元素的高度不能小于该值,即使内容很少或没有内容,也会保持在指定的最...
    99+
    2023-10-21
    CSS
  • css的line-height功能怎么应用
    本篇内容主要讲解“css的line-height功能怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css的line-hei...
    99+
    2024-04-02
  • CSS text-align属性的作用是什么
    CSS text-align属性用于设置文本内容在其容器中的水平对齐方式。它可以应用于块级元素和表格元素。text-align属性可...
    99+
    2023-10-11
    CSS
  • html中Video height属性的作用是什么
    在HTML中,`height`属性用于指定`<video>`元素的高度。它定义了视频播放区域的垂直尺寸,以像素(px)为...
    99+
    2023-10-12
    HTML
  • CSS flex布局属性align-items和align-content的区别是什么
    这篇文章主要讲解了“CSS flex布局属性align-items和align-content的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS flex布局属性align-i...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作