Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 在CSS3中实现动态列_Html_Css_Flexbox - Fatal编程技术网

Html 在CSS3中实现动态列

Html 在CSS3中实现动态列,html,css,flexbox,Html,Css,Flexbox,我希望你能帮忙!以下是参数: 一个具有动态宽度和高度的父容器 儿童数量可变 父对象的高度由JS设置,具体取决于窗口大小 当父对象的高度收缩时,其宽度必须根据子对象而扩展 儿童必须先垂直填充容器,然后水平填充容器 子项必须是父项的直接后代。行和列不能有嵌套框或其他结构 孩子们有统一的尺寸 子项必须相对定位,并且不能在JS中计算其位置 JS仅允许设置父级的高度/宽度 HTML <ol> <li>1</li> <li>2</li>

我希望你能帮忙!以下是参数:

  • 一个具有动态宽度和高度的父容器
  • 儿童数量可变
  • 父对象的高度由JS设置,具体取决于窗口大小
  • 当父对象的高度收缩时,其宽度必须根据子对象而扩展
  • 儿童必须先垂直填充容器,然后水平填充容器
  • 子项必须是父项的直接后代。行和列不能有嵌套框或其他结构
  • 孩子们有统一的尺寸
  • 子项必须相对定位,并且不能在JS中计算其位置
  • JS仅允许设置父级的高度/宽度
HTML

<ol>
 <li>1</li>
 <li>2</li>
 <li>3</li>
 <li>4</li>
 <li>5</li>
 <li>6</li>
 <li>7</li>
 <li>8</li>
 <li>9</li>
</ol>
[-------------]
[-[1]-[4]-[7]-]
[-[2]-[5]-[8]-]
[-[3]-[6]-[9]-]
[-------------]
高度收缩后的长方体模型

[---------------------]
[-[1]-[3]-[5]-[7]-[9]-]
[-[2]-[4]-[6]-[8]-----]
[---------------------]
这在CSS/CSS3盒子模型中可能吗


谢谢

我想使用
display:inline block
,但只有在父级上有一个设置的宽度时,它们才会折叠成新行。您的参数表示JS可以设置父对象的宽度,因此,如果您愿意计算长方体需要多宽才能正确折叠线,则可以使用此方法


基本上,每个子对象都将被设置为具有其设置的宽度/高度的内联块,然后您可以在每个子对象的右侧添加边距,使它们彼此隔开,然后在父对象的左侧添加边距,以便左侧也具有适当的间距。然后根据父对象的高度,计算父对象可以有多少行子对象,以便计算子对象正确折叠所需的父对象宽度(请记住,不应在宽度中包含父对象的左边距)。它都是基本的CSS,不需要CSS3。

多列
的实现是出了名的不一致,尽管它听起来像是实现这一点的最简单和最标准的方法:


我应该注意到,在您的例子中,实现之间的任何奇怪差异都可以得到很大的缓解,因为您可以控制容器的尺寸,因此您可以舍入到最接近的x像素或任何东西,以确保减少跳跃和重新招标。

我认为不使用CSS3列,不可能先垂直填充,然后水平填充;但是,我不知道如何从列中获得“收缩以适应”行为

<>这是你在WebKIT中所需要的一切(它在GECKO的底部溢出),除了收缩适合,并且它可能在<代码>中间
  • 代码>断裂。

    <!DOCTYPE html>
    <html><head>
      <title>untitled</title>
      <style type="text/css" media="screen">
        html, body { height: 100%; }
        ol {
          margin: 0;
          padding: 0;
          border: 1px solid blue;
          height: 50%;
          -webkit-column-width: 10em;
          -webkit-column-fill: auto;
        }
         li {
           -webkit-break-inside: avoid;
           position: relative;
           margin: 0;
           padding: 0;
           width: 10em;
           height: 7em;
           display: block;
           border: 1px solid red;
         }
      </style>
    </head><body>
      <ol>
       <li>1</li>
       <li>2</li>
       <li>3</li>
       <li>4</li>
       <li>5</li>
       <li>6</li>
       <li>7</li>
       <li>8</li>
       <li>9</li>
      </ol>
    </body></html>
    
    
    无标题
    html,正文{高度:100%;}
    ol{
    保证金:0;
    填充:0;
    边框:1px纯蓝色;
    身高:50%;
    -webkit列宽:10em;
    -webkit列填充:自动;
    }
    李{
    -webkit内部中断:避免;
    位置:相对位置;
    保证金:0;
    填充:0;
    宽度:10em;
    高度:7公分;
    显示:块;
    边框:1px纯红;
    }
    
  • 一,
  • 二,
  • 三,
  • 四,
  • 五,
  • 六,
  • 七,
  • 八,
  • 九,

  • 您是否愿意满足于:[-[1]-[2]-[3]]。。。[-[4]-[5]-[6]-] ->[-[1]-[2]-[3]-[4]-] ... [-[5]-[6]-]? 你可以想象css中的孩子们,就像你想象气球往高处和左边飞一样。。第一个总是第一个到达顶部的,除非你用绝对/固定的定位来指定偏离流动的东西。唉,我从来都不喜欢气球。这似乎是我的难题。我只是希望有一些疯狂的组合浮点数、内联块和CSS3黑魔法,可以实现“动态并排列”的效果。谢谢你的回复。不幸的是,内联块首先水平填充,而不是垂直填充。我基本上需要并排的列,但是没有任何额外的结构,保持子元素的顺序。哦,我明白了。不知什么原因,我以为你说的是水平方向,然后是垂直方向。o、 oThanks等待回应。中段中断是一种破坏交易的行为(我发誓,这不是双关语),但CSS3 cols似乎是一种方式。
    break-inside
    应该可以防止这种情况发生,因此这是一个实现错误,您可以将高度计算为@davin答案中框大小的倍数。(无论如何,您都会希望这样做,这样就不会有可变数量的额外空格。)看起来是一个很好的解决方案:)+1提问和回答