본문 바로가기

WEB/HTML&CSS

[HTML/CSS] #14.Combinators

html을 다루다 보면 부모 태그 안에서 자식 태그를 찾아 스타일을 적용해야하는 일이 있을 수 있다.

다음의 코드를 보자.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      body {
        height: 1000vh;
        margin: 50px;
      }

      span {
        background-color: yellowgreen;
        padding: 5px;
        border-radius: 10px;
      }

      div span {
        text-decoration: underline;
      }
    </style>
  </head>
  <body>
    <div>
      <span>hello</span>
      <p>
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Quod commodi et
        sequi ipsam odio dolorem. <span>inside</span>
      </p>
    </div>
  </body>
</html>

 

 

그리고 결과를 확인해보면 

 

div안에 있는 모든 span에 스타일이 적용되었음을 확인할 수 있다.

우리가 코드에서 주목해야할 부분은 'div span'인데 이는 div밑에 있는 모든 span에 스타일을 적용시켜주겠다는 의미가 된다.

 


 

div 바로 밑에 있는 span에만 스타일을 적용하는 방법도 있다. 위 코드에서 'div span'부분을 다음과 같이 수정해보자. 

 

      div > span {
        text-decoration: underline;
      }

그리고 결과를 확인해보면 다음과 같다.

 

따라서 'div > span'이라 쓰면 div 바로 밑에 있는 span에만 스타일을 적용시켜주겠다는 의미가 된다.

 


 

형제(동등한 위치에 있는)에게 효과를 주는 방법이 있다. 다음의 코드를 보자.

 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      body {
        height: 1000vh;
        margin: 50px;
      }

      span {
        background-color: yellowgreen;
        padding: 5px;
        border-radius: 10px;
      }

      p + span {
        text-decoration: underline;
      }
    </style>
  </head>
  <body>
    <div>
      <p>
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Quod commodi et
        sequi ipsam odio dolorem.
      </p>
      <span>hello</span>
    </div>
  </body>
</html>

 

그리고 결과를 확인해보면 

 

p와 형제인 span에만 효과가 적용되었음을 확인할 수 있다.

'p + span' 이라 쓰면 p와 동등한 위치에 있는 형제인 span을 찾아 스타일을 적용시켜주겠다는 의미가 된다.

대신 이 방법은 p와 가장 인접한 span 형제에게만 적용이 된다.

 


 

그렇다면 인접하든 인접하지 않든 동등한 위치에 있는 형제에게 효과를 주는 방법은 없을까? 다음의 코드를 보자.

 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      body {
        height: 1000vh;
        margin: 50px;
      }

      span {
        background-color: yellowgreen;
        padding: 5px;
        border-radius: 10px;
      }
      p ~ span {
        text-decoration: underline;
      }
    </style>
  </head>
  <body>
    <div>
      <p></p>
      <address>hi</address>
      <span>hello</span>
      <span>bye</span>
    </div>
  </body>
</html>

p ~ span으로 바뀌었다. 그리고 결과를 확인해보면

 

다음과 같이 p와 인접해있든 인접해있지 않든 p의 형제인 span에 스타일이 적용되었음을 확인할 수 있다.

'p ~ span'이라 쓰면 p와 동등한 위치에 있는 모든 span에 스타일을 적용시키겠다는 의미가 된다.

 

 


 

Combinator에 대한 자세한 설명은 다음의 사이트에서 확인할 수 있으니 참고하도록 하자.

https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Selectors/Combinators