본문 바로가기
Front-end/HTML + CSS

HTML/CSS - State & 속성 선택자(selector)

by devraphy 2020. 8. 26.

1. State

- 어떤 웹사이트를 개발자 도구를 통해 살펴보면 확인할 수 있는 가장 중요한 selector(선택자)는  state이다. 

- 위의 사진에서 보이는 것처럼 state에는 active, hover, focus, visited, focus-within이 있다. 이를 버튼을 통해 살펴보자. 

 

 

1) active - 버튼을 클릭했을 때 작동 

기본 버튼 

    <style>
      body {
        height: 1000vh;
        margin: 50px;
      }

      button:active {
        background-color: coral; 
      }
    </style>
  </head>
  <body>
    <button>Hello</button>
  </body>
</html>

버튼을 누를 때 색상이 바뀐다.

 

 

2) hover - 마우스 커서를 버튼 위에 올렸을 때 작동

- hover가 작동되면 default border가 적용되기 때문에 설정해 놓았던 둥근 테두리가 없어진다. 그러므로 hover가 작동할 때의 테두리 모양을 따로 적용해야 한다. 

 <style>
      body {
        height: 1000vh;
        margin: 50px;
      }

      button:hover {
        background-color: cornflowerblue; 
      }
    </style>

hover가 작동하면 테두리 모양이 기본설정으로 적용된다.

 

 

3) focus -  입력란에 커서가 놓여있게 하는 기능으로, 사용자를 입력란으로 유도한다. 

- Tab키를 눌렀을 때, 커서가 자동으로 입력란에 놓여지게 된다.

    <style>
      body {
        height: 1000vh;
        margin: 50px;
      }

      input:focus {
        background-color: hotpink;
      }
    </style>
  </head>
  <body>
    <input type="email" placeholder="abc@email.com" />
    <input type="email" placeholder="abc@email.com" />
  </body>
</html>

 

 

4) visited - 링크에만 적용이 되는 상태 값으로, 방문한(클릭한) 링크에 적용된다. 

    <style>
      body {
        height: 1000vh;
        margin: 50px;
      }

      a:visited {
        background-color: tomato;
      }
    </style>
  </head>
  <body>
    <a href="https://google.com">Go to Google.com</a>
  </body>
</html>

방문 전
방문 후 

 

 

5) focus within - focus 상태인 자식 엘리멘트를 가진 부모 엘리먼트에게 적용되는 상태를 의미한다.

 <style>
      body {
        height: 1000vh;
        margin: 50px;
      }

      form {
        border: 3px solid salmon;
        display: flex;
        flex-direction: column;
        width: 300px;
        padding: 20px;
      }

      form:focus-within {
        border-color: seagreen;
      }
    </style>
  </head>
  <body>
    <form action="">
      <input type="text" />
      <input type="text" />
      <input type="text" />
    </form>
  </body>
</html>

자식 엘리먼트가 focus 상태가 아닐 때
자식 엘리먼트가 focus 상태일 때


2. 응용

- 기본적인 state에 대한 것을 배웠으니 여러 state를 함께 사용하는 방법을 살펴보자.

 

예시 1) form이 hover상태일 때, input의 배경색을 바꾸는 state 

 <style>
      body {
        height: 1000vh;
        margin: 50px;
      }

      form {
        border: 3px solid salmon;
        display: flex;
        flex-direction: column;
        width: 300px;
        padding: 20px;
      }

      form:hover input {
        background-color: royalblue;
      }
    </style>
  </head>
  <body>
    <form action="">
      <input type="text" />
      <input type="text" />
      <input type="text" />
    </form>
  </body>
</html>

마우스 커서가 주황색 범위 바깥에 있을 때(좌측) / 마우스 커서가 주황색 범위 안에 들어왔을 때(우측)

 

 

예시 2) form이 hover상태이면서 동시에 input이 focus상태일 때, 배경색을 바꾸는 state
- 이번 예시는 form 위에 마우스가 올라가 있으며 동시에 input이 focus상태가 될 때에만 작동한다. 

  <style>
      body {
        height: 1000vh;
        margin: 50px;
      }

      form {
        border: 3px solid salmon;
        display: flex;
        flex-direction: column;
        width: 300px;
        padding: 20px;
      }

      form:hover input:focus {
        background-color: silver;
      }
    </style>
  </head>
  <body>
    <form action="">
      <input type="text" />
      <input type="text" />
      <input type="text" />
    </form>
  </body>
</html>

input이 focus상태지만 form이 hover가 아닌 상태(좌측) / input이 focus상태이고 form이 hover인 상태(우측)


3. 기타 CSS 속성 선택자 

- 이전 포스팅에서는 엘리먼트의 구조나 관계를 이용하여 엘리먼트를 선택하는 방법을 배웠다. 이번 포스팅에서는 이 선택자를 이용하여 선택된 엘리먼트의 속성값을 변경하는 방법을 배워보자. 

 

예시 1) 만약 아래와 같이 input이 있고 안에 placeholder가 존재할 때, 기본적으로 placeholder의 색상은 회색으로 잘 보이지 않는다. 만약 이것을 바꾸고 싶다면 어떻게 해야할까? 

- 위의 예시처럼, 속성값을 변경하고 싶을 때에도 선택자를 이용하여 바꿀 수 있다. placeholder의 색상을 파란색으로 바꿔보자. 

    <style>
      body {
        height: 1000vh;
        margin: 50px;
      }
      input::placeholder {
        color: royalblue;
      }
    </style>
  </head>
  <body>
    <input type="text" placeholder="First-Name" />
    <input type="text" placeholder="Last-Name" />
    <input type="text" placeholder="email" />
  </body>
</html>

placeholder가 파란색으로 바뀌었다.

 

 

- 여기서 중요하게 봐야 하는 것은 속성값을 선택자로 명시하는 방법이다. (아래 사진참고)


 

Selection)

 - selection은 글을 드래그했을 때, 파란색으로 텍스트의 배경색이 바뀌는것을 지칭한다. (아래 사진참고)

https://www.nytimes.com/2020/08/26/technology/personaltech/tiktok-data-apps.html

- selection 이외에 여러가지가 속성이 존재하는데, 선택자를 이용해 이러한 스타일 속성값을 바꿔보자.

 

 

예시 1) ::selection

  <style>
      body {
        height: 1000vh;
        margin: 50px;
      }
      p::selection {
        color: white;
        background-color: silver;
      }
    </style>
  </head>
  <body>
    <p>
      abcabcabcabcabcacbcacbabcabcabcabc abcacbcacbabcabcabcabcabcacbcacbabc
      abcabcabcabcacbcacb
    </p>
  </body>
</html>

 

 

예시 2) ::first-letter 

   <style>
      body {
        height: 1000vh;
        margin: 50px;
      }
      p::first-letter {
        font-size: 40px;
      }
    </style>
  </head>
  <body>
    <p>
      Abcabcabcabcabcacbcacbabcabcabcabc abcacbcacbabcabcabcabcabcacbcacbabc
      abcabcabcabcacbcacb
    </p>
  </body>
</html>

 

'Front-end > HTML + CSS' 카테고리의 다른 글

HTML/CSS - Transition & Transformation  (0) 2020.08.30
HTML/CSS - CSS Variable  (0) 2020.08.27
HTML/CSS - Pseudo selectors(선택자)  (0) 2020.08.25
HTML/CSS - Position (relative&absolute)  (0) 2020.08.24
HTML/CSS - Inline_block & Flex_box  (0) 2020.08.24

댓글