标签使段落高度变大

2024-01-06

我有以下小提琴:

http://jsfiddle.net/tompazourek/sn5jp/ http://jsfiddle.net/tompazourek/sn5jp/

<p>some normal-sized text</p>

<p>some <small>small</small>-sized text</p>

p { line-height: 20px }

当我在 Chrome 中检查页面时,我发现第一段的计算高度是 20px,但第二段的计算高度是 21px。

为什么是<small>标签导致这些问题?我怎样才能解决这个问题?

每次出现<small>在段落中的文字弄乱了我的基线网格 http://alistapart.com/article/settingtypeontheweb.


EDIT:后来我还发现了一篇与这个主题相关的有趣文章:深入研究 CSS:字体规格、行高和垂直对齐 http://iamvdo.me/en/blog/css-font-metrics-line-height-and-vertical-align.


解释:

这里发生了一些事情。

在你的例子中,small元素是一个行内元素 https://www.w3.org/TR/CSS2/visuren.html#inline-level,这意味着它的垂直对齐方式由vertical-align财产 https://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align.

默认vertical-align值为baseline,这意味着基线small元素将与父框的基线对齐:

将框的基线与父框的基线对齐。如果该框没有基线,请将下边距边缘与父级的基线对齐。

接下来,您需要考虑line-height财产 https://www.w3.org/TR/CSS2/visudet.html#propdef-line-height以及它是怎样的计算出的 https://www.w3.org/TR/CSS2/visudet.html#line-height。您还需要采取领先和半领先 https://www.w3.org/TR/CSS2/visudet.html#leading考虑到。在 CSS 中,半前导是通过查找元素之间的差异来确定的line-height and font-size,将其分成两半,然后将计算出的空间量放置在文本上方和下方。

为了便于说明,这里有一个示例图像演示了这一点(取自 W3.org https://www.w3.org/Talks/2008/0911-CSS-Amsterdam/line-height.png):

自从line-height is 20px,以及small元素有一个font-size of 13px,那么我们可以确定3.5px的上方和下方添加了空间small元素的文本:

(20px - 13px) / 2 =  3.5px

同样,如果我们计算周围文本节点的半前导,其具有font-size of 16px,那么我们可以确定2px在周围文本的上方和下方添加了一定的空间。

(20px - 16px) / 2 =  2px

现在,如果我们将这些半领先空间计算与vertical-align属性,您会注意到实际上在基线下方添加了更多空间small元素。这解释了为什么计算出的高度p元素包含small元素大于另一个元素的计算高度p元素。

话虽这么说,您会期望计算出的高度p元素继续增加font-size of the small元素减少。为了进一步说明这一点,您会注意到计算出的高度p元素是23px当。。。的时候font-size of the small元素设置为6px.

p { line-height: 20px; }
small { font-size: 6px; }
<p>some normal-sized text</p>
<p>some <small>small</small>-sized text</p>

潜在的解决方法:

因为我们知道高度差是由于添加到baseline,我们可以改变vertical-align的值small元素到top:

p { line-height: 20px; }
small { vertical-align: top; }
<p>some normal-sized text</p>
<p>some <small>small</small>-sized text</p>

或者,您可以给出small元素aline-height of 17px,这会导致2px在元素上方和下方添加的空间量(与我们上面计算的周围文本添加的空间量相同)。

// Surrounding text that is 16px:
(20px - 16px) / 2 =  2px

// Small element text that is 13px:
(17px - 13px) / 2 =  2px
p { line-height: 20px; }
small { line-height: 17px; }
<p>some normal-sized text</p>
<p>some <small>small</small>-sized text</p>

但是,您确实不想计算其中的任何内容并对它进行硬编码,这意味着您应该只使用相对的line-height并省略px units.

自从font-size is 16px和想要的line-height值为20px,你会划分line-height by the font-size并得到1.25:

p { line-height: 1.25; }
<p>some normal-sized text</p>
<p>some <small>small</small>-sized text</p>

如果您不想使用亲​​戚line-height: 1.25,并且您想继续使用line-height: 20px,那么你当然可以重置small元素的line-height值回到初始值,即normal.

p { line-height: 20px; }
small { line-height: normal; }
<p>some normal-sized text</p>
<p>some <small>small</small>-sized text</p>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

标签使段落高度变大 的相关文章

  • 使用 PHP 将 class="active" 添加到活动页面

    动态标头 CSS 类更改为活动使用 PHP 目录 我想要的班级 li 在活动目录下更改标签 现在 每个指南都向我展示了当您的页面等于它时如何执行此操作 但我想更改 这 li li 取决于我所在的目录 例如 如果说我在 http exampl
  • 从 HTML div 中删除所有文本内容,但保留 HTML 标签和结构

    I have div Here a href is a p Text that I want to p be removed div I want div a href a p p div 删除所有文本但保留 HTML 结构的最简单方法是什
  • JavaScript 跨浏览器单击 HTML DOM 元素

    是否有可用的普通 JavaScript 跨浏览器函数能够触发 HTML DOM 元素 包括 div 等非表单元素 上的单击事件 大多数走这条路的人要么最终开发自己的事件管理系统 这并不难 但很烦人 要么在可用的功能范围内工作 如果所有浏览器
  • 使用jquery和css点击按钮后旋转div文本

    我想使用 jquery 和 css 单击按钮后旋转 div 文本 如果用户点击Rotate Left按钮 然后文本在左侧旋转 or用户点击Rotate Right按钮然后文本在右侧旋转 Example div Happy Birthday
  • CSS:多属性选择器

    我想设置 电子邮件 和 密码 类型的表单输入样式 但不设置其他任何样式 我正在想象类似以下的事情 input type email type password 然而 属性选择器的工作方式似乎将其解释为 输入 其中类型同时是 电子邮件 and
  • 当 MediaElementAudioSource 输出为零但 CORS 不再是问题时,如何才能播放音频?

    我正在尝试实施
  • CSS 中 calc() 的结果是什么

    我们现在已经开始使用calc 在CSS中 用于设置计算结果的宽度 例如 div div div div parent width 100px calcWidth width calc 100 3px height 100px backgro
  • 如何为 HTML5 音频元素制作加载栏?

    我正在尝试为 HTML5 音频元素制作一个加载栏 显示加载 缓冲的百分比 对于视频标签 可以使用以下方法进行计算 video buffered end 0 video duration 但我无法让它与音频标签一起使用 它只是返回一个固定值
  • 单击输入字段会触发窗口调整大小

    我有一个带有徽标 菜单和搜索的标题 当我在桌面上时 我会按该顺序显示所有元素 但如果我的窗口宽度小于 980 像素 菜单会隐藏 有一个切换按钮 并且徽标会与nav并附在徽标之后 如果宽度更大 则徽标将再次分离并附加到 DOM 中的旧位置 w
  • canvas.getContext('2D') 返回空值

    我创建了一个画布并将其命名为getContext 方法 但它返回null为上下文 这是我使用的代码 我在控制台中得到了这个
  • 从网站存储数据的最简单方法(在服务器端)

    我有一个非常简单的网站 实际上是单页 有一个输入字段和一个按钮 我需要将用户提交的数据存储在服务器端的某个位置 完美的方法可能是简单的文本文件 并在每次单击按钮后附加新行 日志文件也可以 据我了解 JavaScript 本身是不可能的 我在
  • c# 如何生成锦标赛括号 HTML 表

    所以我已经被这个问题困扰了三个星期 但我一生都无法弄清楚 我想做的是使用表格获得这种输出 演示 http www esl world net masters season6 hanover sc2 playoffs rankings htt
  • 如何将当前元素传递给 Knockout.js 绑定中的 Javascript 函数?

    因此 我尝试根据是否选中子复选框 使用 Knockout js 将类添加到元素 为此 我试图通过this作为我的函数的参数 目前 我的精简 DOM 结构如下 tr td td tr
  • HTML 和 JavaScript - 将滚动操作从一个元素传递到另一个元素

    假设我有两个 div div div div A scrollable list div 我想让它当光标停在里面时 control并且鼠标滚轮滚动 view将会滚动 无论如何要实现这一目标 好的 快速修复对我有用 即使固定 div 不可滚动
  • iOS Safari Mobile 禁用上一个和下一个选择输入

    上周五我发现了关于此问题的类似问题 但似乎无法再次找到它 如果有人能指出我正确的方向 那就太好了 本质上我在一个页面上有多个选择菜单 第一个在加载时填充 第二个在第一个选择时填充 够简单的 但是 在 iOS 设备中 当您点击选择元素时 它会
  • 如何修复 getImageData() 错误画布已被跨源数据污染?

    我的代码在本地主机上运行得很好 但在网站上却不起作用 我从控制台收到此错误 对于这一行 getImageData x y 1 1 data Uncaught SecurityError Failed to execute getImageD
  • `ie9` - contenteditable false 在父级可编辑时不起作用

    我正在尝试制作内容可编辑和不可编辑的容器 用户可以通过 3 种方式使用它 他们可以将内容与non editable 他们可以将内容与editable 他们可以在不选择其中之一的情况下放置内容 可编辑 我正在努力实现以下目标 content
  • 数字和小数的输入掩码

    在测试我的程序后 我发现了以下错误 我在 sqlserver 中的表包含 价格数字 6 2 我的程序的用户输入价格 555 00 就很好了 但是当他输入 555555 时 这是错误的 所以我需要指定掩码 其中尾数是可选的 0 到 999 小
  • 响应式导航栏隐藏其下方的元素

    我创建了一个响应式导航栏 但它使下面的元素 Flexslider 插件 消失 在我制作导航栏之前 下面的 Flexslider 可以正常显示 但现在不行 导航栏的 z index 为 2 所以我不知道问题是什么 我应该如何 更改什么才能允许
  • CSS:缩放字体大小以适应父块元素的高度

    我发现的几乎每个问题和答案都谈到了视口大小 这确实不是我的问题 拿着这支笔 https codepen io njt1982 pen pZjZNM https codepen io njt1982 pen pZjZNM 我有一个非常基本的

随机推荐

  • android 中具有相应标签的单选组的 TableLayout

    我正在创建一个反馈输入表单 它可以让用户从单选按钮中进行选择 如下图所示 因此 我采用了表格布局 并在第一行中添加了带有固定宽度的文本视图的表格行 并在其余行中添加了带有固定宽度的单选按钮的文本视图 这是布局代码
  • 从超类访问私有变量(JAVA)

    好吧 我整个学期都在学习java 并且认为我对继承和超 子类有了清晰的了解 今天我们的任务是创建一个名为敌人的超类 以及不同类型敌人的子类 我做的一切都很好 我的所有子类都在工作 但是当我回去阅读我们必须遵循的指南时 我发现了这句话 超类的
  • Java 8 javax.net.ssl.SSLPeerUnverifiedException:对等点未经过身份验证,但不是 Java 7

    我在将应用程序从 Java 7 切换到 Java 8 时遇到问题 更改 JDK 后 我开始收到此 SSLPeerUnverifiedException 改回Java 7 也不例外 我发现这个问题 Java 7 的 SSL 连接失败 http
  • 从 SSL 证书中提取序列号

    客户端和服务器持有匹配的证书 当服务器发送通信时 它会解码证书中的序列号并将其传递给客户端 然后 客户端可以从其证书副本中获取序列号 并将其与服务器提供的序列号进行比较 这些应该匹配 证书中序列号的字符串表示形式显示如下 58 17 9B
  • 针对大量出站 HTTP 请求优化 Node.js?

    我的 Node js 服务器有时会变得缓慢或无响应 甚至在尝试连接到服务器时偶尔会导致 503 网关超时 我 99 确定 基于我运行的测试 这种延迟具体是由于我使用节点oauth模块 https github com ciaranj nod
  • 使用 jQuery 循环 XML

    我有一些基本代码 可以循环处理从 Adob e RoboHelp 用于我们的帮助文档 生成的一些 XML 这工作正常 但由于主题可以根据作者的需要嵌套多次 因此我需要一种更好的方法来循环此 XML 而不仅仅是嵌套 each loops XM
  • Python:为什么 print 语句和 subprocess.call() 输出不同步?

    我正在运行以下代码 将其称为batch py for config in keystoneConfig cmdlist generate cmd list config print join cmdlist subprocess call
  • 测试不通过 Maven 运行?

    当我在 Maven 中运行测试时 我得到以下信息 INFO INFO T E S T S INFO INFO INFO Results INFO INFO Tests run 0 Failures 0 Errors 0 Skipped 0
  • UITableView 方法“indexPathForRowAtPoint:”的奇怪行为

    如下面的代码所示 当tableview被拉伸 从不向上滚动 时 NSLog tap is not on the tableview cell 总是会被称为 因为我认为indexPath将永远为零 但是当我点击节号大于 2 的节标题中的头像时
  • Objective-C 在另一个类上调用函数?

    这是我的 Objective C 课程 AppDelegate SomeScript 我如何从应用程序委托或任何其他类调用 SomeScript 类上的登录函数 我假设loggedIn是一个不带参数的实例方法 首先 几个术语问题 它们不是函
  • QLabel 中的文本滚动(字幕)

    我正在学习小部件选框标签 https www linux apps com p 1132075 class include WidgetMarqueeLabel h include
  • Backbone.js 将视图附加到多个元素

    我对骨干很陌生 所以我这样做可能违反了骨干的本质 感谢建议 我做了一个墙式系统 所以有一个表格可以用来在墙上发布更新 每次更新都可以有评论 我一次显示 10 个更新 所以有10个评论表 所以我有一个看法 CommentForm Backbo
  • vscode API:获取行最后一个字符的位置

    跟进这个仍然悬而未决的问题 https stackoverflow com questions 57099341 vscode extenstion how to get position of last character of line
  • 使用Picasso设置背景资源

    我知道 Picasso 是一个很棒的图像库 Picasso with context load http i imgur com DvpvklR png into imageView 使用此代码我可以将图像加载到图像视图 但是是否可以使用
  • 如何通过 Typescript (Angular2) 检测页面上任意位置的点击[重复]

    这个问题在这里已经有答案了 如何通过 Typescript 检测页面任意位置的点击 在 AngularJS 2 中 您可以范围HostListener到文档 import Component HostListener from angula
  • 从另一个线程访问单例对象

    我使用调用服务方法 ThreadPool QueueUserWorkItem o gt service Method arg1 arg2 服务有对象 loggingService 我正在使用 Spring Net private reado
  • Python 检查损坏的视频文件(捕获 OpenCV 错误)

    我正在寻找一种方法来检查视频文件是否已损坏 我正在使用 cv2 Python 的 OpenCV 来加载视频 如果视频文件已损坏 我想跳过该文件并继续处理下一个文件 我找到了这个堆栈溢出问题 https stackoverflow com q
  • 运行“ng test”时,Jasmine 测试列表未显示在浏览器输出中

    我继承了几年前首次开发的 Angular 应用程序 我被赋予的任务之一是让我们的测试继续进行 因为在过去的一年或更长时间里没有进行过测试 这最初是 Angular 2 应用程序 已更新至 2 3 1 左右 目前我们无法进行进一步的更新 因为
  • android 数字格式异常

    我得到以下异常 java lang NumberFormatException 无效的整数 当您尝试将值存储到共享首选项中而输入字段中尚未插入任何内容时 就会发生这种情况 这是因为我将输入解析为 int 因为我需要对数字进行减法 这不是什么
  • 标签使段落高度变大

    我有以下小提琴 http jsfiddle net tompazourek sn5jp http jsfiddle net tompazourek sn5jp p some normal sized text p p some p
Powered by Hwhale