我使用flexbox layout设置过去任务列表的样式。任务描述和时间总是变化很大。
在输入任务描述之前,一切看起来都很棒,这个描述足够长,可以包裹在第二行,然后是' time'项目(在屏幕的最右侧)略微向右推 - 离开屏幕 - 隐藏了一些内容。
你可以在下面看到完整的简短描述,但是长篇推文会推动应该是什么' 00:08'离开屏幕,任务描述也向左移动!!
此处为a fiddle代码(根据Stackoverflow的规则,如下所示)。 如果您调整包含结果的窗格,请选择' 00:08'不会从页面上掉下来,但它显然向右移动太远。
上面的屏幕截图位于Chrome或Safari(我使用的两个浏览器)缩小窗口宽度,直到描述包装到第二行。
如果可能的话,我希望按照第一个(简短描述)行显示所有内容!还要理解为什么它的行为与目前一样。
P.S。我曾尝试使用浮动并使用表格显示布局,但这两种技术都引起了相当多的错误,主要是因为内容的长度可变(所以请不要将这些视为替代方案:))。
ul {
margin:0;
padding: 0;
}
#tasklist{
width: 100%;
}
.task-one-line{
display: flex;
flex-direction:row;
flex-wrap: nowrap;
justify-content: space-between;
align-item: baseline; /*flex-end*/
display: -webkit-flex;
-webkit-flex-direction:row;
-webkit-flex-wrap: nowrap;
-webkit-justify-content: space-between;
-webkit-align-item: baseline;
border-bottom: 1px solid #d3d3d3;
width: 100%;
}
.task-one-line i{
width:1.5em;
padding: 0.5em 0.3em 0.5em 0.3em;
/*border: 1px solid green;*/
}
span.task-desc{
flex-grow: 5;
-webkit-flex-grow: 5;
text-align:left;
padding: 0.3em 0.4em 0.3em 0.4em;
/*border: 1px solid red;*/
}
span.task-time{
flex-grow: 1;
-webkit-flex-grow: 1;
flex-basis:4em;
-webkit-flex-basis:4em;
text-align:right;
padding: 0.3em 0.5em 0.3em 0.5em;
/*border: 1px solid blue ;*/
}

<ul id="tasklist">
<li class="task-one-line">
<i class="fa fa-check-circle-o"></i>
<span class="task-desc">And a short one</span>
<span class="task-time">00:01</span>
</li>
<li class="task-one-line">
<i class="fa fa-check-circle-o"></i>
<span class="task-desc">Here's a super long long long long long long description that might wrap onto another line</span>
<span class="task-time">00:08</span>
</li>
</ul>
&#13;
答案 0 :(得分:5)
实际上,您只希望文本内容具有灵活的宽度(时间和图标应具有固定宽度而不缩小)。使用表格,绝对定位或flexbox可以很容易地实现这一点。
这是您需要知道的弹性箱:
.task-time: flex: 1 0 4em
.task-one-line i.fa { flex: 0 0 auto; }
ul {
margin:0;
padding: 0;
}
#tasklist{
width: 100%;
}
.task-one-line i.fa { flex: 0 0 auto; }
.task-one-line{
display: flex;
flex-direction:row;
flex-wrap: nowrap;
justify-content: space-between;
align-item: baseline; /*flex-end*/
display: -webkit-flex;
-webkit-flex-direction:row;
-webkit-flex-wrap: nowrap;
-webkit-justify-content: space-between;
-webkit-align-item: baseline;
border-bottom: 1px solid #d3d3d3;
width: 100%;
}
.task-one-line i{
width:1.5em;
padding: 0.5em 0.3em 0.5em 0.3em;
/*border: 1px solid green;*/
}
span.task-desc{
flex-grow: 5;
-webkit-flex-grow: 5;
text-align:left;
padding: 0.3em 0.4em 0.3em 0.4em;
/*border: 1px solid red;*/
}
span.task-time{
flex: 1 0 4em;
-webkit-flex: 1 0 4em;
text-align:right;
padding: 0.3em 0.5em 0.3em 0.5em;
/*border: 1px solid blue ;*/
}
&#13;
<ul id="tasklist">
<li class="task-one-line">
<i class="fa fa-check-circle-o"></i>
<span class="task-desc">And a short one</span>
<span class="task-time">00:01</span>
</li>
<li class="task-one-line">
<i class="fa fa-check-circle-o"></i>
<span class="task-desc">Here's a super long long long long long long description that might wrap onto another line long long long long long long description that might wrap onto another line</span>
<span class="task-time">00:08</span>
</li>
</ul>
&#13;
答案 1 :(得分:4)
我对flex的一般规则是弯曲你想弯曲的容器而不弯曲那些你不弯曲的容器。我会对时间容器执行以下操作。
span.task-time {flex: none;}
答案 2 :(得分:3)
我有类似的问题,我用修复笔创建了一支笔:
https://codepen.io/anon/pen/vRBMMm
<div class="flex">
<div class="a">1st div</div>
<div class="b">HELLO2HELLO2 HELLO2HELLO2 2222 HELLO2HELLO 22222</div>
<div class="c">3rd div</div>
</div>
.flex{
display: flex;
padding: 8px;
border: 1px solid;
}
.a {
margin-right: 16px;
}
.b {
flex: 1;
min-width: 0;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.c {
flex-shrink: 0;
}