본문 바로가기

CSS

combination selector : 연결 선택자

1. 연결 선택자란?

 

선택자에 다른 선택자를 연결하여 적용 대상이 되는 태그를 한정시키는 선택자를 말한다.

 

 

 

2. descendant selector : 자손 선택자

기본형 상위요소 하위요소
구분 요소  : 공백
적용 범위
  : 지정한 모든 하위 요소에 스타일 적용

자손 선택자는 부모(조상) 요소에 포함되는 모든 하위요소에 대한 스타일 적용을 위하여 사용하는 선택자이다.

부모 요소에 포함되는 자식 요소뿐만 아니라 자손 즉 손자 요소에게도 그 영향이 미친다는 특징이 있다.

    <style>
        div p {
            color: darkblue;
        }
    </style>
</head>
<body>
    <div>
        <p>
            자식 p 1
        </P>
        <h1>
            <p>
                손자 p 1
            </p>
        </h1>
    </div>
</body>

위의 코드에서 스타일을 적용하고자 하는 범위는 div 태그 내에 있는 p 태그 전부이다. 

때문에 자손 선택자를 사용하여 상위요소 쪽에 div 를 하위요소 쪽에 p 를 작성하여 출력하였다.

자손 선택자는 더 세부적으로 작성할 수도 있다. 

만약 자식 p 태그가 아닌 손자 p 태그에만 스타일을 적용하고 싶다면 다음과 같이 선택자를 추가하면 된다.

    <style>
        div h1 p {
            color: darkblue;
        }
    </style>
</head>
<body>
    <div>
        <p>
            자식 p 1
        </P>
        <h1>
            <p>
                손자 p 1
            </p>
        </h1>
    </div>
</body>
</html>

 

 

3. child selector : 자식 선택자 

기본형 부모요소 > 자식요소
구분 요소 : >(부등호)
적용 범위 : 자신이 (자식요소)이면서 부모를 (부모요소)로 가진 요소들만 스타일이 적용된다.

자식 선택자는 위의 자손 선택자와 종종 비교되는데 스타일의 적용 범위가 다르다는 것을 유의해야 한다.

자손 선택자는 선택된 하위요소가 부모 또는 조상 중 상위요소인 경우 모두 적용된다는 것이고,

자식 선택자는 선택된 자식요소가 부모로 부모요소를 가진 경우 모두 적용된다는 것이다.

 

예제를 살펴보자.

    <style>
        h1 > p {
            color: darkblue;
        }
    </style>
</head>
<body>
    <div>
        <p>
            자식 p 1
        </P>
        <h1>
            <p>
                손자 p 1
            </p>
        </h1>
    </div>
</body>

스타일을 적용하고자 한 부분은 본인이 p 태그이면서 h1 태그를 부모로 가진 부분이다.

즉 손자 p 태그 부분에만 적용해 보려고 한다.

이번에는 자식 p 태그에만 적용되도록 코드를 변경해 보겠다.

    <style>
        div > p {
            color: darkblue;
        }
    </style>
</head>
<body>
    <div>
        <p>
            자식 p 1
        </P>
        <h1>
            <p>
                손자 p 1
            </p>
        </h1>
    </div>
</body>

예제에서도 알 수 있듯이 자식 선택자는 손자 선택자까지 영향을 주지 않는다는 것을 기억해야 한다.

 

 

4. abjacent selector : 인접 형제 선택자

기본형 : 요소 1 + 요소 2
구분 요소 : +
적용 범위 : 같은 부모요소를 가진 형제 요소 중 가장 인접한 동생 요소

먼저 형 요소와 동생 요소를 구분할 필요가 있다.

같은 부모 요소를 가지는 요소들을 형제 관계로 볼 때에 가장 먼저 쓰인 요소를 형 요소로 나중에 나오는 요소를 동생 요소로 부르는 것이다.

즉 요소가 세개 있다면, 첫째, 둘째, 셋째의 관계로 해석할 수 있다는 것이다.

 

인접 형제 선택자는 본인이 요소 2 면서 형 요소로 요소 1을 가지고 있는 요소에만 스타일을 적용한다.

 

예를 들어 다음과 같은 코드가 있다고 해보자.

    <style>
        table td {
            border: 2px solid darkblue;
            width: 50px;
            height: 50px;
            padding: 1em;
        }
    </style>
</head>
<body><table>
        <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
            <td>4</td>
            <td>5</td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
    </table>
</body>

이 예제 표의 2번의 너비는 100px, 3번의 너비는 150px, 4번의 너비는 200px, 5번의 너비는 250px로 변경하려면 어떻게 해야 할까?

 

먼저 2번의 너비를 조정해보기 위하여 td + td 에 스타일을 적용해 보자.

        table td {
            border: 2px solid darkblue;
            width: 50px;
            height: 50px;
            padding: 1em;
        }
       td + td {
        width: 100px;
       }

2번의 너비를 변경하기 위하여 적용했던 td + td 가 3, 4, 5번의 너비에도 영향을 미쳤다.

왜 이런 결과가 나오게 되었을까?

 

앞서 말했듯이 인접 형제 선택자는 본인이 td 이면서 td 를 형 요소로 가지고 있는 모든 요소라고 하였다.

때문에 3, 4, 5번 또한 조건이 성립되기 때문에 이러한 결과가 나타난 것이다.

 

3, 4, 5번도 변경하기 위해서 코드를 수정해 보겠다.

        table td {
            border: 2px solid darkblue;
            width: 50px;
            height: 50px;
            padding: 1em;
        }
       td + td {
        width: 100px;
       }
       td + td + td {
        width: 150px;
       }
       td + td + td + td {
        width: 200px;
       }
       td + td + td + td + td {
        width: 250px;
       }

 

5. sibling selector : 형제 선택자

기본형 요소1 ~ 요소 2
구분 요소 : ~
적용 범위 : 모든 형제 요소

형제 선택자는 앞서 말한 인접 형제 선택자와 달리 같은 형제로 있으면 모두 적용된다는 특징을 가지고 있다.

요소 1 다음에 오는 모든 요소 2 태그에 스타일이 적용된다.

       td ~ td {
        background-color: cornflowerblue;
       }

스타일을 위와 같이 이렇게 적용한다고 해보자.

그럼 자신이 td 태그이면서 td 태그를 형 요소로 가지고 있는 요소를 대상으로 한 것이다.

이를 적용하면 다음과 같은 결과를 얻을 수 있다.

1번 영역이 영향을 받지 않은 이유를 알 수 있겠는가?

1번 영역은 본인이 td 태그이지만 형 요소로 td 태그를 가지지 못 했기 때문에 적용 대상에서 제외된 것이다. 

 

 

'CSS' 카테고리의 다른 글

가상 클래스와 가상 요소  (0) 2022.10.26
속성 선택자  (0) 2022.10.26
HTML5 시멘틱 태그  (0) 2022.10.24
표 스타일 속성  (0) 2022.10.24
z-index 속성  (0) 2022.10.24