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

当属性选择器中没有空白时,为什么它会工作?

  •  3
  • Robert  · 技术社区  · 6 年前

    MDN states 以下是关于 [attr~=value] 属性选择器:

    表示属性名为attr的元素,其值为 以空格分隔的单词列表,其中一个正好是值。

    如果 liquid 不是用空格分隔的,那它为什么起作用?

    [data-vegetable~="liquid"] {
      color: red;
    }
    Ingredients for my recipe: <i lang="fr-FR">Poulet basquaise</i>
    <ul>
      <li data-quantity="1kg" data-vegetable>Tomatoes</li>
      <li data-quantity="3" data-vegetable>Onions</li>
      <li data-quantity="3" data-vegetable>Garlic</li>
      <li data-quantity="700g" data-vegetable="not spicy like chili">Red pepper</li>
      <li data-quantity="2kg" data-meat>Chicken</li>
      <li data-quantity="optional 150g" data-meat>Bacon bits</li>
      <li data-quantity="optional 10ml" data-vegetable="liquid">Olive oil</li>
      <li data-quantity="25cl" data-vegetable="liquid">White wine</li>
    </ul>
    4 回复  |  直到 6 年前
        1
  •  3
  •   Temani Afif    6 年前

    它不是 用空格分隔 但是:

    以空格分隔的单词列表

    这意味着一个单词列表,其中有介于和之间的空格,如果单独使用,则不需要空格,因为没有要分隔的内容。

    [data-vegetable~="liquid"] {
      color: red;
    }
    <ul>
      <li data-vegetable="liquid other and other">this one</li>
      <li data-vegetable="liquid">and this one</li>
      <li data-vegetable="liquid   ">also this one</li>  
      <li data-vegetable="another liquid   ">also this one</li>
      <li data-vegetable="liquid-one">NOT this one !!</li>
      <li data-vegetable="another-liquid">NOT this one !!</li>
      <li data-vegetable="aliquid">NOT this one !!</li>
    </ul>

    最后一个你需要的 *

    [data-vegetable*="liquid"] {
      color: red;
    }
    <ul>
      <li data-vegetable="liquid other and other">this one</li>
      <li data-vegetable="liquid">and this one</li>
      <li data-vegetable="liquid   ">also this one</li>  
      <li data-vegetable="another liquid   ">also this one</li>
      <li data-vegetable="liquid-one">this one too!!</li>
      <li data-vegetable="another-liquid">this one too!!</li>
      <li data-vegetable="aliquid">this one too!!</li>
    </ul>
        2
  •  0
  •   yunzen    6 年前

    单词列表在单词之间有分隔符。 如果列表只包含一个单词,则没有分隔符

        3
  •  0
  •   jvdmr    6 年前

    这意味着,属性( data-vegetable 在这种情况下)可以有多个值,在一个字符串中使用空格分隔这些值,例如 data-vegetable="liquid foo bar" ,这给了 数据蔬菜 “liquid”、“foo”和“bar”三个值。

    选择器可用于匹配这些值中的任何一个,因此在匹配其中任何一个值时都将获取此元素 [data-vegetable~="liquid"] , [data-vegetable~="foo"] [data-vegetable~="bar"] .

        4
  •  0
  •   TylerH Ash Burlaczenko    6 年前

    它说:“用空格分隔的单词表”

    这意味着它是一个用空格分隔的列表。但是一个列表只能有一个项目。所以在这种情况下,不需要空间。