feat: toggle button
This commit is contained in:
61
src/components/molecules/ToggleButton.tsx
Normal file
61
src/components/molecules/ToggleButton.tsx
Normal file
@@ -0,0 +1,61 @@
|
||||
import React, { FC } from "react";
|
||||
import styled from "styled-components";
|
||||
|
||||
interface ToggleButtonProps {
|
||||
isChecked?: boolean;
|
||||
onChange: () => void;
|
||||
};
|
||||
|
||||
export const ToggleButton: FC<ToggleButtonProps> = ({ isChecked = false, onChange }) => (
|
||||
<CheckBoxWrapper>
|
||||
<CheckBox id="checkbox" type="checkbox" onClick={onChange} checked={isChecked}/>
|
||||
<CheckBoxLabel htmlFor="checkbox"/>
|
||||
</CheckBoxWrapper>
|
||||
);
|
||||
|
||||
const CheckBoxWrapper = styled.div`
|
||||
position: relative;
|
||||
`;
|
||||
const CheckBoxLabel = styled.label`
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 42px;
|
||||
height: 26px;
|
||||
border-radius: 15px;
|
||||
background: #bebebe;
|
||||
cursor: pointer;
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
display: block;
|
||||
border-radius: 50%;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
margin: 3px;
|
||||
background: #ffffff;
|
||||
box-shadow: 1px 3px 3px 1px rgba(0, 0, 0, 0.2);
|
||||
transition: 0.2s;
|
||||
}
|
||||
`;
|
||||
const CheckBox = styled.input`
|
||||
opacity: 0;
|
||||
z-index: 1;
|
||||
border-radius: 15px;
|
||||
width: 42px;
|
||||
height: 26px;
|
||||
|
||||
&:checked + ${CheckBoxLabel} {
|
||||
background: #2196F3;
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
display: block;
|
||||
border-radius: 50%;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
margin-left: 21px;
|
||||
transition: 0.2s;
|
||||
}
|
||||
}
|
||||
`;
|
||||
Reference in New Issue
Block a user