SCSS hover에서 특정 자식 요소의 속성 변경

5040 단어 HTMLSass초보자scss
부모 요소의 마우스 호버에서 여러 자식 요소 중 특정 자식 요소만의 속성을 변경하는 장면이 발생했습니다. SCSS의 쓰는 방법이 좀처럼 발견되지 않았으므로, 비망록도 겸해 기재합니다.

하고 싶은 일



아래와 같은 HTML로, 부모 요소 content에 커서가 맞았을 때의
  • 자식 요소 두 텍스트 모두에 밑줄 표시
  • 두 번째 자식 요소의 경우 문자 색상을 빨간색 문자로 만듭니다

  • 을 구현합니다. 그 때,
  • BEM의 사고 방식에 따라 클래스 설정
  • BEM에 따라 &를 활용하는 약어로 SCSS를 작성한다.

    해야 합니다.

    sample.html
    <div class="content">
      <p class="content__text">下線付き</p>
      <p class="content__text--red">下線付き+赤文字</p>
    </div>
    

    sample.scss
    .content {
      height: 100px;
      width: 200px;
      border: solid 1px;
      text-align: center;
    }
    

    원래의 표시는 이런 느낌


    구현 방법



    부모 요소에 : hover 의사 클래스 적용



    sample.scss
    .content {
      height: 100px;
      width: 200px;
      border: solid 1px;
      text-align: center;
      &:hover {
        text-decoration: underline;
      }
    }
    

    이제 부모 요소에 마우스 커서가 닿으면 텍스트에 밑줄이 표시됩니다. 부모 요소에 대한 속성을 설정하지만 자식 요소에도 상속되므로 자식 요소의 텍스트에 밑줄을 그릴 수 있습니다.
    표시는 이런 느낌.


    두 번째 자식 요소만의 속성을 변경하는 방법?



    CSS로 쓰면 다음과 같습니다.
    .content:hover > .content__text--red {
      color: red;
    }
    

    덧붙여서, 「>」는 「직하의 아이 요소」를 의미합니다.
    ※이번 샘플 정도라면 「>」 대신에 반각 스페이스에서도 같은 표시가 됩니다.

    이것을 SCSS로 쓰면 다음과 같습니다.

    sample.scss
    .content {
      height: 100px;
      width: 200px;
      border: solid 1px;
      text-align: center;
      &:hover {
        text-decoration: underline;
      }
      &:hover > &__text--red {
        color: red;
      }
    }
    

    &를 사용한 약어를 한 줄에 여러 개 쓸 수 있다는 것을 이번에 처음 알았습니다.
    표시는 이런 느낌.

    원하는 구현이 완료되었습니다.

    끝에



    자바스크립트를 사용하지 않으면 할 수 없는 것이라고 생각하고 있었습니다만, CSS만으로 실현할 수 있었습니다. 누군가의 참고가 되면 다행입니다.
    첫 투고이므로 읽기 어려운 점도 있었을까 생각합니다. 읽어 주셔서 감사합니다.
  • 좋은 웹페이지 즐겨찾기