使用CSS智能创建网格/表格结构,无需额外的HTML


Smarty create grid/table structure with CSS, without extra HTML

我有一个HTML中的基本<ul>列表,我想将其转换为3列网格。每个列表项都有一个固定的向左浮动的宽度,所以理想情况下我想要:

<ul>
    <li>List 1</li>
    <li>List 2</li>
    <li>List 3</li>
    <li class="clear">List 4</li>
    <li>List 5</li>
    <li>List 6</li>
    <li class="clear">List 7</li>
    <li>List 8</li>
    <li>List 9</li>
    <li class="clear">List 10</li>
</ul>

目前我已经尝试过这个:

<ul>
{foreach $submenu.child.items as $row} 
    <li class="{if $row@iteration is div by 4}clear{/if}"><a href="#">{$row.label}</a></li>
{/foreach}
</ul>

正如您在下面看到的,这与第一行不同。E.G:

<ul>
    <li>List 1</li>
    <li>List 2</li>
    <li>List 3</li>
    <li class="clear">List 4</li>
    <li>List 5</li>
    <li>List 6</li>
    <li>List 7</li>
    <li class="clear">List 8</li>
    <li>List 9</li>
    <li>List 10</li>
</ul>

更新:我唯一能做到这一点的方法就是添加额外的HTML。还有别的办法吗?

<ul>
{foreach $submenu.child.items as $row} 
    <li><a href="">{$row.label}</a></li>
    {if $row@iteration % 3 == 0}<li class="clearBoth"></li>{/if}
{/foreach}
</ul>

您关心第一个条目是否有"clear"吗?

如果你不这样做,那么

 {if $row@iteration % 3 == 1}

如果你这样做,那么你需要

 {if $row@iteration > 1 && $row@iteration % 3 == 1}

(或Smarty中的任何语法)。

如果你解释了这个问题,也就是说,这是关于计数的,与HTML或Smarty无关,那会更有帮助。