代码之家  ›  专栏  ›  技术社区  ›  daotoad

有没有一个CSS选择器选择一个dt及其相关的dd元素?

  •  4
  • daotoad  · 技术社区  · 17 年前

    定义列表是标记某些关键字与一个或多个值关联的信息的好方法。

    因为dt与 一个或多个 dd元素,是否有一种方法可以使用css来选择这些关联项。

    请考虑以下HTML:

    <dl>
      <dt>Foo</dt><dd>foo</dd>
      <dt>Bar</dt><dd>bar</dd>
      <dt>Baz</dt><dd>baz</dd>
    </dl>
    

    如果我想将此DL呈现为:

    -------  -------  -------
    | Foo |  | Bar |  | Baz |
    | foo |  | bar |  | baz |
    -------  -------  -------
    

    我需要一种方法来表示dt/dd对1号浮点数左移,得到一个边界,等等。

    现在,我知道如何做到这一点的唯一方法是为每一组dt/dd元素制作单独的dls:

    <dl>
      <dt>Foo</dt><dd>foo</dd>
    </dl>
    <dl>
      <dt>Bar</dt><dd>bar</dd>
    </dl>
    <dl>
      <dt>Baz</dt><dd>baz</dd>
    </dl>
    

    从语义的角度来看,这很糟糕,这些项都是一个列表的成员。

    那么,是否有一个选择器或选择器组合允许我对dt/dd元素组进行操作?

    更新

    我正在寻找/提议的是类似于伪元素的东西 list-item ,其中dl:list项将选择 dt 以及所有相关的 dd 元素作为一个项,与 first-line 伪元素允许选择一组字符作为一个单元。

    3 回复  |  直到 14 年前
        1
  •  3
  •   knittl    17 年前

    不,没有因为 <dt> 可以有多个 <dd> S和另一个方向。

    但也许:

    dt + dd {  }
    

    对你来说足够了

        2
  •  1
  •   BoltClock    14 年前

    这是对克尼特的回答的回应。没有足够的空间或能力在评论中对Knittl的答案做出充分的回应,而且这个回应不是问题的一部分,因为它解决了问题的答案。所以,我会把它作为答案贴出来。

    奈特说我要找的是不可能的。我怀疑是这样的,但在阅读各种标准时,我可能遗漏了一些东西。

    然而,所提供的理由显然是错误的。

    KNITTL断言:

    不,没有因为 <dt> 可以 有多重 <dd> S和另一条路 圆的。

    如果他停下来说“不,没有”,那就是正确的答案。

    因此,这种说法是不可能的,因为我们在提议的分组中有不确定数量的元素。

    这个声明可以通过提供一个算法来为属于一个DL的子代的任何一组dt和dd元素生成一组相关的元素来直接反驳。此外,可以通过对文档不确定部分进行操作的现有伪元素的反例来证明这一点。

    实现将相关的dt和dd元素分组的伪元素的逻辑并不困难。所以这两种类型的元素的数量都不是日耳曼的。

    对于给定的dl元素:

    • 指定要包含的集合类型 dt 和 dd 元素称为 dt_dd_group
    • 开始收集 dtddl群 被称为 all_groups
    • 检查每个子元素(非递归):
      • 如果元素是dt:
        • 如果这是第一个元素或前一个元素不是 dt :
          • 创建新的 dtddl群
          • 追加新的 dtddl群 到 全群
          • 将元素附加到 dtddl群
        • 否则将元素追加到当前 dtddl群
      • 否则,如果元素是dd:
        • 如果这是第一个元素:
          • 创建新的 dtddl群
          • 追加新的 dtddl群 到 全群
          • 将元素附加到 dtddl群
        • 将元素追加到当前 dtddl群
    • 退货托收 全群

    该算法可以很容易地将一个DL中的一组dt/dd元素划分到相关的集合中。对于任何合法的DL,包括未提供初始DT元素的符合性但病理性的病例:

    <dl><dd>foo</dd><dd>bar</dd><dl>
    

    也就是说,这种选择模式是不可能的,因为不确定的数字或dt或dd元素在这样的一个组中显示为假。段落第一行的字母数也是不确定的,但是 :first-line 伪元素是CSS标准的一部分。

    可以合理地说,我正在寻找的选择模式是不可能的,因为CSS工作组没有考虑这个问题,或者他们考虑了这个问题,并且出于某种原因选择不将它包括在当前的标准中。

    所以,在求和中,虽然在理论上可以使用一组语义相关的dt和dd标记的选择器, 尚未实现此类选择器 .

        3
  •  0
  •   JamesBarnett    14 年前

    如何将ID与一般的兄弟组合器结合使用?

        <html>
        <head>
              <style type="text/css">
                    #id1 ~ DD { color: red; }
                    #id2 ~ DD { color: blue; }
              </style>
        </head>
        <body>
            <dl>
            <dt id="id1">term 1</dt>
                <dd>def 1a</dd>
                <dd>def 1b</dd>
    
            <dt id="id2">term 2</dt>
                <dd>def 2a</dd>
                <dd>def 2b</dd>
            </dl>
        </body>
    </html>​​​​​​​​​​​​​​​
    

    看看这把小提琴,它似乎在做你想做的… http://jsfiddle.net/6qEHQ/