parent
b18cf63a1c
commit
2d7da703e4
9 changed files with 243 additions and 53 deletions
@ -0,0 +1,97 @@ |
|||||||
|
.checkbox-symbol { |
||||||
|
position: absolute; |
||||||
|
width: 0; |
||||||
|
height: 0; |
||||||
|
pointer-events: none; |
||||||
|
user-select: none; |
||||||
|
} |
||||||
|
|
||||||
|
.checkbox-container { |
||||||
|
box-sizing: border-box; |
||||||
|
color: #222; |
||||||
|
height: 30px; |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
flex-flow: row wrap; |
||||||
|
} |
||||||
|
|
||||||
|
.checkbox-container * { |
||||||
|
box-sizing: border-box; |
||||||
|
} |
||||||
|
|
||||||
|
.checkbox-input { |
||||||
|
position: absolute; |
||||||
|
visibility: hidden; |
||||||
|
} |
||||||
|
|
||||||
|
.checkbox { |
||||||
|
user-select: none; |
||||||
|
cursor: pointer; |
||||||
|
padding: 6px 8px; |
||||||
|
border-radius: 6px; |
||||||
|
overflow: hidden; |
||||||
|
transition: all 0.3s ease; |
||||||
|
display: flex; |
||||||
|
} |
||||||
|
|
||||||
|
.checkbox:not(:last-child) { |
||||||
|
margin-right: 6px; |
||||||
|
} |
||||||
|
|
||||||
|
.checkbox:hover { |
||||||
|
background: inherit; |
||||||
|
} |
||||||
|
|
||||||
|
.checkbox span { |
||||||
|
vertical-align: middle; |
||||||
|
transform: translate3d(0, 0, 0); |
||||||
|
} |
||||||
|
|
||||||
|
.checkbox span:first-child { |
||||||
|
position: relative; |
||||||
|
flex: 0 0 18px; |
||||||
|
width: 18px; |
||||||
|
height: 18px; |
||||||
|
border-radius: 4px; |
||||||
|
transform: scale(1); |
||||||
|
border: 1px solid #cccfdb; |
||||||
|
transition: all 0.3s ease; |
||||||
|
} |
||||||
|
|
||||||
|
.checkbox span:first-child svg { |
||||||
|
position: absolute; |
||||||
|
top: 3px; |
||||||
|
left: 2px; |
||||||
|
fill: none; |
||||||
|
stroke: #fff; |
||||||
|
stroke-dasharray: 16px; |
||||||
|
stroke-dashoffset: 16px; |
||||||
|
transition: all 0.3s ease; |
||||||
|
transform: translate3d(0, 0, 0); |
||||||
|
} |
||||||
|
|
||||||
|
.checkbox span:last-child { |
||||||
|
padding-left: 8px; |
||||||
|
line-height: 18px; |
||||||
|
} |
||||||
|
|
||||||
|
.checkbox:hover span:first-child { |
||||||
|
border-color: #06BAC0; |
||||||
|
} |
||||||
|
|
||||||
|
.checkbox-input:checked + .checkbox span:first-child { |
||||||
|
background: #06BAC0; |
||||||
|
border-color: #06BAC0; |
||||||
|
animation: zoom-in-out 0.3s ease; |
||||||
|
} |
||||||
|
|
||||||
|
.checkbox-input:checked + .checkbox span:first-child svg { |
||||||
|
stroke-dashoffset: 0; |
||||||
|
} |
||||||
|
|
||||||
|
@keyframes zoom-in-out { |
||||||
|
50% { |
||||||
|
transform: scale(0.9); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
import React from "react"; |
||||||
|
import './index.css'; |
||||||
|
|
||||||
|
export default function Checkbox(props) { |
||||||
|
// console.log(props)
|
||||||
|
return ( |
||||||
|
<div> |
||||||
|
<svg className="checkbox-symbol"> |
||||||
|
<symbol id="check" viewBox="0 0 12 10"> |
||||||
|
<polyline |
||||||
|
points="1.5 6 4.5 9 10.5 1" |
||||||
|
strokeLinecap="round" |
||||||
|
strokeLinejoin="round" |
||||||
|
strokeWidth="2" |
||||||
|
></polyline> |
||||||
|
</symbol> |
||||||
|
</svg> |
||||||
|
|
||||||
|
<div className="checkbox-container"> |
||||||
|
<input className="checkbox-input" name={props.name} id={"ch"+props.name} type="checkbox" checked={props.checked} onClick={props.onclick} onChange={props.onChange}/> |
||||||
|
<label className="checkbox" htmlFor={"ch"+props.name}> |
||||||
|
<span> |
||||||
|
<svg width="12px" height="10px"> |
||||||
|
<use xlinkHref="#check"></use> |
||||||
|
</svg> |
||||||
|
</span> |
||||||
|
</label> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
); |
||||||
|
} |
Loading…
Reference in new issue