728x90
반응형
input 의 타입중 radio 는 브라우저마다 기본 스타일이 다르게 보여집니다.
그리고 일반적인 css 스타일을 적용해서는 원하는대로 스타일을 바꾸기가 어렵습니다.
때문에 label 과 input 이 가진 특성을 활용하면 커스텀한 라디오를 만들 수 있습니다.
<div class="wrap">
<div>
<input id="custom1" type="radio" name="custom" value="custom1" />
<label class="circle" for="custom1"></label>
<label class="text" for="custom1">text</label>
</div>
<div>
<input id="custom2" type="radio" name="custom" value="custom2" />
<label class="circle" for="custom2"></label>
<label class="text" for="custom2">text2</label>
</div>
<div>
<input id="custom3" type="radio" name="custom" value="custom3" />
<label class="circle" for="custom3"></label>
<label class="text" for="custom3">text3</label>
</div>
</div>
input[type=radio] {
display: none;
}
div {
display: flex;
align-items: center;
gap: 5px;
}
label {
cursor: pointer;
}
.circle {
width: 20px;
height: 20px;
border: 2px solid #cccccc;
display: block;
border-radius: 20px;
display: flex;
align-items: center;
justify-content: center;
}
.circle::after {
content: '';
display: block;
width: 14px;
height: 14px;
border-radius: 14px;
}
input[type=radio]:checked + .circle::after {
background: red;
}
input[type=radio]:checked ~ .text {
color: red;
}
const wrap = document.querySelector('.wrap')
wrap.addEventListener('change', (e) => {
console.log(e.target.value)
})
스크립트코드는 선택한 라디오의 값을 가져오는 코드입니다.
이벤트 버블링의 특성을 활용하여 이벤트 위임형식으로 만들었습니다.
이벤트 바인딩을 부모에만 걸어 코드의 양을 줄이고 메모리도 절약할 수 있습니다.
728x90
반응형
'프론트엔드 > 한줄코딩' 카테고리의 다른 글
언제 리액트를 시작해야할까? (0) | 2022.03.14 |
---|---|
JS call-by-value, call-by-reference (0) | 2021.12.29 |
JS - commaParser (0) | 2021.12.01 |
FEConf KOREA 2021 에서 받은 인사이트 (0) | 2021.11.07 |
함수선언식과 화살표 함수의 차이 (0) | 2021.10.25 |