我正在尝试使用FOR循环来编写动态CSS。CSS需要根据数据库表中的项目数量进行更改。这是我的尝试,但它没有给我想要的输出:
<?php
$count_posts = wp_count_posts( 'portfolio' )->publish; // This is for a wordpress site.
$slidecount = ceil( $count_posts / 3 ); // there are 3 database entries in each "slide".
for ($c = 0 ; $c < $slidecount; $c++){
echo '#slide' . ($c + 1) . ':checked ~ #controls label.c-label' . ($c < $slidecount ? (($c + 2) . ', ') : '1'); // This is the part I'm not sure on... How do I properly nest the ($c + 2) expression into a shorthand if/else statement ??
}
echo ' {' . "'n" . 'float: right;' . "'n" . 'display: block; }' . "'n";
?>
输出(当数据库表中有5个项目时):
#slide1:checked ~ #controls label.c-label2,
#slide2:checked ~ #controls label.c-label3,
#slide3:checked ~ #controls label.c-label4,
#slide4:checked ~ #controls label.c-label5,
#slide5:checked ~ #controls label.c-label6 {
float: right;
display: block;
}
期望输出:
#slide1:checked ~ #controls label.c-label2,
#slide2:checked ~ #controls label.c-label3,
#slide3:checked ~ #controls label.c-label4,
#slide4:checked ~ #controls label.c-label5,
#slide5:checked ~ #controls label.c-label1 {
float: right;
display: block;
}
我希望FOR循环的最后一次执行在"label"的末尾附加一个"1",以便CSS选择器指向第一个元素"c-label1"。这被用来构建一个纯CSS滑块,该滑块使用单选按钮更改幻灯片,并需要在幻灯片到达末尾后将其循环回到开头。每当保存了新的数据库条目时,我需要自动更新代码。
有人能帮我清理代码吗?
事先非常感谢。
在for循环条件下,您有
$c < $slidecount
这意味着循环体中的相同条件也得到了满足,因此生成c-label1的代码永远不会被执行。
尝试更改
$c < $slidecount
至
($c < ($slidecount-1))
之所以会发生这种情况,是因为您在语句中使用了$c < $slidecount
,但$c
的值从0开始,因此它永远不会与slidecount
匹配,也不会为false。您还应该更改圆括号()
一个快速的解决方案可以是在$c
变量中添加1。这应该工作
(($c+1) < $slidecount ? ($c + 2) . ', ' : '1');
这就是使用(
和)
的方式。试试这个:
echo '#slide' . ($c + 1) . ':checked ~ #controls label.c-label' . ($c < $slidecount ? $c + 2 . ', ': '1');