【问题标题】:CSS Flex-box - Trim box containing long textCSS Flex-box - 包含长文本的修剪框
【发布时间】:2014-07-18 03:47:51
【问题描述】:

我正在使用 CSS 中的 flexbox 系统,但我不知道如何解决我的问题。

如果我有一个长文本框,它分成两行,框会增长到可用的全宽,我不希望这样。如果文本在多行上,那么我希望框增长到最长行的宽度。好吧,我的英语不太好,所以我有图片来更好地展示我想要实现的目标。

这就是我现在拥有的:

这就是我想要的:

我在谷歌(和 stackoverflow)中寻找现成的解决方案,但没有运气。 我还为此准备了 JSFiddle:http://jsfiddle.net/f98VN/4/

是否可以做我想做的事,如果可以,我该如何实现?如果没有,您有什么建议?

代码:

HTML

<div class="flex-parent">
    <div class="item1"></div>
    <div class="item2">text is here</div>
    <div class="item1"></div>
</div>

CSS

.flex-parent {
    display: flex;
    justify-content: center;
    width: 550px; /* it has width of the whole page, in fiddle I changed it to fixed */
    align-items: center;
}

.item1 {
    background: red;
    height: 100px; /* it has constant width */
    width: 100px;
}

.item2 { /* it's width is fluid, depends on text inside which is modified by JS */
    background: pink;
    font-size: 100px;
}

【问题讨论】:

标签: html css flexbox


【解决方案1】:

您可以使用 :display:table;width:1%; DEMO 或使用 inline-blockinline-table 将中间容器缩小到最长的单词,删除 flexmodel : DEMO (this is it)

为了使单词保持在一起,您可以在要保留在同一行的单词之间使用非中断字符&amp;nbsp;DEMO

编辑: 以上演示适用于某些浏览器。在 Chrome 和 Opera 中,内容移动到页面的一侧。 固定版本:http://codepen.io/gc-nomade/pen/izKFG

【讨论】:

  • 非常感谢!这就是我想要的样子。 :)
  • 完美,注意 display:table 会收缩/扩大到它的内容,设置一个小宽度使它包裹内联内容
  • 嗯,我对它进行了更深入的研究,但它并不是很完整的解决方案。由于该宽度: 1% 内容被移动到一边,而不是在页面中心。您可以在您的小提琴示例中清楚地看到这一点。我将尝试修改您的代码以找到完整的解决方案。
  • 我不得不取消选中接受答案。解决方案几乎很好,问题是整个内容从页面中心移动,因为宽度:1%。 justify-content: center“认为”中间框的宽度为 1%,而不是实际宽度更多。 :/ 我玩弄了那个代码,看起来它根本无法按照我想要的方式完成。
  • @Rob 好吧,我不确定是否理解,如果我将边框和边距自动设置为 flex-parent,我会在中心看到所有 3 个框。您是否有一个链接显示您的问题,或者是使用特定的浏览器?在这里测试codepen.io/gc-nomade/pen/eLycj
【解决方案2】:

嗯,额外的空格出现是因为空格分隔符是浏览器应用的假效果。实际上发生的情况是,它被浏览器隐藏了,是单词在其字母之间中断,然后多余的空格实际上是字母真正占用的空间。

你可以通过将文本div设置为word-break: break-all;http://jsfiddle.net/f98VN/10/来查看

不是你问的效果,但至少不会留下多余的空间。

【讨论】:

  • 我发现这是我的问题的原因。问题是我不能在字母上打断单词。 @GCyrillus 刚刚解决了我的问题。感谢您的帮助!
【解决方案3】:

我让它以你想要的方式出现,使用百分比而不是固定像素宽度,

changed width: 550px; to width:70%;

看看这个Updated fiddle

【讨论】:

  • 让它变得更糟(至少在我的屏幕上)
  • 为什么要为灵活的东西设置固定的像素宽度?您需要调整百分比以使其看起来更适合您。
  • 我已经为这个小提琴示例在父级上设置了固定宽度。事实上,我的宽度为 100%,但它以页面为中心(也有 flex)。粉红色的文本是用 JavaScript 动态修改的,所以有一次它会有文本:“one”,比如说 50px 宽度,另一个时候粉红色的 div 有文本“something long”,然后它会有更大的宽度。这就是为什么我不能设置恒定宽度 70%,它必须是灵活的。 @GCyrillus 解决了问题,所以你可以检查一下。感谢帮助。 :)
猜你喜欢
  • 2021-10-16
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 2018-10-19
  • 2022-01-25
  • 1970-01-01
相关资源
最近更新 更多