【问题标题】:How do I achieve the functionality shown in the image below?如何实现下图所示的功能?
【发布时间】:2017-01-08 01:39:23
【问题描述】:

我正在按照下面的示例使用弹性框,但它并不完全符合我的要求

link.

案例1:左>右

案例2:左右几乎相等并填满可用空间

情况3:左右都小于可用空间

案例4:左

在上述所有情况下,如果left >> right,它会占用整个框的宽度,'right'根本不显示。

如下图。

问题 1:如何设置 'left' 和 'right' div 的最小宽度,以免它们不在视野范围内。

问题2:当左右需要超过分配的空间时,都必须占用50%的宽度并被省略号截断。

HTML:

    <div id='parent5' class="parent">
  <div class="left">Left</div>
  <div class="right">Right</div>
</div>
<div id='parent5' class="parent">
  <div class="left">Lefkjasdkjsadkjhdkjsahdklksajdlksajsahdhkjsahdkjsahdkjsat</div>
  <div class="right">Rikjsadkjsahdkjsahdkjsahdkjsahdkjsahdkjsahdkjsahdksaght</div>
</div>
<div id='parent5' class="parent">
  <div class="left">Leaskjdkjsahdkjsahdkjsadkjhdsakjhdkjsahdkjsahdkjsahdkjhdkjsahdkjsaft</div>
  <div class="right">Right</div>
</div>
<div id='parent5' class="parent">
  <div class="left">Left</div>
  <div class="right">Rikjhsakjhdkjsahdkjsahdkjsahdkjsahdkjsahdkjsahdkjhsakjhdkjsahdjsadght</div>
</div>
<div id='parent5' class="parent">
  <div class="left">Lefsakdkjsahdkjsahdkjsahdkjsahdksadkjsadkjsadkjsahdsakhdkjsahdkjsahdkjsahdkjsahdkjsahdkjsahdkjsahdkjsakjsahdsat</div>
  <div class="right">Right</div>
</div>

CSS:

    .left {
    padding: 1em;
    background-color: #337ab7;
    text-align: left;
}

.right {
    padding: 1em;
    background-color: #5cb85c;
    text-align: right;    
}

.parent {
    display: flex;
    overflow: hidden;
    margin: 1em 0;
    color: #fff;
    border: 1px solid #333;
    align-items: center;
}

#parent5 {
    > div {
        flex: 1;
    }
}

【问题讨论】:

  • 听起来像是桌子的工作! ;-)
  • 有没有办法在不使用表格的情况下做到这一点?
  • 使用 CSS 使其表现得像表格(而不是 flexbox)。

标签: css sass


【解决方案1】:

你可以同时调整 flex-shrink 和 min-width 来得到你的结果:

.left {
  padding: 1em;
  background-color: #337ab7;
  text-align: left;
}
.right {
  padding: 1em;
  background-color: #5cb85c;
  text-align: right;
}
.parent {
  display: flex;
  overflow: hidden;
  margin: 1em 0;
  color: #fff;
  border: 1px solid #333;
  align-items: center;
}
.parent div {
  flex-basis: auto;
  flex-grow: 1;
  flex-shrink: 1;
  min-width: 100px; 
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
<div id='parent1' class="parent">
  <div class="left">Left</div>
  <div class="right">Right</div>
</div>
<div id='parent2' class="parent">
  <div class="left">Left long long long long long long long long long long long long long long long long</div>
  <div class="right">Right</div>
</div>
<div id='parent3' class="parent">
  <div class="left">Left</div>
  <div class="right">Right long long long long long long long long long long long long long long long long</div>
</div>
<div id='parent4' class="parent">
  <div class="left">Left long long long long long long long long long long long long long long long long</div>
  <div class="right">Right long long long long long long long long long long long long long long long long</div>
</div>
<div id='parent5' class="parent">
  <div class="left">Left</div>
  <div class="right">Right</div>
</div>

【讨论】:

  • 有没有办法在不使用 min-width 属性的情况下做到这一点?我希望“左侧”文本完整显示,直到达到父级的 50%,然后用省略号截断,同样适用于右侧。所以基本上如果左边的文本小于 100px,我希望右边占据那个空间。
  • 如果有这样的解决方案,我一直没能找到...对不起!
猜你喜欢
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 2020-03-02
  • 2020-09-20
相关资源
最近更新 更多