当前位置: 首页 > 面试题库 >

如何防止弹性项目因其文本溢出?

蔡晨
2023-03-14
问题内容

我将以下布局考虑在内。每个列表项由两列表示。第二列应占用所有可用空间,但
如果第一列占用太多空间,则应以最小大小将其固定在右侧。第一栏应显示省略号。

问题在最后一种情况下发生。当第一列包含太多文本时,它没有显示省略号,而是将其自身拉伸到弹性框之外,从而导致出现水平滚动条,而第二列则没有锚定在右侧。

.container {

    display: -webkit-flex;

}



div {

    white-space: nowrap;

    text-overflow: ellipsis;

}



.container > div:last-child {

    -webkit-flex: 1;

    background: red;

}


<!-- a small first column; the second column is taking up space as expected -->

<div class="container">

    <div>foo barfoo bar</div>

    <div>foo bar</div>

</div>



<!-- a large first column; the first column is overflowing out of the flexbox container -->

<div class="container">

    <div>foo barfoo barfoo barfoo barfoo barfoo barfoo bar

    foo barfoo barfoo barfoo barfoo barfoo barfoo bar

    foo barfoo barfoo barfoo barfoo barfoo barfoo bar</div>

    <div>foo bar</div>

</div>

问题答案:

更新

添加有效的代码:

.container {

    display: -webkit-flex;

}



.container>div:first-child{

    white-space:nowrap;

   -webkit-order:1;

   -webkit-flex: 0 1 auto; /*important*/

    text-overflow: ellipsis;

    overflow:hidden;

    min-width:0; /* new algorithm overrides the width calculation */

}



.container > div:last-child {

    -webkit-flex: 1;

    -webkit-order:2;

    background: red;

    -webkit-flex:1 0 auto; /*important*/

}

.container > div:first-child:hover{

    white-space:normal;

}


<div class="container">

    <div>foo barfoo bar</div>

    <div>foo bar</div>

</div>



<div class="container">

        <div>foo barfoo barfoo barfoo barfoo barfoo barfoo bar

        foo barfoo barfoo barfoo barfoo barfoo barfoo bar

        foo barfoo barfoo barfoo barfoo barfoo barfoo bar</div>

    <div>foo bar</div>

</div>

<div class="container">

    <div>foo barfoo bar</div>

    <div>foo bar</div>

</div>



<div class="container">

        <div>foo barfoo barfoo barfoo barfoo barfoo barfoo bar

        foo barfoo barfoo barfoo barfoo barfoo barfoo bar

        foo barfoo barfoo barfoo barfoo barfoo barfoo bar</div>

    <div>foo bar</div>

</div><div class="container">

    <div>foo barfoo bar</div>

    <div>foo bar</div>

</div>

原始答案/解释。W3C规范说:“ 默认情况下,弹性项目不会缩小到其最小内容大小(最长的单词或固定大小的元素的长度)以下。要更改此设置,请设置“最小宽度”或“最小高度”属性。“

如果我们遵循这一思路,我相信该错误已从Canary中删除,而不是相反。

只要我把检查min-width到0,它工作在加那利。

因此,该错误是在较早的实现中出现的,而canary删除了该错误。



 类似资料:
  • 我有以下的布局在脑海中的一个列表。每个列表项由两列表示。第二列应该占用所有可用空间,但是如果第一列占用太多空间,它应该以最小大小固定在右边。然后,第一列应显示省略号。 问题发生在最后一个案例中。当第一列包含太多文本时,它不会显示省略号,而是将自身从flexbox中伸出,从而显示水平滚动条,而第二列不会定位到右侧。 我想让它呈现如下(模型): 我怎样才能做到这一点? 这是提琴样品。

  • 我刚开始学习flex,到目前为止我印象深刻。但是,我对一个包含页眉/页脚和三列的完整页面应用程序有一个问题。第一列包含一个项目列表,因为我不能给它的父项设置固定的高度,所以每次列表增长时,它都会向下推页脚。 这是一个布局的代码:http://codepen.io/anon/pen/vNVQNjHtml: CSS:

  • 问题内容: 我正在使用flexbox将某些项目居中放置在一个块中,但我希望其中的每个项目都位于其自己的行中。例如,我希望橙色方块位于文本上方,但是在使用flex之后,将其移动到了文本的侧面- 请问有人知道解决这个问题的方法吗? 问题答案: 添加此样式: 这告诉flexbox在行而不是列中显示其子级。(我知道,很奇怪,对吧?) 更新的代码段:

  • JSFIDLE 如何阻止flexbox的子项溢出容器? 我不希望溢出设置为隐藏 超文本标记语言: CSS:

  • 我试图找出如何使列表中的最后一个flex项不扩展到容器的底部。它有一个contenteditable div,当有人输入多行文本时,我需要将其展开。 主要的灵活项目是一列中的3个div,标题栏宽度为100%,内容容器宽度为100%,有增长和收缩,页脚是灵活的,应该会导致内部容器收缩。 目前,当你在div.detail聊天输入中输入多行文本时,它确实会向上扩展,但也会向下推按钮。 这样地:

  • 由于某些原因,在容器视图的样式中设置会导致flex行中的文本停止换行,并且不遵守容器视图的。 这里的工作示例和代码:https://rnplay.org/apps/FsDXuQ 我尝试按照建议将flexDirection设置为列,使用flex: 1或flexWap,但唯一有效的是从容器视图中删除。 我不明白这是怎么回事。如果我想: 不占屏幕全宽的行元素 居中, 其中包含长文本, 哪个包裹 谢谢。