【问题标题】:How to automatically put DIVs in columns (unknown number of DIVs)如何自动将 DIV 放入列中(未知数量的 DIV)
【发布时间】:2018-07-13 21:31:43
【问题描述】:

我写了一些代码,在一个 DIV 中回显的 3 个变量(测验名称、级别和主题),如果有 4 个测验,它将打印 4 个不同的 DIV。

但是,每个 div 都打印在不同的行上,这并没有很好地利用空间,因为您可以在一行中放置 3 个。

我将如何让它以 3 行打印它们?

我在想也许是一张桌子?还是某种javascript?

这是我对 div 的剂量,抱歉,不是很清楚。此外,CSS 位于不同的页面上,但非常基本,只是将其定义为一个块。

for($i=0; $i<$num; $i++){?>
    <div class="quizBlock"><table>
    <tr align="left"><th colspan="2"><p class="subFontMe"><?php echo $quiz[$i]['Name']?></p></th></tr>
    <tr align="left"><th><p class="subFontSm"><?php echo $quiz[$i]['Level']?></p></th>
    <th><p class="subFontSm"><?php echo $sub[$quiz[$i]['Subject_ID']-1]['Subject']?></p></th></tr></p></table></div><br><?php }?>

【问题讨论】:

  • 我认为float: left 是您正在寻找的。​​span>
  • 标记演示:jsfiddle.net/gut4S
  • 另外,请不要使用表格进行布局。请参阅我在上面创建的小提琴,以了解您的标记中的流浪 &lt;/p&gt;。
  • 那行不通,因为如果我有,比如说十个 div,我需要它是 3 行,每行 1。float left 只是把它们都放在左边,他们已经做了什么??
  • 然后给DIV的width: 33%样式属性。

标签: javascript php css html-table


【解决方案1】:

一种使用模数检查的方法,如果 rows 的余数除以 3 等于 0。

我可以举一个例子,使用 javascript 将 div 动态填充到列数 它可以很容易地转换为 php。

这个例子不会通过 DOM 创建表。

var quiz = [['A',1,'Subject 1'],['B',3,'Subject 2'],['C',2,'Subject 3'],['D',78,'Subject 4']];

var t = document;
var m = quiz; // object data
var cols = 3 // num of cols

for(var j = 0; j < m.length; j++) {

 var c = t.createElement("div");
 c.className = "quizBlock"; // css class name

 var qbrs ='<table border=1 width=120><tr align="left"><th colspan="2"><p class="subFontMe">'+quiz[j][0]+'</p></th></tr><tr align="left"><th><p class="subFontSm">'+quiz[j][1]+'</p></th><th><p class="subFontSm">'+quiz[j][2]+'</p></th></tr></p></table>';

c.innerHTML = qbrs;

 // add clear float if 3rd value and not after last row also not before the first element
 if(j % cols == 0 && j != m.length && j != 0){ 
    var r = t.createElement("div");
    r.className = "clear";
    document.body.appendChild(r);
  }

 document.body.appendChild(c);

 }

让我知道这是否适合你

【讨论】:

    【解决方案2】:

    如果您希望 div 在一行中对齐。然后给它浮动左属性。并且宽度应该在类内部定义,以便父div可以容纳三个div。

    <?PHP
    
    for($i=0; $i<$num; $i++){?>
    
    <div class="quizBlock" style="float:left">
    <table>
    <tr align="left"><th colspan="2"><p class="subFontMe"><?php echo $quiz[$i]['Name']?></p></th></tr>
    <tr align="left"><th><p class="subFontSm"><?php echo $quiz[$i]['Level']?></p></th>
    <th><p class="subFontSm"><?php echo $sub[$quiz[$i]['Subject_ID']-1]['Subject']?></p></th></tr></p>    </table></div>
    
    <?php } ?>
    

    或者您可能想尝试:

    <div class="quizBlock">
    <table>
    <?PHP
    
    for($i=0; $i<$num; $i++){ ?>
    
    
    <tr align="left">
    <th colspan="2"><p class="subFontMe"><?php echo $quiz[$i]['Name']?></p></th>
    <th><p class="subFontSm"><?php echo $quiz[$i]['Level']?></p></th>
    <th><p class="subFontSm"><?php echo $sub[$quiz[$i]['Subject_ID']-1]['Subject']?></p></th>
    </tr>
    
    <?php } ?>
    
    </table>
    </div>
    

    这也将数据放在单独的行中。

    【讨论】:

    • OP 表示她希望它是 3x3,例如,所以float: left 只能让你走到一半。
    • @Jared Farrish:我删除了
      ,添加了 float:left 和宽度应该调整为适合 3 .. 我认为这将使它输出 3*3 。对不起,如果我错过了阅读问题..
    • width 在哪里?至少提到将float 和width 属性放在.quizBlock 类声明中不是很好吗?
    • 感谢您的回答,我跟着它,它有点工作,虽然每个 div 比上一个低一点,但它们像台阶一样下降。知道是什么原因造成的,或者我该如何阻止它?谢谢:)
    • @Lissy: quizBlock 类中的某些 margin 或 padding 属性应该是导致它的原因..
    猜你喜欢
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 2018-05-23
    • 1970-01-01
    相关资源
    最近更新 更多