我想知道是否有人可以帮助我解决这个问题,我似乎无法找到任何想用Flexbox做这件事的人!
我已经设置了一个基本的Flexbox场景,其中几个元素(li)出现在flexbox容器(ul)中.
而且我还设置了它,以便在包装之前排成一行的最大量li是3(通过设置ul宽度为900px并且灵活性为260px的li来完成).
这一切都很有效,但对我来说问题在于,文本将最终来自数据库.有时用德语(这么久的话).我不知道哪个李会说长话还是不长,所以我需要设置它们.
基本上我的问题是……
为什么当’li’比其中的正常文本更长时,li不会扩展到更宽?因此,在下面的示例中,我希望第3个li(页眉文本3)扩展以显示其所有文本,并且它可能需要包装到下一行以显示此内容!所以它需要切换到2行2,而不是3行和1行.
我希望一切都有道理,任何帮助都会很棒. 🙂
Code和Codepen如下.
HTML …
<div>
<ul class="FlexWidgetsNew">
<li class="WidgetNew">
<h1>Header text 1</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec pretium nulla eget libero congue.</p>
</li>
<li class="WidgetNew">
<h1>Header text 2</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec pretium nulla eget libero congue.</p>
</li>
<li class="WidgetNew">
<h1>Header text 3</h1>
<p>This text has a longer word than the rest xxxxxxxxxxxxxxxxxxxxxxxxxxxx12234567890 and so part of it is disappearing out of the li.</p>
</li>
<li class="WidgetNew">
<h1>Header text 4</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p>
</li>
</ul>
</div>
CSS …
.FlexWidgetsNew {
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-justify-content: flex-start;
-ms-flex-pack: start;
justify-content: flex-start;
-webkit-align-content: stretch;
-ms-flex-line-pack: stretch;
align-content: stretch;
overflow: hidden;
width:900px;
background-color: #f00;
}
.WidgetNew {
-webkit-flex: 1 1 300px;
-ms-flex: 1 1 300px;
flex: 1 1 300px;
-webkit-align-self: auto;
-ms-flex-item-align: auto;
align-self: auto;
padding: 10px 2% 30px 2%;
overflow: hidden;
box-sizing: border-box;
cursor: pointer;
border:1px solid #000;
}
h1 {
width: 100%;
word-wrap: normal;
color: #fff;
font-size: 20px;
font-family: Arial, Helvetica, sans-serif;
}
p {
width: 100%;
word-wrap: normal;
color: #000;
font-family: Arial, Helvetica, sans-serif;
}
最佳答案 Flexbox似乎并不知道溢出的文本宽度.你说任何帮助都会很棒.如果你对一些JavaScript(jQuery)没问题,那么你的这个问题就可以解决了.
我们首先添加一些CSS:
.WidgetNew.twobytwo {
flex: 1 1 450px;
}
然后我们将使用一些jQuery来查找溢出的长字,并检查它们是否比父容器li.WidgetNew更长.
如果带有长文本的内部div比父容器长,那么将类.twobytwo添加到它的父.WidgetNew元素
添加JavaScript:
var el = $('.WidgetNew > p');
$(el).each(function(index, value) {
var tempEl = textWidth($(this));
var tempElP = $(this).parent().width();
if (tempEl > tempElP) {
$(this).parent().addClass('twobytwo');
$(this).parent().siblings().addClass('twobytwo');
}
});
function textWidth(el){
var text = $(el).html();
$(el).html('<span>'+text+'</span>');
var width = $(el).find('span:first').width();
$(el).html(text);
return width;
};
希望这可以帮助.