Dynamic style – manipulating CSS with JavaScript – 자바스크립트 반응형 레이아웃 구현 방법 – How to dynamically create CSS class in JavaScript and apply?

최근 학습한 내용의 복습과 향후 참조할 레퍼런스 용도로 제작된 내용입니다. 내용에 실수가 있거나 오탈자가 발견되실 경우, 상단의 컨텍폼을 통해 연락주시면 감사하겠습니다.

커서가 지정되지 않은 상태의 컨텍폼

위와 같은 컨텍폼을 작성했다고 가정합니다. (하단 폼소스-1)

    <form onSubmit={formSubmitHandler}>
      <div>
        <label>Course Goal</label>
        <input type="text" onChange={goalInputChangeHandler} />
      </div>
      <Button type="submit">Add Goal</Button>
    </form>

사용자가 입력창에 값을 입력하고 버튼을 누르면, 하단에 해당 내용이 표시되는 간단한 예제입니다. 이때, 사용자가 빈값으로 버튼을 누르면, 입력창이 빨간색으로 변하게됩니다.

입력창에 커서를 두고 입력을 시작할때
    <form onSubmit={formSubmitHandler}>
      <div className={`form-control ${!isValid ? "invalid" : ""}`}>
        <label>Course Goal</label>
        <input type="text" onChange={goalInputChangeHandler} />
      </div>
      <Button type="submit">Add Goal</Button>
    </form>

여기서, css 코드 내용을 보면 두개의 코드로 만들어집니다.
클래스명에 3항연산자를 사용하여, 특정변수의 값(isValid)이 참/거짓인지를 참조하여 판별식을 적용. 판별식으로 활용된 변수가 참이면 빈값, 즉, 정상상태이므로, 아래의 값이 실행될 것입니다.

빈값일때 버튼이 클릭되면, 입력창의 색이 빨간색으로 바뀐다.
정상적인 입력인 경우, 아래의 값이 실행될 것이다.
.form-control input {
  display: block;
  width: 100%;
  border: 1px solid #ccc;
  font: inherit;
  line-height: 1.5rem;
  padding: 0 0.25rem;
}
.form-control label {
  font-weight: bold;
  display: block;
  margin-bottom: 0.5rem;
}

클래스이름에 invalid가 붙으면 아래 css가 적용.
.form-control.invalid input {
  border-color: red;
  background: #ffd7d7;
}

.form-control.invalid label {
  color: red;
}

또 하나 재미있는 점은, 사용자가 입력창에 값을 입력하기 시작했을때, 입력창의 색이 검정색으로 바뀐다는 점입니다.

사용자가 입력값을 넣을 경우, 입력창의 색이 정상적으로 돌아온다

여기서 주의깊게 볼 내용은, if문이나 다른 조건문을 사용하지 않고 3항연산자를 통해 코드를 간략하게 표현했다는 점.

<div className={`form-control ${!isValid ? "invalid" : ""}`}>

본 소스의 예제는 udemy 강의를 통해 react 수업을 진행하던 중에 발췌한 소스이므로,
전체 소스 공개는 불가하지만, 궁금하신 내용이 있으신 분은 언제든 댓글을 주시면 함께 문제를
풀어갈 수 있을것 같습니다.

본 내용은 udemy > React 강의 > 섹션:6 Styling React Components를 통해 더 자세한 내용을 확인 할 수 있습니다.

CSS 파일의 내용을 코드단에 함께 구현하는 방법은 내용이 좀더 이해된 후에 작성하도록 하겠습니다.

다들 오늘도 즐코딩 하세요!!!