Selector

 

一、*

Universal selector

<!DOCTYPE html>
<html>

<head>
  <style>
    div {
      border: solid 1px #ddd;
      margin: 1.5em;
    }

    #first>* {
      border: solid 1px red;
    }
  </style>
</head>

<body>
  <div id="first">
    <div>
      <div>
        <p>test</p>
      </div>
    </div>
  </div>
</body>

</html>

執行畫面

說明:

1、「*」符號代表任何一種元素。

2、*[class] 等於 [class]。

3、*.test 等於 .test。

4、*#first 等於 #first。

 

二、E

Type selector

<!DOCTYPE html>
<html>

<head>
  <style>
    p {
      color: red;
    }
  </style>
</head>

<body>
  <p>test</p>
</body>

</html>

執行畫面

說明:

E 表示為元素。

 

三、E.warning

Class selectors

<!DOCTYPE html>
<html>

<head>
  <style>
    p.warning {
      background-color: yellow;
    }

    p[class~="warning"] {
      background-color: yellow;
    }

    .warning {
      background-color: yellow;
    }

    [class~="warning"] {
      background-color: yellow;
    }

    *.warning {
      background-color: yellow;
    }
  </style>
</head>

<body>
  <p class="warning">p1</p>
  <p foo="sea bar">p2</p>
  <p foo="bar-say">p3</p>
</body>

</html>

執行畫面

說明:

1、E.warning 等於 E[class~="warning"]。

2、.warning 等於 *.warning 等於 [class~="warning"]。

3、p.warning.marine 表示要符合元素為 p,並且 class 屬性值含有 warning 字串值,

並且 class 屬性值再有 marine 字串值,才符合。如下範例

<!DOCTYPE html>
<html>

<head>
  <style>
    p.warning.marine {
      background-color: yellow;
    }
  </style>
</head>

<body>
  <p class="warning">p1</p>
  <p class="marine">p2</p>
  <p class="warning marine">p3</p>
  <p class="warning aqua marine">p4</p>
</body>

</html>

執行畫面

 

四、E#myid

ID selectors

<!DOCTYPE html>
<html>

<head>
  <style>
    #chap {
      background-color: yellow;
    }

    p#chap {
      background-color: yellow;
    }

    *#chap {
      background-color: yellow;
    }
  </style>
</head>

<body>
  <p id="chap">p1</p>
  <p id="marine">p2</p>
  <h1 id="chap">h3</h1>
</body>

</html>

執行畫面

說明:

1、#chap 等於 *#chap。

2、p#chap 表示一元素為 p,並且 id 值為 chap 才符合。

 

五、E:not(s)

Negation pseudo-class

1、:not() 裡面可以是 id selector

<!DOCTYPE html>
<html>

<head>
  <style>
    p:not(#chap) {
      background-color: yellow;
    }
  </style>
</head>

<body>
  <p id="chap">p1</p>
  <p id="marine">p2</p>
</body>

</html>

執行畫面

 

2、:not() 裡面可以是 Attribute selector

<!DOCTYPE html>
<html>

<head>
  <style>
    p:not([foo]) {
      background-color: yellow;
    }
  </style>
</head>

<body>
  <p id="chap">p1</p>
  <p id="marine">p2</p>
  <p foo="bar">p3</p>
</body>

</html>

執行畫面

 

3、:not() 裡面可以是 Type Selector

<!DOCTYPE html>
<html>

<head>
  <style>
    div *:not(p) {
      background-color: yellow;
    }
  </style>
</head>

<body>
  <div>
    <p id="chap">p1</p>
    <p id="marine">p2</p>
    <h1>h3</h1>
  </div>
</body>

</html>

執行畫面

 

4、:not() 可以串聯 :not(),表示要同時滿足所有串聯 :not() 的條件才符合。

<!DOCTYPE html>
<html>

<head>
  <style>
    div *:not(p):not(h1) {
      background-color: yellow;
    }
  </style>
</head>

<body>
  <div>
    <p id="chap">p1</p>
    <p id="marine">p2</p>
    <h1>h3</h1>
    <h6>h4</h6>
  </div>
</body>

</html>

執行畫面

 

5、其他範例(故意弄個有問題的範例來對照)

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <style>
    div:not(h1):not(h2) {
      user-select: none;
    }
  </style>
</head>

<body>
  <div>
    <h1>h1</h1>
    <h2>h2</h2>
    <h3>h3</h3>
  </div>
  <br />
  <section>
    <h1>h1</h1>
    <h2>h2</h2>
    <h3>h3</h3>
  </section>
</body>

</html>

 

六、E F

Descendant combinator

<!DOCTYPE html>
<html>

<head>
  <style>
    div span {
      background: yellow;
    }
  </style>
</head>

<body>
  <div>
    <p>
      <span>test</span>
    </p>
  </div>
</body>

</html>

執行畫面

說明:

E F 表示只要是 E 元素包著 F 元素,不管中間隔多少層,都符合。

 

七、E > F

Child combinator

<!DOCTYPE html>
<html>

<head>
  <style>
    div>p {
      background: yellow;
    }
  </style>
</head>

<body>
  <div>
    <p>
      <span>test</span>
    </p>
  </div>
</body>

</html>

執行畫面

說明:

E > F 表示 E 元素(父元素)包著 F 元素(子元素),中間不能有隔層,才符合。

 

八、E + F

Next-sibling combinator

<!DOCTYPE html>
<html>

<head>
  <style>
    h3+h6 {
      background: yellow;
    }
  </style>
</head>

<body>
  <h1>h1</h1>
  <h3 foo="bar">h3</h3>
  <h6>h6</h6>
</body>

</html>

執行畫面

說明:

1、E 跟 F 皆限定為元素。

2、E + F 表示為 F 元素一定要緊接在 E 元素之後才符合。

3、E 或 F 元素可以個別加一點限制條件,如下範例

<!DOCTYPE html>
<html>

<head>
  <style>
    h3[foo="bar"]+h6 {
      background: yellow;
    }
  </style>
</head>

<body>
  <h1>h1</h1>
  <h3 foo="bar">h3</h3>
  <h6>h6</h6>
</body>

</html>

 

九、E ~ F

Subsequent-sibling combinator

<!DOCTYPE html>
<html>

<head>
  <style>
    h1~h6 {
      background: yellow;
    }
  </style>
</head>

<body>
  <h1>h1</h1>
  <h3 foo="bar">h3</h3>
  <h6>h6</h6>
</body>

</html>

執行畫面

說明:

1、其特性跟 Next-sibling combinator 差不多,唯一不同的是,

F 元素不一定要緊接在 E 元素之後才符合。