본문으로 바로가기

Step state progress bar

CSS 가상 선택자인 nth-child 와 가상요소인 ::before, ::after 를 이용한 스텝바를 구현해 보도록 합니다.




Source View

See the Pen 단계별 상태바 스타일 by jaeheekim (@jaehee) on CodePen.



CSS

css
* {box-sizing:border-box}
ul {
	list-style:none;
}

/* 단계별 상태 스타일 */
.step-box {
	padding:0 10px 10px 10px;
	border:1px solid #ddd;
	background:#fff
}
.step-state {
	padding:10px 0 15px;
	margin-top:15px;
	background:#f7f7f7
}
.step-state ul:after {
	content:'';
	display:block;
	clear:both
}
.step-state ul li {
	float:left;
	position:relative;
	width:20%; /* 5개 진행바를 5등분 */
	padding-top:50px; /* 진행바 영역 확보 */
	font-size:15px;
	font-weight:bold;
	text-align:center;
	line-height:12px;
	color:#666
}
.step-state ul li:first-child {
	font-size:13px
}
/* 도전중, 달성 텍스트 영역 */
.step-state ul li p:after {
	position:absolute; /* absolute 기준은 li 영역 */
	width:41px;
	height:24px;
	margin-right:-20px;
	background:url(https://t1.daumcdn.net/cfile/tistory/241D463E58AFAEAB16) no-repeat 0 0;
	background-size:auto 24px;
	background-position:-58px 0;
	top:0;
	right:0;
	color:#fff;
	font-size:11px;
	line-height:16px;
	letter-spacing:-.5px;
}
.step-state ul li:first-child p {
	padding-top:6px
}
.step-state ul li span {
	display:block;
	margin-top:2px;
	font-weight:normal;
	color:#898989;
	font-size:12px
}
/* 회색 진행바 생성 */
.step-state ul li:before {
	position:absolute;
	top:35px;
	left:0;
	right:0;
	height:3px;
	background:#ddd;
	content:''
}
/* 첫 번째 진행바 반만 생성*/
.step-state ul li:nth-child(1):before {
	left:50%
}
/* 마지막 진행바 반만 생성*/
.step-state ul li:nth-child(5):before {
	right:50%
}
/* 화살표 상태 아이콘 */
.step-state ul li:after {
	position:absolute;
	top:27px;
	left:50%;
	width:20px;
	height:20px;
	margin-left:-10px;
	background:url(https://t1.daumcdn.net/cfile/tistory/241D463E58AFAEAB16) no-repeat 0 0;
	background-size:auto 24px;
	background-position:0 0;
	content:''
}

/* 활성화 진행바 및 활성화 화살표 아이콘 표시 */
/* 활성화 상태바 */
.step-state.step1 ul li:nth-child(1):before,
.step-state.step2 ul li:nth-child(-n+2):before,
.step-state.step2-ing ul li:nth-child(-n+2):before,
.step-state.step3 ul li:nth-child(-n+3):before,
.step-state.step3-ing ul li:nth-child(-n+3):before,
.step-state.step4 ul li:nth-child(-n+4):before,
.step-state.step4-ing ul li:nth-child(-n+4):before,
.step-state.step5 ul li:nth-child(-n+5):before {
	background:#ff889b
}
/* 활성화 아이콘 표시 */
.step-state.step1 ul li:nth-child(1):after,
.step-state.step2 ul li:nth-child(-n+2):after,
.step-state.step2-ing ul li:nth-child(-n+2):after,
.step-state.step3 ul li:nth-child(-n+3):after,
.step-state.step3-ing ul li:nth-child(-n+3):after,
.step-state.step4 ul li:nth-child(-n+4):after,
.step-state.step4-ing ul li:nth-child(-n+4):after,
.step-state.step5 ul li:nth-child(-n+5):after {
	background-position:-20px 0
}
/* 도전 중일 경우의 1/2 영역 비활성화 상태바 영역 */
.step-state ul li p:before {
	position:absolute;
	top:35px;
	left:50%;
	right:0;
	height:3px;
	content:'';
}
.step-state.step2 ul li:nth-child(2) p:before,
.step-state.step3 ul li:nth-child(3) p:before,
.step-state.step4 ul li:nth-child(4) p:before {
	background:#ddd
}
/* "도전중" 텍스트 표시 */
.step-state.step1 ul li:nth-child(1) p:after,
.step-state.step2-ing ul li:nth-child(2) p:after,
.step-state.step3-ing ul li:nth-child(3) p:after,
.step-state.step4-ing ul li:nth-child(4) p:after {
	content:'도전중';
}

/* "달성" 텍스트 표시 */
.step-state.step2 ul li:nth-child(2) p:after,
.step-state.step3 ul li:nth-child(3) p:after,
.step-state.step4 ul li:nth-child(4) p:after,
.step-state.step5 ul li:nth-child(5) p:after {
	content:'달성';
	right:50%
}



Jaehee's WebClub


'StyleSheet > CSS' 카테고리의 다른 글

CSS3를 이용한 버튼 스타일  (4) 2016.11.28
Negative margins(음수 마진)  (3) 2016.11.22
Hamburger Icon Animations  (0) 2016.11.11
Flexbox 알아보기  (0) 2016.11.03
인라인, 인라인 블럭요소 사이의 빈 공간 제거하기  (1) 2016.11.02