为偶数和奇数 div 添加不同的类

Add different class to even and odd divs

提问人:aborted 提问时间:12/17/2011 最后编辑:aborted 更新时间:4/25/2022 访问量:37745

问:

我有一个PHP代码块,如下所示:

$flag = false;
if (empty($links))
{
    echo '<h1>You have no uploaded images</h1><br />';
}

foreach ($links as $link)
{   
    $extension  = substr($link, -3);
    $image_name = ($extension == 'peg') ? substr($link, -15) : substr($link, -14);  

    ($delete_submit) ? deleteImage('.' . $image_name, $link) : '';

    echo '<div>';
        echo '<table>';

        echo '<tr><td class="fullwidth"><a class="preview_img" href="' . $link . '"><img src="' . $link . '" title="Click to enlarge" width="300" class="thumb" /></a></td></tr>';

        echo '<tr><td><span class="default">Direct:</span>&nbsp;';
        echo '<input type="text" readonly="readonly" class="link-area" onmouseover="this.select();" value="' . $link . '" />'; 
        echo '</td></tr>';

        echo ($flag) ? '<hr /><br>' : '';

        echo '</table>';
        echo '<br>';
    echo '</div>';

    $flag = true;
}

我希望根据它是偶数还是奇数来包含不同的类。如果是偶数,则为 X 类,如果为奇数,则为 Y 类。<div>

在我的情况下,我该怎么做?我完全一无所知,我不知道如何开始!

php html css

评论


答:

52赞 Rob W 12/17/2011 #1

在循环之前初始化变量。然后将以下内容放入循环中:.$count=0;++$count%2?"odd":"even"

$count = 0;
foreach ($links as $link)
{   
    $extension  = substr($link, -3);
    $image_name = ($extension == 'peg') ? substr($link, -15) : substr($link, -14);  

    ($delete_submit) ? deleteImage('.' . $image_name, $link) : '';

    echo '<div class="' . (++$count%2 ? "odd" : "even") . '">';
14赞 konsolenfreddy 12/17/2011 #2
[...]
$i++;
echo '<div class="'.($i%2 ? 'odd':'even').'>';
[...]
1赞 Brian Hoover 12/17/2011 #3

如果您使用的是现代浏览器,则可以在样式表中使用CSS。

div:nth-child(odd)
{
  background:#ff0000;
}
div:nth-child(even)
{
  background:#0000ff;
}

评论

0赞 Wex 12/17/2011
正如我的回答中所发布的,请注意,请记住此 CSS3 选择器的浏览器兼容性有限。
7赞 Andrew Jackman 12/17/2011 #4

在 foreach 之前,声明一个布尔值:

$div_flag = false;

在 foreach 中,您回显 div 的地方添加以下内容:

"class=".( $div_flag ? "'odd'" : "'even'" )

在 foreach 的末尾(或其中的任何地方,真的)添加以下内容:

$div_flag = !$div_flag;
3赞 useful 12/17/2011 #5

试试这样的东西

$count = 0;
foreach($links as link) {
  $count++;
  print ($count % 2 == 1) ? "odd" : "even"; 
}
1赞 Ovidiu 12/17/2011 #6

为循环添加变量。

$c = true;
foreach ($links as $link)
{

$extension  = substr($link, -3);
$image_name = ($extension == 'peg') ? substr($link, -15) : substr($link, -14);  

($delete_submit) ? deleteImage('.' . $image_name, $link) : '';

echo '<div'.(($c = !$c)?' class="odd"':'').">
//echo '<div>';
    echo '<table>';

    echo '<tr><td class="fullwidth"><a class="preview_img" href="' . $link . '"><img src="' . $link . '" title="Click to enlarge" width="300" class="thumb" /></a></td></tr>';

    echo '<tr><td><span class="default">Direct:</span>&nbsp;';
    echo '<input type="text" readonly="readonly" class="link-area" onmouseover="this.select();" value="' . $link . '" />'; 
    echo '</td></tr>';

    echo ($flag) ? '<hr /><br>' : '';

    echo '</table>';
    echo '<br>';
echo '</div>';

$flag = true;
}
7赞 Wex 12/17/2011 #7

如果你在一个原型网站上工作,你总是可以实现一个纯CSS解决方案:

div:nth-child(even) { /* Apply even class rules here */ }
div:nth-child(odd) { /* Apply odd class rules here */ }

我建议您仅将其用于原型站点的原因是因为 IE8 或更低版本的兼容性。:nth-child

评论

1赞 12/17/2011
+1 我知道浏览器支持不是很理想,但 CSS >服务器端的显示逻辑
0赞 fat_mike 10/18/2016 #8

不带计数器:

<?php $toggle_class = 'even';?>
<?php foreach ($links as $link):?>
  <?php $toggle_class = ($toggle_class == 'odd' ? 'even' : 'odd');?>
  <div class="<?php echo $toggle_class;?>">
    Your div content...
  </div>
<?php endforeach;?>
0赞 Md Rakibul Islam 4/7/2021 #9

这是简单的技巧

function check_odd_even($data){
    if($data % 2 == 0){
        $data = "Even";
    }
    else{
        $data = "Odd";
    }
    return $data;
}
if (check_odd_even($index) == 'Odd'){
//layout 1....
}else{
//layout 2....
}