반응형

알쓸(알아두면 쓸만한) CSS 선택자 

CSS선택자 하면 떠오르는 선택자는 id, class 정도가 있고 자식, 자손에 대한 기초를 알고 있으실 겁니다.

하지만 꼭 알아두면 좋은 선택자 30가지에 대해서 전부 알고계시지는 않을겁니다.

(만약 알고계신다면... 돌아가셔도 좋습니다 ㅠ.ㅠ)

저도 열심히 암기하기위해 정리하고 있습니다.

그럼 지금부터 정리한 것들을 조금씩 설명 드리겠습니다.


1. *

  • 별표는 전체요소를 대상으로 합니다. ( reset.css 등에서 많이 보았습니다. 다만 사용하지말라고 권하네요)

2. #

  • id선택자입니다.
  • 가장 흔하고 쉽게 사용됩니다.

3. .

  • class를 선택할때 사용합니다.

4. li a

  • 자손 선택자 입니다.
  • 더 상세히 작업해야 할 때 이 선택자를 사용합니다.

5. a

  • 태그 선택자입니다. 
  • 특정 태그 전체를 대상으로 해야할때 사용합니다.

6. a:link / a:visited

  • 클릭하기전 상태와 크릭한 후 상태를 대상으로 하기위해 :link , :visited 가상클래스를 사용합니다.

7. +

  • 인접 선택자입니다.
1
2
3
4
5
6
7
<ul>
   <li>A</li>
   <li>B</li>
   <li>C</li>
   <li>D</li>
</ul>
<p> P 태그 </p>

이렇게 적용된 모습을 확인 할 수 있습니다.

 

8. >

  • >는 직계 자식만 선택합니다.

예를 들면

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<header>
        <ul>
            <li>A</li>
            <li>B</li>
            <li>C</li>
            <li>D</li>
            <li>
                E
                <ul>
                    <li>E-1</li>
                    <li>E-2</li>
                    <li>E-3</li>
                </ul>
            </li>
        </ul>
</header>

이러한 마크업일때 , CSS를 

1
2
3
header ul{
    border: 1px solid red;
}

이렇게 코드를 작성 한다면, 

이렇게 li의 자식인 ul까지 border가 생성됩니다.

그렇지만 

1
2
3
header>ul{
    border: 1px solid red;
}

이렇게 작성한다면 

직계 자식만 CSS가 적용된 것을 볼 수 있습니다.

 

9. ~

  • 형제 선택자는 인접선택자와 비슷하지만 덜 엄격합니다.
  • 인접선택자는 바로 뒤에오는 첫번째 요소만 적용되지만, 형제선택자는 뒤에오는 모든 요소를 선택합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<style>
    ul~p{
        color:green;
    }
</style>
<ul>
    <li>A</li>
    <li>B</li>
    <li>C</li>
    <li>D</li>
</ul>
<p>AA</p>
<p>BB</p>
<p>CC</p>

 

10. [title]

  • 속성 선택자입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        a[title]{
            color:green;
        }
    </style>
</head>
<body>
    <a href="#" title="naver">naver</a>
    <a href="#">daum</a>
    <a href="#">google</a>
</body>
</html>

 

11. [href=""]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        a[href="https://google.com"]{
            color:green;
        }
    </style>
</head>
<body>
    <a href="https://naver.com" title="naver">naver</a>
    <a href="https://daum.net">daum</a>
    <a href="https://google.com">google</a>
</body>
</html>

 

href속성으로도 찾을 수 있습니다. 하지만 이렇게 적용하기에는 너무 융통성이 없습니다.

그렇기 때문에 우리는 약간의 정규식 표현을 사용할 수 있습니다.

 

12. [href*=""]

  • *는 입력값이 속성값안 어딘가에 있는것을 의미합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        a[href*="google"]{
            color:green;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <a href="https://naver.com" title="naver">naver</a>
    <a href="https://daum.net">daum</a>
    <a href="https://google.com">google</a>
</body>
</html>

* => 0개 이상의 문자를 포함합니다. a*b 는 ab, abb, aab, aababa 등을 포함합니다.

 

13. [href^="http"]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        a[href^="http"]{
            color:green;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <a href="https://naver.com" title="naver">naver</a>
    <a href="https://daum.net">daum</a>
    <a href="https://google.com">google</a>
</body>
</html>

문자열의 시작을 표기하는 정규표현식에서 흔하게 사용됩니다.

href^="http" => http로 시작하는 href를 의미하게 됩니다.

^ = 문자열이나 행의 처음을 의미합니다.

 

 

14. [href$=""]

  • $는 ^와는 반대로 문자열이나 행의 끝을 의미합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        a[href$="net"]{
            color:green;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <a href="https://naver.com" title="naver">naver</a>
    <a href="https://daum.net">daum</a>
    <a href="https://google.com">google</a>
</body>
</html>

15. :checked

  • 이 가상 클래스는 체크박스나 라디오버튼처럼 체크가되는 사용자 인터페이스 요소만을 대상으로 합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        input[type=radio]:checked+label{
            color:red;        
 
        }
    </style>
</head>
<body>
    <form action="/" method="post">
        <input type="radio" name="checkRadio" value="checkRadio" />
        <label>체크하면 색깔 바뀜!</label>
    </form>
</body>
</html>

 

체크 전

 

체크 후

16. ::before / ::after

  • befor 과 after 가상요소는 선택된 요소 주변에 콘텐츠를 생성합니다.
  • 이 클래스는 여러가지 방법으로 활용할 수 있습니다.
  1. gnb 구분 bar 넣기
  2. 앞, 뒤에 추가적인 정보를 넣기
  3. float 해제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        ul{
            list-style:none;
        }
        nav li {
            float: left;
            margin-right: 30px;
        }
        nav li:before{
            content:"our ";
        }
        nav li:after{
            content:"ㅣ";
            padding-left:30px;
        }
        nav li:after:first-child{
            content:"";
        }
       nav ul:after{
            display:block;
            clear:both;
            content:"";
        }
    </style>
</head>
<body>
    <nav>
        <ul>
            <li>Home</li>
            <li>Address</li>
            <li>Location</li>
        </ul>
    </nav>
</body>
</html>

17. :hover

  • 사용자가 요소위에 커서를 올릴때 스타일을 적용합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        p:hover{
            color:red;
            cursor:pointer;
        }
    </style>
</head>
<body>
    <p>마우스를 올리면 색깔이 변함</p>
</body>
</html>

 

18. :not

  • 특정 태그만 제외한 모든 요소를 선택하고 싶을때 사용합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        p:not(#number){
            color:red;
        }
    </style>
</head>
<body>
    <p id="number">1</p>
    <p>2</p>
    <p>3</p>
    <p>4</p>
    <p>5</p>
</body>
</html>

 

 

19. ::가상요소

  • 첫번째줄이나 첫글자와 같이 요소 일부분에 스타일을 적용할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        p::first-letter{
            margin-left: 30px;
            font-size:24px;
            font-weight:bold;
            color:blue;
        }
        p::first-line{
            color:green;
        }
    </style>
</head>
<body>
    <p>가상요소는 ::로 표현합니다 <br />
    꼭 block요소에 적용해야합니다.</p>
</body>
</html>

 

 

20. :nth-child(n) / :nth-last-child(n)

  • 여러 요소중에서 특정 요소만 지목하는 방법입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        li:nth-child(7){
            color:red;
        }
    </style>
</head>
<body>
    <ul>
        <li>A</li>
        <li>B</li>
        <li>C</li>
        <li>D</li>
        <li>E</li>
        <li>F</li>
        <li>G</li>
        <li>H</li>
        <li>I</li>
        <li>J</li>
        <li>K</li>
    </ul>
</body>
</html>

 

이렇게 숫자를 사용하여 표현할 수 있고 만약 짝수번째마다 필요하다면

1
2
3
4
5
    <style>
        li:nth-child(2n){
            color:red;
        }
    </style>

 

이렇게 사용도 가능합니다.

 :nth-last-child(n)는 

 

21. :nth-of-type(n) / :nth-last-of-type(n)

 

  • child요소가 아닌 type을 선탁할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        ul:nth-of-type(3){
            border: 2px solid black;   
        }
    </style>
</head>
<body>
    <ul>
        <li>A</li>
        <li>B</li>
        <li>C</li>
        <li>D</li>
        <li>E</li>
        <li>F</li>
        <li>G</li>
        <li>H</li>
        <li>I</li>
        <li>J</li>
        <li>K</li>
    </ul>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</body>
</html>

 

:nth-of:type도 마찬가지로 거꾸로 순서가 적용되는 :nth-last-of-type(n)도 사용 가능합니다.

 

22. :first-child / :last-child

  • 요소의 첫번째 또는 마지막 자식만 대상으로 삼을 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        ul{
            list-style:none;
        }
        ul li{
            border-top: 1px solid black;
            text-align:center;
        }
    </style>
</head>
<body>
    <ul>
        <li>A</li>
        <li>B</li>
        <li>C</li>
    </ul>
</body>
</html>

뭔가 어색함을 느씰 수 있습니다.

A위에 선이 없다면 더욱 예뻐보일것 입니다.

우리는 A에게 따로 class를 주고 border: none; 을 사용해도 되지만

1
2
3
4
5
6
7
8
9
10
11
12
    <style>
        ul{
            list-style:none;
        }
        ul li{
            border-top: 1px solid black;
            text-align:center;
        }
        li:first-child{
            border:none;
        }
    </style>

이렇게 first-child를 사용하여 테두리를 없앨 수 있습니다.

반응형

+ Recent posts