我正在处理a demo page的副本。我发现菜单项(li
)的对齐是使用nth-child
伪选择器和rotate
属性完成的。我在演示中面临的问题是:
菜单项的数量是固定的。在我计划使用它的页面上,菜单项的数量是动态的,因为它从一个用户变为另一个用户。
它的方向高达180度,而我希望它是一个完整的360度。
为了克服这些问题,我决定使用jQuery来计算菜单项的数量,然后将相应的rotate
值应用于每个项目。
在调查CSS时,我发现在7个菜单项的情况下,旋转角度值为:
总结:
第一个孩子的-20度,并为接下来的6个孩子继续增加32度
现在我正在努力弄清楚它背后的数学。我希望根据菜单项的数量动态计算这些值。我应该用什么公式来为每个孩子找到合适的角度?
答案 0 :(得分:1)
计算菜单项的数量。 所以你想在它们之间划分360d。 简单地通过划分你了解每个菜单项度
var each_item_degree = 360 / number_of_items;
你应该从拳头孩子到最后一个孩子each_item_degree
添加。
它会给你你想要的东西,但没有任何余地。对于它们之间的边距,你可以很容易地从360减少总边距,例如如果7项是32d女巫从-20到12开始,从15d开始下一个。它给你3D边距。
祝你好运。
答案 1 :(得分:1)
我们可以通过一些代数来计算出公式。我们来做吧!
假设我们要将数量y
分成n
个大小为x
的{{1}}部分,这些部分由大小为p*x
的间隙分隔。
如果除了最后一个部分之外的每个部分之后都有间隙,则会有n-1
个间隙。
因此,我们有:
n*x + (n-1)*p*x = y
(n + (n-1)*p) * x = y
x = y / (n + (n-1)*p)
例如,如果数量为180,并且我们希望将大小为x
的7个部分分隔为0.1*x
的间隙,我们会得到:
x = 360 / (7 + 6*0.1)
= 23.6842
现在让我们考虑从每个部分开始到下一部分的总距离。
如果某个部分从位置t0
开始,则下一部分从位置t1
开始,以便:
t1 = t0 + x + p*x
继续上述数字,我们得到:
t1 = t0 + 23.6842 + 0.1*23.6842
= t0 + 26.0526
现在我们知道截面起点是26.0526单位,每节是23.6842单位。
如果我们细分的数量是圆形,则计算结果不同,因为最后一部分和第一部分也用间隙分隔。换句话说,圆圈中存在n
个缺口。
现在我们有:
n*x + n*p*x = y
(n + n*p) * x = y
x = y / (n + n*p)
因此,如果我们将360度划分为7个大小为x
且间距为0.1*x
的小节,我们会得到:
x = 360 / (7 + 0.1*7)
= 46.7532
这是一个部分的大小。一个部分的起点t0
与下一部分的起点t1
之间的距离为:
t1 = t0 + x + p*x
= t0 + 46.7532 + 0.1*46.7532
= 51.4285
总之,从每个部分的开头到下一部分的开头的距离是51.4285,每个部分的长度是46.7532。