CSS 选择器问题, a 后紧邻的若干个 b

讨论 未结 2 39
JCZ2MkKb5S8ZX9pq
JCZ2MkKb5S8ZX9pq 会员 2022年10月4日 12:49 发表
<pre><code>html &lt;!-- mulit lines in a bullet list --&gt; &lt;div class="a"&gt;the 1st line of list&lt;/div&gt; &lt;div class="b"&gt;the 2nd line of list&lt;/div&gt; &lt;div class="b"&gt;the 3rd line of list&lt;/div&gt; &lt;div class="b"&gt;many lines...&lt;/div&gt; &lt;!-- list end --&gt; &lt;div class="empty-line" /&gt; &lt;div class="b"&gt;not in list, do not need margin&lt;/div&gt; css .a{margin-left: 2em;} .a+.b{margin-left: 2em;} </code></pre> <h2>背景</h2> <p>在给 Obsidian 的一个主题打一个补丁,它在编辑模式是生成的一行一个 div ,加若干 class 。 在一个 list 里,我希望代码块也能缩进,目前只缩进了第一行。 list 外的 div 无法简单地通过 class 区分。</p> <h2>核心需求</h2> <ul> <li>list 中的 b 被选中</li> <li>后续空行后的其它段落的 b 不被选中</li> </ul> <h2>考虑方案</h2> <ul> <li><code>a+b</code> 可以选中第一行 b ,但后续就要很丑的写法 a+b+b ,这样可以选中后续行,但明显很蠢。</li> <li><code>a~b</code> 可以选中后续 b ,但空行后的 b 也会被选中。</li> <li>也无法在候选加一个 <code>empty-line~b</code> 之类的覆盖,因为 list 前也有可能有空行。</li> <li>有点像正则,<code>a(b)+</code> 这种感觉。</li> </ul> <p>不知道大家还有没有别的建议,欢迎讨论。</p> <hr> <p>另外可以补充的条件是:</p> <ul> <li>a 后紧邻的是 b</li> <li>后续的 b 也紧邻,即 abb/abbb/abbbb……。</li> <li>不需要考虑 abbcb ,这种只需要前面的 abb 。</li> </ul>
收藏(0)  分享
相关标签: 灌水交流
注意:本文归作者所有,未经作者允许,不得转载
2个回复
  • dcsuibian
    2022年10月4日 12:49
    .a ~ .b:not(.empty-line ~ .b) 还有<div class="empty-line" />应该是<div class="empty-line" ></div>
    0 0
  • JCZ2MkKb5S8ZX9pq
    2022年10月4日 13:20
    我考虑过用 not 的这种,在我上面的例子中这么写也许可以。 但是 list 前面也是有空行的,所以还是有条件相互覆盖的问题。 另外呢,我是抽象了一个条件 c ,也就是 empty-line ,但实际情况中是 *:not(.a),因为打断的类有很多种。
    0 0