仅限 CSS - UL/LI 的违规规则显示为 table

CSS only - Breaking rules for UL/LI displayed as table

问题:对于显示为table的无序列表,有没有具体的断行规则?

问题:我可以防止最后一行脱离倒数第二行,但是使用相同的CSS规则我不能阻止第二行脱离第一行。

我有以下 HTML 结构:

<ul>
    <li class="wrapperoutside">
        <ul>
            <li class="wrapperinside">
                <p>Heading1</p>
                <p>Heading2</p>
            </li>
            <li class="wrapperinside">
                <p>Part name 1</p>
                <p>Part name 1</p>
            </li>
            <li class="wrapperinside">
                <p>Part name 2</p>
                <p>Part name 2</p>
            </li>
            <li class="wrapperinside">
                <p>Part name 3</p>
                <p>Part name 3</p>
            </li>
            <li class="wrapperinside">
                <p>Part name 4</p>
                <p>Part name 4</p>
            </li>
            <li class="wrapperinside">
                <p>Part name 5</p>
                <p>Part name 5</p>
            </li>
       </ul>
    </li>
</ul>

这是我 CSS 创建的 table:

li.wrapperoutside {
    display:table;
}

li.wrapperoutside li.wrapperinside {
    display: table-row;
}

li.wrapperoutside li.wrapperinside p {
    display: table-cell;
}

由于这是作为 PDF 输出发布的(使用 Antenna House 作为格式化程序),我必须关心一些排版问题,例如防止最后一行脱离倒数第二行。它适用于:

li.wrapperoutside li.wrapperinside:last-child {
    page-break-before: avoid!important;
}

反过来事情开始变得奇怪:防止第二行脱离第一行:

li.wrapperoutside li.wrapperinside:first-child {
    page-break-after: avoid!important;
}

没用。相反,整个无序列表不再中断。 我尝试了不同的选择器:

li.wrapperoutside li.wrapperinside:nth-child(2) {
    page-break-before: avoid!important;
}

li.wrapperinside:nth-child(1) + li.wrapperinside:nth-child(2) {
    page-break-after: avoid!important;
}  

我尝试了各种选择器方法来使用分页规则,但它对第一行不起作用。由于违反规则在最后一行使用相同的 CSS 规则,这对我来说很奇怪。

关于嵌套的背景 HTML: 我正在使用内容管理系统,无法影响 UL 的 HTML 类。我只能影响LI的类,所以我用LI来显示table...

问题中的CSS漏了"li.wrapperoutside"和"li.wrapperinside"之间未分类UL的声明:

ul li.wrapperoutside ul {
    display:table-row-group;
}

有了这个额外的声明,生成的 table 就会中断:如果 column/page 中没有更多的 space,生成的 table 会中断另一个 column/page。它不会在第一行和第二行以及最后一行和倒数第二行之间中断。

使用 :first-of-type:last-of-type pseudo-classes:

li.wrapperinside:first-of-type {
    page-break-after: avoid;
}
li.wrapperinside:last-of-type {
    page-break-before: avoid;
}

https://www.antennahouse.com/product/ahf65/ahf-css6.html#css3-pseudo-clssses, https://www.w3.org/TR/selectors-3/#first-of-type-pseudo, and https://www.w3.org/TR/selectors-3/#last-of-type-pseudo