在给定约束条件下使用纯 CSS 是不可能的
由于您的约束,您所要求的似乎在大多数情况下仅使用 css 在数学上是不可能的(文本长度相同除外)。
考虑一个只有两个选项卡的示例以及您的以下四个特定(且相互冲突的)要求(假设500px
固定宽度的容器;要求已重新排序以进行说明):
(1)每个 Tab 的宽度未知(取决于里面的文字)。
假设 Tab2 的文本长度是 Tab1 的两倍。所以为了说明,Tab1 = 10px
,Tab2 = 20px
,然后......
(2)所有的 Tabs 应该共享相同的 padding(从最外层的字母到 tab 的内边框的间距应该相同,用上面的“..”表示)。此填充不必固定,但在选项卡之间应该相同。
和...
(3)没有计算。如果添加或删除一个或多个选项卡,所有这些都应该在不修改 css 的情况下工作。
不言自明,但是...
(4)选项卡不应在该 div 上展开,而应将其填满。
这意味着以下之一:
A.每个 Tab 将是宽度的 50%,文本宽度保持不变,因此 Tab1 = 120px 10px 120px
,Tab2 =115px 20px 115px
不符合 (1) 因为两者的整体大小将是相同的宽度,或者 (2) 因为填充将在根据插图的宽度,但可能满足(3)和(4)。这不是你想要的。
B.每个 Tab 将是宽度的 50%,但对于 Tab1 ,文本宽度必须拉伸或压缩Tab2 以使文本宽度相等。这在技术上仍然无法满足(1),但确实满足(2)和(4),因为两者都设置为120px 10px 120px
or 115px 20px 115px
,因为文本以某种方式被扭曲以“适应”空间。如果不做 (3) 这是否可能是有问题的,但可能无关紧要,因为我确信这不是你想要的。
C.每个选项卡都将按照您对 (1) 和 (2) 的需要进行设置,其中 (2) 设置为某个固定量(例如 10 像素),这会在选项卡之间或周围留下间隙,例如10px 10px 10px
、 的间隙430px
,然后10px 20px 10px
。这可能会满足(3),但不满足(4),因为它们不会真正“填充”固定容器的空间——某处会出现“间隙”。这不是你想要的。
D.您最终声明您想要的是每个 Tab 的填充设置为相等,这可以针对 (1) 和 (2) 完成,但不能通过您的约束 (3) 完成,因为需要计算。在示例中,它是(500px - 30px) / 4 = 117.5px
。这使得选项卡117.5px 10px 117.5px
和117.5px 20px 117.5px
. 但是正如你所看到的,由于文本是灵活的宽度,这必须动态完成,大致使用公式:
(containerWidth - totalTextWidths) / (2 x numTabs) = padding
如果您想要选项卡之间的某种类型的小间隙,则需要将其添加到公式中(这里假设间隙为 2px,因此gapWidths = ((numTabs - 1) x 2px)
):
(containerWidth - totalTextWidths - gapWidths) / (2 x numTabs) = padding
因此,您提供的约束使解决方案变得不可能——要么必须允许计算,要么您需要重新考虑您希望标签如何显示。