我有两个列布局,包含元素的配置:
A B
B A
A B
B A
...
A
和B
元素包含来自不同来源和不同风格的内容。所以,我试图在PHP和CSS nth-child中找到一个表达式来生成这个A B B A A B B A …
序列。
这就是我正在做的生成布局:
/* $post_ids is an Array of ID's */
$count = count( $post_ids );
for ( $i = 0; $i < $count; $i++ ) {
$classes = ['teaser', 'lg-6', 'md-6', 'sm-12'];
if ( ( 2 * $i ) % 2 == 0 ) { // This is wrong. Always true!
$classes[] = 'a-element';
} else {
$classes[] = 'b-element';
}
insert_post( $post_ids[ $i ], $classes ); // This is a custom function
}
这是我的CSS:
.teaser:nth-child(2n) { // Also wrong
/* Styles for A items */
}
我知道一旦我得到了正确的PHP序列,我可以用以下代码替换我的CSS:
.a-element {…}
.b-element {…}
但我想知道是否也可以使用nth-child
...
我想它可能会那么难,但我有点坚持这个......任何提示或帮助都会非常感激!
编辑:@ axiac的答案和一些research之后,我了解到nth-child
只允许:
所以,我猜我想要的东西不能用CSS nth-child
来完成。谢谢你们!
答案 0 :(得分:1)
您需要的PHP代码是:
if ((int)(($i + 1) / 2) % 2 == 0 ) {
$classes[] = 'a-element';
} else {
$classes[] = 'b-element';
}
<强>更新强>
根据OP的要求,这是我制作上述代码的方式。期望的结果是:
A B B A A B B A ..
A
重复两次之后。我们使用for (;;)
循环从0
迭代到大于零的某个$n
; % 2
); A
s后跟5 B
s,那么您只需注意任何正整数都可以写为5 * k + r
,其中r
是0, 1, 2, 3, 4
之一1}}(这就是division of integer numbers的工作原理)。有5
个连续整数除以5
产生相同的整数结果(以及不同的余数); (int)
); + 1
偏移才能在前2 A
之前“推”一个B
。 0
和1
除以0
(它们构成第一组),2
和2
产生相同的结果(3
) 1
并制作第二组,依此类推。如果您需要生成N
种不同类型的区块(A
,B
,C
,D
aso),则每个区块都显示为{{ 1}}连续时间(M
,A A A B B B C C C D D D ...
此处为M
),则公式为:
3
此公式生成的值是(int)(($i + $k) / M) % N
,0
... 1
之一,它告诉您要使用的符号(N - 1
,A
ASO)。如果没有B
,则此公式会生成+ $k
个M
个A
个M
个B
个M
C
个M * N
个实例直到最后一个符号。它总共打印A
个符号,然后以$k
重新开始。
0 .. M * N - 1
的值是options: { draggable: false, icon:'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png' }
之一,它允许序列从序列内的任何点开始。它表示从序列开始跳过的符号数。
答案 1 :(得分:0)
如果我理解正确,问题在于:
(2 * $i) % 2 == 0
这将在所有迭代中返回true(2 * $ i)始终是偶数
尝试:
$i % 2 == 0
代替