웹 페이지에서 체크 표시(틱)는 항목 선택 여부나 작업 완료 상태를 나타낼 때 널리 사용되는 UI 요소입니다. 별도의 이미지 파일 없이 CSS만으로도 가볍고 확장성 있는 커스텀 체크마크를 만들 수 있습니다. 이번 글에서는 대표적인 두 가지 구현 방법을 예제 코드와 함께 살펴보겠습니다.
방법 1. 가상 요소(::before, ::after)로 만드는 체크마크
첫 번째 방법은 하나의 div 요소에 ::before와 ::after 가상 요소를 배치한 뒤, 각각 -45deg로 회전시켜 체크 모양의 두 선을 그리는 기법입니다. 색상, 굵기, 크기를 세밀하게 조절할 수 있어 디자인 커스터마이징에 특히 유용합니다.
<!DOCTYPE html>
<html>
<style>
div {
margin: 2%;
position: relative;
width: 40px;
height: 40px;
box-shadow: inset 0 0 12px lightblue;
}
div::before {
content: "";
position: absolute;
width: 8px;
top: 50%;
height: 50%;
border-radius: 2px;
background-color: rgb(123,45,20);
transform: translateX(12px) rotate(-45deg);
transform-origin: left bottom;
z-index: +1;
}
div::after {
content: "";
position: absolute;
bottom: 0;
height: 8px;
width: 100%;
border-radius: 2px;
background-color: rgb(200,52,120);
transform: translateX(12px) rotate(-45deg);
transform-origin: left bottom;
}
</style>
<body>
Custom mark!
<div></div>
</body>
</html>실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

방법 2. 테두리(border)와 회전(transform)으로 만드는 체크마크
두 번째 방법은 훨씬 더 간결합니다. 요소의 아래쪽(border-bottom)과 오른쪽(border-right) 테두리만 지정한 후, 전체를 45deg로 회전시키면 자연스러운 체크 표시가 완성됩니다. 몇 줄의 코드로 빠르게 적용할 수 있어 실무에서도 자주 활용되는 방식입니다.
<!DOCTYPE html>
<html>
<style>
body {
padding: 2%;
text-align: center;
}
div {
display: inline-block;
height: 100px;
width: 35px;
border-bottom: 10px solid chartreuse;
border-right: 10px solid chartreuse;
transform: rotate(45deg);
}
</style>
<body>
<div></div>
</body>
</html>실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

마무리
이처럼 CSS의 가상 요소와 transform, border 속성만 조합하면 이미지 없이도 다양한 스타일의 체크 표시를 만들 수 있습니다. 정교한 디자인이 필요하다면 첫 번째 방법을, 간단하고 빠른 구현이 필요하다면 두 번째 방법을 활용해 보세요. 두 기법 모두 반응형 환경에서도 안정적으로 동작하므로 프로젝트 성격에 맞게 선택하시면 됩니다.