티스토리 뷰

위 사진 처럼 마우스를 올렸을 때(:hover) 글씨 + 체크박스 전부 색상이 바뀌게 표현하려고 한다
input[type=checkbox]:hover {
color: rgb(48, 178, 48);
}
label:hover {
color: rgb(48, 178, 48);
}
이렇게 코드를 작성해 보았는데...

결과는 이 모양
:hover 가 아닌 그냥 색을 바꿀 수 있는지도 테스트 해봤는데도 요지부동이다
<div>
<input type="checkbox" id="checkbox1" class="checkBox">
<label for="checkbox1">Onion</label>
</div>
<div>
<label class="checkbox1"><input type="checkbox" class="checkBox"> Onion</label>
</div>
label 태그 안에 input 태그를 넣어서 클래스 지정해서 해봐도 소용이 없다

스택오버플로우 참고하여 수정해봤다

역시나 원치 않던 모양
checkbox 가 아니라 네모 모양을 만들어서 클릭하면 체크 효과가 날 수 있게 뭐 그런 이벤트를 주는 건가...? 복잡하다
다시 스택오버플로우를 꼼꼼히 찾아봐야겠다

내가 생각했던 것과 같은 의견 발견
그래도 javascript 없이 할 수 있는 방법을 계속 찾아봐야겠다
많은 의견들을 보다 보니까 selector 뒤에 :before :after 등을 사용하는 것이 많은데 이것이 무엇을 의미하는지 언제 쓰이는지 잘 모르겠다
checkbox 색상 하나를 변경하려고 해도 모르는 게 많으니 공부 할 게 진짜 꼬리에 꼬리를 무는... 가지뻗기 같은 이 공부법을 뭐라고 하더라 마인드맵? 학교 다닐 때 이런식으로 구조화 하는 것이 공부에 많이 도움이 되긴 했었다
[급 생각의 시간]
이게 독학의 양면성인가... 한 가지를 습득하기 위해서 또 다른 몇 가지를 습득해야 하고 그러기 위해서는 더 많은 시간을 투자해야 한다는 것
빨리 돌아갈 수 있는 길이 있음에도 방법을 모르고 무조건 부딪혀야 하니 분명 낭비되는 시간들이 있을 것이고
또 다른 면에선, 시간을 두고 돌아가는 대신 쉽게 무너지지 않게 기초공사가 잘 되는 장점도 있을 것 같다
어찌 됐던 독학은 정말 쉽지 않다 내게 방향을 안내해 줄 길잡이가 있었으면 좋겠다
Anyway.. checkbox 색상 변경하는 것에서부터 시작해서 이제는 ::after, ::before 에 대해 알아보자

이렇게 예시로 보니 한 번에 이해는 잘 되긴 하나
<span> 요소(Element) 를 사용해도 될 것 같은데 왜 :after :before를 사용하는지 의문이 든다
그냥 단순히 더 심플하니까? 더 간단하니까? 라고 생각했는데
누군가가 아하 하고 머리에 느낌표가 떠오르게 하는 답변을 간단명료하게 한 걸 찾았다

다시 본론으로 돌아가서 참고한 것들을 이용하여 checkbox 색상 변경 해보기
/* 체크 리스트에 마우스 오버 하였을 때*/
label:hover {
color: rgb(48, 178, 48);
}
input[type=checkbox],
input[type=checkbox]:hover {
-moz-appearance: none;
-webkit-appearance: none;
-o-appearance: none;
outline: none;
content: none;
}
input[type=checkbox]:before {
content: "✓";
font-size: 18px;
color: transparent !important;
display: block;
width: 15px;
height: 15px;
border: 1.5px solid rgb(148, 141, 141);
border-radius: 5px;
margin-right: 0px;
}
input[type=checkbox]:hover:before {
content: "✓";
font-size: 18px;
color: transparent !important;
display: block;
width: 15px;
height: 15px;
border: 1.5px solid rgb(48, 178, 48);
border-radius: 5px;
margin-right: 0px;
}
input[type=checkbox]:checked:before {
color: white !important;
width: 15px;
height: 15px;
border: 1.5px solid rgb(48, 178, 48);
background-color: rgb(48, 178, 48);
}


아싸 드디어 성공 :hover 기능도 잘 되고 클릭해도 잘 된다 오예 하고 있었는데.....웬걸

마우스를 떼니까 글씨 (label)은 그대로 있다
그럼 그렇지 이렇게 한 번에 넘어갈 리가 있나 싶던 순간이었다

내 맘을 읽은 듯한 질문 발견
진짜 스택오버플로우 없었으면 어쩔 뻔했어...
input[type=checkbox]:checked+label {
color: rgb(48, 178, 48);
}
Stack Overflow 참고하여 코드를 하나 더 추가했더니

드디어 성공했다
체크 모양을 조금 가운데로 맞추고 싶지만 그건 지금 우선순위가 아니기 때문에 다음에 다뤄봐야겠다
//비전공자가 혼자 공부하는 공간입니다
'포트폴리오' 카테고리의 다른 글
| 체크된 항목 리스트 표시 + 스택오버플로우 질문하기 (0) | 2023.01.31 |
|---|---|
| 자바스크립트에서 html 요소 생성하기 3탄 - for loop (반복문) (0) | 2023.01.27 |
| 자바스크립트에서 html 요소 생성하기 2탄 - for loop (반복문) (0) | 2023.01.25 |
| 자바스크립트에서 html 요소 생성하기 1탄 (0) | 2023.01.22 |
| [포트폴리오]나만의 웹페이지 만들며 자바스크립트 익히기 (0) | 2023.01.15 |
- Total
- Today
- Yesterday
- 프로그래밍독학
- 화살표함수
- CSS
- 가상돔
- 비전공자
- dom조작
- CSSDiner
- 캐시오류
- 이벤트핸들링
- translateX
- 체크박스오류
- DOMapi
- 프론트엔드독학
- 로컬스토리지오류
- DOM제어
- DOM자바스크립트
- CSS선택자
- JavaScript
- :nth-child
- 자바스크립트
- 리액트
- labelfor
- 즉시실행함수
- vanillajs
- 논리부정연산자
- 코딩독학
- 변수스코프
- 상태변수
- CSS게임
- VirtualDom
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
