๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Lect & Tip/html, css, scss

โœˆ checkbox css ์ฒดํฌ๋ฐ•์Šค ์Šคํƒ€์ผ๋กœ ์˜ˆ์˜๊ฒŒ ํ•˜๋Š” ๋ฒ• - ์›น ์ ‘๊ทผ์„ฑ ๋งž์ถ”๊ธฐ input[type=checkbox] + label

by ๋‚ฏ์„ ๊ณต๊ฐ„2019 2019. 9. 4.
๋ฐ˜์‘ํ˜•

์ฒดํฌ๋ฐ•์Šค ์ž์ฒด๋ฅผ ์˜ˆ์˜๊ฒŒ ๊พธ๋ฐ€ ์ˆ˜๋Š” ์—†๋‹ค.

๊ตณ์ด ํ•œ์‚ฌ์ฝ” ๊พธ๋ฏธ์ž๋ฉด, ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜๋Š” ์žˆ๋‹ค.

์ฒดํฌํ‘œ์‹œ๊ฐ€ ๋˜์—ˆ์„ ๋•Œ๋Š” input[type=checkbox]:checked์— ์Šคํƒ€์ผ์„ ์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๋ฏธ์ง€๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์Šคํƒ€์ผ๋กœ ์˜ˆ์˜๊ฒŒ ๊พธ๋ฏธ๋ ค๋ฉด...์ด๊ฒŒ ์ข€ ๋ณต์žกํ•ด์ง„๋‹ค.

input[type=checkbox] + label ์„ ์ด์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ,

์ด ๋ฐฉ๋ฒ•์˜ ํ•ต์‹ฌ์€ input ์ฒดํฌ๋ฐ•์Šค ์ž์ฒด๋ฅผ ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ•˜๊ณ  label์— ์Šคํƒ€์ผ์„ ์ฃผ์–ด์„œ ๊พธ๋ฏธ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋ณดํ†ต ์ด๋Ÿด ๋•Œ, ์ง„์งœ ์ฒดํฌ๋ฐ•์Šค๋ฅผ ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ 

input[type=checkbox] { display:none} ์„ ์“ฐ๊ฒŒ ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด ๋ฒ„๋ฆฌ๋ฉด ์›น์ ‘๊ทผ์„ฑ ์œ„๋ฐฐ๊ฐ€ ๋œ๋‹ค.

์™œ๋ƒํ•˜๋ฉด, label์ž์ฒด๋Š” focus๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๊ณ , input์ด focus๋ฅผ ๋ฐ›์•„์•ผ ํ‚ค๋ณด๋“œ ์šด์šฉ์„ฑ์„ ๋‹ด๋ณดํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ input์— display:none์„ ์ฃผ๊ฒŒ ๋˜๋ฉด, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋˜์–ด์„œ ํฌ์ปค์Šค๊ฐ€ ์ด๋™ํ•˜์ง€ ๋ชปํ•˜๊ณ  skipํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ , ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๊ณ  hidden์ด๋‚˜ opacity๋ฅผ ๊ทน๋‹จ์ ์œผ๋กœ ๋‚ฎ์ถ”๋ฉด...์ด ์—ญ์‹œ ์ ‘๊ทผ์„ฑ์— ์œ„๋ฐฐ๋œ๋‹ค.

์™œ๋ƒํ•˜๋ฉด ํฌ์ปค์Šค๋ฅผ ๋ฐ›์€ ๊ฐ์ฒด๊ฐ€ ํฌ์ปค์Šค๋ฅผ ๋ฐ›์•˜๋‹ค๋Š” ํ‘œ์‹œ ์ฆ‰, ์ ์„ ์ด๋‚˜ ํฌ๋กฌ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ธ€๋กœ์šฐ ํšจ๊ณผ๊ฐ€ ๊ฐ™์ด ์•ˆ๋ณด์ด๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋Ÿด ๋•Œ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€, ๋‘˜ ๋‹ค ์‚ด๋ ค๋‘๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ณดํ†ต ์ด๋Ÿฐ input ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” Unorder List๋‚˜ Order List๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๋•Œ li์— position:relative๋ฅผ ์ฃผ๊ณ , input๊ณผ label์— ๋ชจ๋‘ absolute๋ฅผ ์ฃผ์–ด์„œ ์„œ๋กœ ๊ฒน์น˜๊ฒŒ ํ•œ๋‹ค.

ํ”ฝ์…€ ๋‹จ์œ„๋กœ ์„ธ๋ถ€ ์กฐ์ •์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ท€์ฐฎ๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ํ•œ ๋ฒˆ ํ•ด ๋‘๋ฉด ํŽธํ•˜๋‹ค.

๊ทธ๋ฆฌ๊ณ  input[type=checkbox] ์— z-index๋ฅผ label๋ณด๋‹ค ๋†’๊ฒŒ ์ค€๋‹ค.

label์€ input[type=checkbox] ๋ณด๋‹ค๋Š” ๋‚ฎ์€ z-index ๊ฐ’์„ ์„ค์ •ํ•˜๋˜ input[type=checkbox]:checked ๋ณด๋‹ค๋Š” ๋†’๊ฒŒ ์ค€๋‹ค.

checkbox css

input[type=checkbox]์™€ input[type=checkbox]:checked๋Š” ์‚ฌ์‹ค์€ ๊ฐ™์€ ๊ฐ์ฒด์ธ๋ฐ, ์„ ํƒ ์—ฌ๋ถ€์— ๋”ฐ๋ผ z-index๊ฐ€ ๋ผ๋ฒจ๋ณด๋‹ค ์•ž์— ๋†“์ด๊ธฐ๋„ ํ•˜๊ณ  ๋’ค์— ๋†“์ด๊ธฐ๋„ ํ•˜๋ฉด์„œ, ์Šคํƒ€์ผ์ด ๋จนํžŒ label์ด ๋ณด์ด๊ธฐ๋„ ํ•˜๊ณ , ์Šคํƒ€์ผ์ด ์—†๋Š” ์ฒดํฌ๋ฐ•์Šค๊ฐ€ ๋ณด์ด๊ธฐ๋„ ํ•œ๋‹ค.

์ฒดํฌ๊ฐ€ ๋˜๊ธฐ ์ „์˜ ์ฒดํฌ๋ฐ•์Šค์˜ ๋ชจ์–‘์„ ๊พธ๋ฏธ๋Š” ๊ฒƒ์€ ์ด๋ฏธ์ง€ bg๋ฅผ ์จ์„œ ์–ผ๋งˆ๋“ ์ง€ ์‘์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

.libSelect {
	overflow: hidden
}
.libSelect li {
	float: left;
	display: inline-block;
	overflow: hidden;
	width: 135px;
	position:relative;
}
.libSelect li.libTotal {
	display: block;
	width: 100%
}
.libSelect li input[type=checkbox] {
	/*display: none;*/
	width:12px;
	height:12px;
	border: 1px solid #1c5180;
	background:none;
	position:absolute;
	left:0;
	bottom:5px;
	z-index:10;
}
.libSelect li input[type=checkbox] + label {
	display: inline-block;
	cursor: pointer;
	position: relative;
	padding-left: 20px;
	margin-right: 4px;
	z-index:5;
}
.libSelect li input[type=checkbox]+ label:before {
	z-index:5;
	content: "";
	display: inline-block;
	width: 12px;
	height: 12px;
	margin-right: 10px;
	position: absolute;
	left: 5px;
	bottom: 5px;
	background-color: #fff;
	border-radius: 1px;
	box-shadow: inset 0px 1px 1px 0px rgba(0, 0, 0,.3), 0px 1px 0px 0px rgba(255, 255, 255,.8);
}
.libSelect li input[type=checkbox]:checked + label:before {
	content: "\2713";  /* ์ฒดํฌ๋ชจ์–‘ */
	text-shadow: 1px 1px 1px rgba(0, 0, 0,.2);
	font-size: 10px;
	font-weight: 800;
	color: #fff;
	text-align: center;
	line-height: 11px;
}
.libSelect li input[type=checkbox]:checked { border:0 none; 
	z-index:0;}

๊ธ€๋ž˜๋จธ

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€