利用flexbox实现按字符长度排列dom元素

说明:请使用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: 0;
  margin: 0;
  list-style: none;

  display: flex;
  -webkit-flex-flow: row wrap;
  justify-content: space-between;
}

.flex-item {

  flex-grow:1;
  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的写法,请利用此工具

时间: 2024-10-09 21:03:07

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

利用正则表达式来设置最大输入字符长度

        在做机房合作的时候,很多东西都进行了"改革",听二牛说输入的字符长度限制可以用正则表达式,当然限制字符长度不仅可以用这种方法来写,还有通过设置文本框属性等办法来解决.不过利用正则表达式,我还是没没想到.反正正则表达式都学过了,为什么不能拿过来用呢?让它和我原来的方法比试比试. 一.ascii码小试 之前的代码是利用ascii码来编写的: '限制输入的字符长度为0-16之间 Private Sub txtcardno_LostFocus() If Not Len(txtc

给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串

1 /* 2 * 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串,其实也就是变位词问题 3 * 比如说 a='abc' b='acb'是可以通过a变成b的 4 * 思路; 5 * 1.应进行分析,变位词区分大小写吗?比如God和dog是变位词?还需要考虑空格问题? 6 * 在这里我们假定是区分大小写的. 7 * 2.比较两个字符串时,如果它们的长度都不相等了,那肯定不是变位词 8 * 9 * 10 * */ 11 12 public class IsSameString

JS-DOM ~ 03. 子节点的操作、style.样式和属性、dom元素的创建方法及操作、14个例题、主要是利用js直接控制html属性

带有Element和不带的区别 a)  带Element的获取的是元素节点 b)  不带可能获取文本节点和属性节点 获取所以子节点 a)   . childNodes b)   . children c)   . parentNode . children [索引] . children:获取所有子节点 opacity:0-1:透明度 alpha(opacity:百分数):IE6/7/8透明度 先绑定事件再进行循环 previousNode()上一个兄弟节点 alert(变量名)可测试变量名是否

编写一个函数将参数字符串中的字符反向排列

编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列. 要求:不能使用C函数库中的字符串操作函数. 注意:将参数字符串中的字符反向排列,不是反向输出. 代码如下: #include<stdio.h> #include<stdlib.h> #include<assert.h> int my_strlen(char *str)//求字符串长度 { int count=0; while(*str++) { co

银行卡号,指定字符长度分割字符串

每隔指定字符长度分割字符串,可以制作银行卡号格式化提示功能.利用正则替换实现.js代码如下; <script type="text/javascript"> console.log( "548481554521515454848798921258740".replace(/(\d{4})(?=\d)/g,"$1"+"-") ) </script>

解决JSON字符长度超出限制

环境asp.net  4.0  ,AJAX 一般处理程序 碰到JSON字符长度超出限制,抛出异常,参考了网上资料和网友博客 web.config添加以下内容 <system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="20971520"/> </webServices> </scripting> </s

限制EditText或者TextView显示的字符长度,超出部分用省略号代替

在布局文件中: 限制显示的字符长度——android:maxEms=""(最大显示字符数) 在结尾用省略号——android:ellipseize="end" 为了实现效果,还得限制文本的行数,开始的时候限制显示一行,用的是android:singleline="true" 不过好像这个现在不怎么推荐使用了,而是用android:maxlines=""(要显示的行数,1或n什么的)

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

解决MVC中JSON字符长度超出限制的异常 解决方法如下: http://stackoverflow.com/questions/4155014/json-asp-net-mvc-maxjsonlength-exception 解决MVC中JSON字符长度超出限制的异常,布布扣,bubuko.com

字符的排列

问题:输入一字符串(要求不存在重复字符),打印出该字符串中字符中字符的所有排列. 思路:求所有可能出现在第一个位置的字符,把第一个字符和其后面的字符一一交换.固定第一个字符,求后面所有字符的排列.这个时候扔把后面的所有字符分成两部分:后面字符的第一个字符,以及这个字符之后的所有字符,然后把第一个字符逐一和它后面的字符交换. 1 #include<stdio.h> 2 #include "stdafx.h" 3 #include<tchar.h> 4 5 void