트러블 슈팅 - html(css, react, js) - pseudo(가상) 클래스 style 미적용 문제

wonder1ng·2025년 2월 26일
  • 문제: styled-components로 가상 클래스 스타일 지정하였으나 style 적용 안 됨
// 문제 코드
const CertificationInput = styled.input`
  width: 48px;
  height: 48px;
  border-radius: 10px;

  :focus {
    border: 1px solid green;
    outline: none;
  }
`;
  • 원인: 파악 불가, 우선 순위 혹은 참조 오류로 추측

  • 해결: :focus -> &focus로 수정

    • &로 참조 대상을 더욱 명확히 하여 최우선으로 적용
// 해결 코드
const CertificationInput = styled.input`
  width: 48px;
  height: 48px;
  border-radius: 10px;

  &:focus {
    border: 1px solid green;
    outline: none;
  }
`;
  • 관련 ChatGPT 응답
    해결 방법 &:focus를 사용한 스타일링 방식에 대해 더 자세히 설명하겠습니다.

&:focus의 사용

styled-components에서 &:focus현재 선택된 요소(여기서는 input):focus 상태를 명시적으로 지정하는 방법입니다. 이 방법을 사용하면 :focus 스타일이 더 명확하게 적용됩니다.

기본적인 원리

  • &현재 요소를 참조하는 특수 문자입니다.
  • &:focus현재 요소가 포커스될 때의 스타일을 정의합니다. 즉, &input을 참조하며, &:focusinput:focus와 동일한 의미입니다.

예시

const CertificationInput = styled.input`
  width: 48px;
  height: 48px;
  border: 1px solid #d9d9d9;
  border-radius: 10px;
  text-align: center;
  font-size: 14px;
  color: #1f2024;
  margin: 0 4px;
  caret-color: #0b798b;

  &:focus {
    border: 2px solid #0b798b; /* 포커스 시 테두리 두께 및 색상 변경 */
    outline: none; /* 기본 outline 제거 */
    box-shadow: 0 0 5px rgba(11, 121, 139, 0.6); /* 강조 효과 추가 */
  }
`;

&:focus가 중요한가?

  1. 명확한 상태 지정:
    styled-components에서 &현재 스타일을 작성하는 요소를 참조합니다. 따라서 &:focus:focus 상태를 정확하게 현재 input 요소에만 적용하도록 해줍니다. 이렇게 하면 다른 요소에서 발생하는 스타일 충돌을 피할 수 있습니다.

  2. 다른 CSS 프레임워크와의 충돌 방지:
    만약 다른 CSS 스타일 시트나 프레임워크에서 input:focus에 대해 스타일을 작성하고 있다면, 이 스타일이 덮어쓰는 문제가 발생할 수 있습니다. 하지만 &:focus를 사용하면, 해당 스타일이 정확히 styled-components로 작성된 컴포넌트에만 적용되므로 충돌을 방지할 수 있습니다.

  3. 스타일 캡슐화:
    styled-componentsCSS-in-JS 방식으로, 컴포넌트의 스타일을 컴포넌트에 캡슐화합니다. &:focusstyled-components가 이 캡슐화된 스타일을 다룰 때 컴포넌트 범위 내에서만 focus 상태를 적용하게 하므로, 전체 애플리케이션에 영향을 미치지 않고 해당 컴포넌트에서만 스타일을 조정할 수 있습니다.

&:focus:focus의 차이

  • &:focusstyled-components 내에서 현재 스타일을 작성하는 요소에만 적용되는 반면,
  • :focus일반적인 CSS에서 input 요소가 포커스를 받을 때 적용되는 스타일입니다.

이렇게 &:focus를 사용하면 특정 스타일을 더 세밀하게 적용하고, 스타일이 제대로 적용되지 않는 문제를 해결할 수 있습니다.

&:focus:focus보다 더 효과적인가?

  • styled-components 내에서 &:focus를 사용하면, 스타일이 더 명확하고 우선순위가 높아지기 때문입니다. 일반적으로 styled-components는 컴포넌트 내부에서 CSS를 적용하기 때문에, &:focus를 사용하면 해당 스타일이 해당 요소에만 적용되고, 다른 CSS 규칙에 의해 덮어쓰이지 않게 됩니다.
  • 이 방법은 CSS가 명시적으로 캡슐화되어 적용되기 때문에, 다른 스타일 시트나 글로벌 스타일에서 영향을 받지 않습니다.

예시

const MyComponent = () => {
  return (
    <div>
      <CertificationInput placeholder="이곳에 입력" />
    </div>
  );
};

위와 같이 CertificationInput을 사용하면, :focus 스타일이 input 요소에만 적용되고, 다른 전역 스타일이 덮어쓰는 문제를 방지할 수 있습니다.


이와 같이 &:focus를 사용하면, styled-components 내에서 input:focus 스타일이 정확하게 해당 컴포넌트에만 적용되므로, 스타일이 제대로 동작하도록 할 수 있습니다. &현재 컴포넌트를 참조하므로, 이 방법을 사용하면 :focus가 더욱 정확하게 처리됩니다.

profile
데이터, 풀스택

0개의 댓글