说明:请使用chrome浏览器打开

See the Pen pvyjGV by lilyH (@lilyH) on CodePen.

如上图所示,我们你要实现的效果就是,(1)在一行中显示两块元素;(2)每块元素的长度根据它里面的文字变化

还是先看代码吧:

HTML

<ul class="flex-container">
<li class="flex-item"><div>1234567</div></li>
<li class="flex-item"><div>2</div></li>
<li class="flex-item"><div>2</div></li>
<li class="flex-item"><div>11111</div></li>
<li class="flex-item"><div>11111111111111111111</div></li>
<li class="flex-item"><div>22222222222222222222222222222222222222222222222</div></li>
</ul>

CSS

.flex-container {
padding:;
margin:;
list-style: none; display: flex;
-webkit-flex-flow: row wrap;
justify-content: space-between;
} .flex-item { flex-grow:;
min-width:40%;
height: 150px;
margin-top: 10px;
line-height: 150px;
color: white;
font-weight: bold;
font-size: 3em;
text-align: center;
}
.flex-item div{
background: tomato;
height: 150px;
line-height: 150px;
}
.flex-item:nth-of-type(2n+1) div{
margin-right: 5px;
}
.flex-item:nth-of-type(2n) div{
margin-left:5px;
}

说明:

关于flex属性的具体说明,请参考flex全揭秘

(1)容器,flex-container上,设置display:flex;表示里面的子元素走的是flex的布局

(2)容器,flex-container,设置-webkit-flex-flow: row wrap;表示子元素横向排列,多行

(3)容器,flex-container,设置justify-content: space-between;子元素在一行上散落开

(4)子元素,flex-item,设置flex-grow:1; 子元素充满能空间(去掉看看是什么效果)

(5)子元素,flex-item,设置min-width:40%; 这个是关键(可以试试其他的值)

a. 都知道设置50%,那么两个元素是一样大的充满空间;大于50%,那么一行上肯定放不下两个元素

   b.因为设置的最小的宽度,如果宽度过小,比如10%,而子元素中的内容又过少的时候,这个时候一行上就会出现不止2个子元素

    c. 考虑到如果三个紧挨着的子元素如果都只有一个“字”的内容的话,宽度至少要设置到33.33%;所以宽度值应该是在33.33%到50%之间(假设子元素没有margin等其他让它“变大”的属性)

d. 假设我们设置min-width:35%,(1)那么如果同一行的两个子元素a、b,a内容大于等于65%宽,当b内容超过了35%宽时,后面元素会被挤到下一行;(2)如果同一行的两个子元素a、b,a的内容很少,但是因为它至少占35%的宽,当b的内容超过了65%宽的时候,后面的子元素会被挤到下一行。

根据上面的原理,可以通过评估项目中子元素的内容的长度来设定min-width的值,所以这只能算做一种简单的方法,要真正做到按内容文字长度伸缩容器大小并且排满一行的情况,请使用JS.

ps : 代码中的flex是w3c标准的写法,兼容android和ios的写法,请利用此工具

注明:利用上面的工具生成的兼容方法在ios下有问题,没有换行,还未找到方法,先mark下~

利用flexbox实现按字符长度排列dom元素的更多相关文章

  1. JQuery利用sort对DOM元素进行排序

    前言 排序对于我们是再熟悉不过了,在绝大数应用程序中都会有这样一个场景:当我们从服务器端获取一个列表时,在界面上进行渲染,我们可以会依赖于某一个规则来进行排序,当然此时绝大多数会再次与服务器进行交互来 ...

  2. 动态SQL字符长度超过8000

    动态SQL字符长度超过8000,我记得SQL SERVER 2008中用SP_EXECUTESQL打破了这个限制. 平常用动态SQL,可能都会用EXEC(),但是有限制,就是8000字符串长度.自从S ...

  3. 解决MVC中JSON字符长度超出限制的异常

    解决MVC中JSON字符长度超出限制的异常 解决方法如下: <configuration> <system.web.extensions> <scripting> ...

  4. 【代码笔记】iOS-判断中英文混合的字符长度的两种方法

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

  5. 计算html标签textarea字符长度

    今天学习jQuery,做练习计算html标签textarea字符长度,先添加一个视图操作(Action): 创建一个视图,并按下面顺序标记1,2,3进行写html或javascript脚本: 其中标记 ...

  6. 求任意长度数组的最大值(整数类型)。利用params参数实现任意长度的改变。

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. JavaScript判断字符串的字符长度(中文占两个字符)

    判断方法 //判断字符串中的字符 中文算两个字符 function chkstrlen(str) { ; ; i < str.length; i++) { ) //如果是汉字,则字符串长度加2 ...

  8. 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码

    2013-9-15 1.    CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...

  9. destoon控制标题长度,title中显示全标题 标题字符长度怎么控制?

    如题商品调用出来后,标题的字符长度怎么控制?有哪位高手能帮我解决吗? 小弟在此感谢了. &length=30 //30表示30个字节 <!--{tag("moduleid=5& ...

随机推荐

  1. Windows Server 2012/2016在桌面上添加计算机等图标

    [CMD]->输入[rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0],回车:

  2. mysql错误

    安装mysql之后提示(ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:错误 具体就是: 安 ...

  3. 使用PM控制台 查找和安装一个 NuGet Package

    1. Get-Package -ListAvailable -Filter elmah -ListAvailable获取所有可用的package,-Filter 关键字过滤 2.  Install-P ...

  4. 精通javascript(看书笔记)

    变量的类型检查 //检测类型 var str = "Hello World"; if (typeof str=="string") {//使用typeof来判断 ...

  5. BigDecimal数据加法返回值接收

    1.相加 两个BigDecimal变量a,b. 如果想进行相加,即a加b的话,返回值需要使用a进行接收,如下: a = a.add(b); BigDecimal为不可变类, 所以执行运算的结果需要再返 ...

  6. photobooth.js

    HTML5 Webcam for your website, photobooth.js

  7. CentOS编译安装NodeJS+Express

    NodeJS是基于Chrome’s Javascript runtime,也就是Google V8引擎执行Javascript的快速构建网络服务及应用的平台,其优点有: 在CentOS编译安装Node ...

  8. JSP传统标签开发

    1.标签技术的API类继承关系 1).JspTag接口是所有自定义标签的父接口 该接口中没有任何属性和方法,只有两个直接子接口,Tag接口和SimpleTag接口,把实现Tag接口的自定义标签叫做传统 ...

  9. 从零开始HTML(一 2016/10/17)

    就是准备跟着霹雳猿教程过一遍HTML啦,边看边记录更便于理解记忆吧~ 1.属性 HTML 标签可以拥有属性.属性提供了有关 HTML 元素的更多的信息.属性总是以名称/值对的形式出现,比如:name= ...

  10. 枚举类型Enum

    包java.dataStructure中,文件名Enum_demo.java 在JDK5中引入了一个新的关键字——enum,可以直接定义枚举类型 在申明枚举类的时候,也可以申明属性.方法和构造函数,但 ...