当前位置: 首页 > 知识库问答 >
问题:

javascript - 求指导:span的display为inline-block 和inline的时候对父级元素高度的影响?

尉迟雅昶
2024-02-26
 <div style="line-height: 30px;">      <span></span>  </div>

这样一段代码 ,如果设置 span的display为inline-block 则div的高度为30px;
如果设置span的display为inline 则div的高度为0.

请问这是什么原因?

我的思路: 我知道行框盒子 和 幽灵空白节点。 对于display为inline-block 我能理解div的高度为什么是30px。每个行框盒子都以一个零宽度,带有元素字体以及行高属性的内框开始,我们称这个假想的盒子为'支柱'
那么为什么display为inline的时候 div的高度是0呢? 难道此时就没有行框盒子吗?

参考:

  1. https://blog.csdn.net/userkang/article/details/105161683 这篇文中中提到了 为什么inline的时候高度为0, 但是这个解释我没有理解
    image.png

共有3个答案

施彬彬
2024-02-26
Line boxes that contain no text, no preserved white space, no inline elements with non-zero margins, padding, or borders, and no other in-flow content (such as images, inline
blocks or inline tables), and do not end with a preserved newline must be treated as zero-height line boxes for the purposes of determining the positions of any elements inside of them, and must be treated as not existing for any other purpose.
  • no text
  • no preserved white space
  • no inline elements with non-zero margins, padding, or borders
  • no other in-flow content(such as images, inline blocks or inline tables
  • do not end with a preserverd newline

=>

  • for the purposes of determining the positions of any elements inside of them, must be treated as zero-height line boxes
  • for any other purpose, must be treated as not existing

我觉的这段话说的挺明白了,而且最关键的应该就是它了。

  • display: inline时这个line-box是不存在(此时它满足上面所有的条件),故也就没有什么strut了。如果给它加上不为0的marginpadding或者borders的时候,这时候上面的条件3就不成立了,故line-box存在,此时div大小就不为0了。
  • display: inline-blocks时,上面的条件4就不成立了,故line-box存在,又由于strut,此时div大小不为0

附:
这里不需要显示设置line-height

 <div style="line-height: 30px;">      <span></span>  </div>
狄鸿禧
2024-02-26

因为 BFC 和 IFC 的不同。比如说以下的例子中,只有包裹 inline-block.container 容器会有高度。

<div class="container">  <div style="display: inline-block;"></div></div><div class="container">  <div style="display: inline;"></div></div><div class="container">  <dis style="display: block;"></dis></div><style>.container {  background-color: red;}</style>

理解起来会很费劲,具体得解释可以查看以下两个问题:

  • Why Empty Display Inline Block Element Create Height But Display Inline and Display Block not? - Stack Overflow
  • html - How to determine height of content-box of a block and inline element - Stack Overflow

其他
[css-display] Should 'run-in flow-root' blockify to 'block' or 'flow-root'? · Issue #1715 · w3c/csswg-drafts

裴华荣
2024-02-26

在CSS中,inlineinline-block是两种不同的显示模式,它们对元素的高度和宽度有不同的影响。

当你将一个元素设置为inline,这个元素将作为行内元素显示。行内元素不会独占一行,而是与其他行内元素在同一行内显示。它们不会像块级元素那样自动扩展以填充其父元素的宽度,而是只占据它们内容所需的宽度。对于高度,行内元素的高度通常只取决于其内容的高度,除非你明确设置了高度属性。因此,在你的例子中,如果spandisplay设置为inline,并且没有设置高度属性,那么div的高度将为0,因为行内元素不会增加父元素的高度。

另一方面,当你将一个元素设置为inline-block时,这个元素会作为行内块级元素显示。行内块级元素可以设置宽度和高度,并且像块级元素一样显示,但它们仍然与其他行内元素在同一行内显示。因此,如果spandisplay设置为inline-block,并且你设置了高度属性(如30px),那么这个高度将应用到span上,并因此影响到其父元素(即div)的高度。

至于你提到的行框盒子和幽灵空白节点,这些都是CSS布局中的概念。行框盒子是用于描述行内元素的布局和盒模型的抽象概念。幽灵空白节点是用来处理行内元素的垂直外边距的。这些概念有助于理解为什么不同的显示模式会对元素的高度产生不同的影响。

 类似资料:
  • 本文向大家介绍block、inline、inline-block的区别?相关面试题,主要包含被问及block、inline、inline-block的区别?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: block元素会独占一行,多个block元素会各自新起一行。默认情况下,block元素宽度自动填满其父元素宽度。 block元素可以设置width,height属性。块级元素即使设置了宽度

  • 本文向大家介绍inline-block、inline和block的区别;为什么img是inline还可以设置宽高?相关面试题,主要包含被问及inline-block、inline和block的区别;为什么img是inline还可以设置宽高?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: Block是块级元素,其前后都会有换行符,能设置宽度,高度,margin/padding水平垂直方向都有

  • 效果1 效果2 两段代码的区别: 第一段代码的div为inline-block,第二段为inline。 问题 为什么会出现这种不同的效果 b

  • 问题内容: 假设我有几列,我想旋转其中的一些值: 使用此CSS: 问题答案: 假设您希望旋转90度,即使对于非文本元素也可以旋转-但是像CSS中许多有趣的事情一样,它需要一些技巧。根据CSS 2规范,我的解决方案还会从技术上调用未定义的行为-因此,尽管我已经测试并确认它可以在Chrome,Firefox,Safari和Edge中使用,但我不能保证将来不会损坏浏览器版本。 Short answer

  • 本文向大家介绍inline、block、inline-block这三个属性值有什么区别?相关面试题,主要包含被问及inline、block、inline-block这三个属性值有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 CSS显示模块分为内部显示类型和外部显示类型,内部显示类型是定义子元素如何参与内部布局,外部显示类型定义了父元素如何参与外部整个文档流的布局,所以 inline-> i

  • 块元素,比如: 分区(division) <div> 段落(paragraphs) <p> 列表(lists):无序列表(unordered list with bullet points) <ul> 或 有序列表(ordered lists with numbers) <ol> 标题(headings):从1级标题 <h1> 到6级 <h6> 文章(articles) <article> 区块(