宽度 100% 不会产生父 div 的 100%。孙子内容导致溢出

Posted

技术标签:

【中文标题】宽度 100% 不会产生父 div 的 100%。孙子内容导致溢出【英文标题】:width 100% is not yielding 100% of parent div. Grandchild contents are causing overflow 【发布时间】:2022-01-16 16:28:03 【问题描述】:

我正面临文本溢出的经典问题。

总之:我试图通过一系列width: 100% 将顶部元素 (grab_item--content) 的宽度传播到孙子template_panel--item。但是,第一个孩子(带有draggable="false" 的无类元素)不尊重width: 100%

文本元素本身 (template_panel_item--panelText) 已准备好处理省略号的溢出。

.template_panel_item--panelText--RuXFCGbr 
    width: 100%;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;

但是,溢出逻辑并没有启动,因为width: 100% 不是收缩的。

我将width: 100% 分配给div 的前两层(template_panel_item-panelTextpanel_item--name),这样它们和它们的父级(panel_item--info)都具有相同的宽度。当我检查它们时,所有这些共享相同的宽度:539.94px

注意:我没有将width: 100% 分配给panel_item--info,因为它有兄弟姐妹,所以它不应该囤积100% 的宽度。我怀疑这是问题的一部分。但是,当我将其更改为width: 100% 时,它的宽度不会改变。

.panel_item--info--CWGaMv4e 
    display: flex;
    flex-direction: column;
    flex: 1 1 0;
    min-height: 0;
    min-width: 0;

沿着 DOM 树向上,第一个非溢出元素是 grab_item--content,其计算宽度为 304px,右填充为 14px,以及 width: 100%

它唯一的孩子是带有width: 100%的匿名可拖动div。

请注意,它的宽度为 627.94px 而不是 539.94px,因为前面提到了 panel_item--info 的固定宽度兄弟。

其中令人愤怒的部分是可拖动项目的width: 100% 没有被忽略。它只是产生100%627.94px。我通过将其width 属性更改为width: 50% 并看到它更改为313.97px 来验证这一点。

width: 100% 不应该给100% 父母的 宽度吗?因此,可拖动项目的width: 100% 不应该产生grab_item--content 的宽度吗?!?!

这是在 Chrome 上。

【问题讨论】:

试试这个:.template_panel_item--panelText--RuXFCGbr white-space: unset 【参考方案1】:

只需删除空格:nowrap。 您可以添加“文本溢出:省略号;”而是“空白:nowrap;”

【讨论】:

以上是关于宽度 100% 不会产生父 div 的 100%。孙子内容导致溢出的主要内容,如果未能解决你的问题,请参考以下文章

相对位置有限的 div 内可能有 100% 的屏幕宽度吗?

<div style="width:100%">是啥意思?

响应式网页设计:div 宽度 + 填充不会跨越包含 div,即使它们等于 100%

在 D3 v4 中使 SVG 容器具有父容器的 100% 宽度和高度(而不是像素)

父div设为width:100%,其中一个子div要全部铺满,请问如何解决

引导自动列宽,但所有列仍使用 100% 的父宽度