Essentially, I am using the input's checked pseudo class to manipulate the styles of the modal and label using sibling selectors.
A Pen by Mark Holmes on CodePen.
| %input#button{type:"checkbox"} | |
| %label{for:"button"} Click Me! | |
| %div.modal | |
| %div.content Pure CSS Modal! No JS! |
Essentially, I am using the input's checked pseudo class to manipulate the styles of the modal and label using sibling selectors.
A Pen by Mark Holmes on CodePen.
| html, | |
| body { | |
| height: 100%; | |
| margin: 0; | |
| padding: 0; | |
| width: 100%; | |
| } | |
| .modal { | |
| background: dodgerblue; | |
| height: 1px; | |
| overflow: hidden; | |
| position: fixed; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| transition: width 0.5s ease 0.5s, | |
| height 0.5s ease; | |
| width: 0; | |
| } | |
| .content { | |
| color: transparent; | |
| font-family: 'Consolas', arial, sans-serif; | |
| font-size: 2em; | |
| position: absolute; | |
| top: 50%; | |
| text-align: center; | |
| transform: translate3d(0,-50%,0); | |
| transition: color 0.5s ease; | |
| width: 100%; | |
| } | |
| label { | |
| color: dodgerblue; | |
| cursor: pointer; | |
| font-family: 'Consolas', arial, sans-serif; | |
| font-size: 2em; | |
| position: fixed; | |
| left: 50%; | |
| top: 50%; | |
| text-transform: uppercase; | |
| transform: translate(-50%, -50%); | |
| transition: color 0.5s ease 0.5s; | |
| } | |
| input { | |
| cursor: pointer; | |
| height: 0; | |
| opacity: 0; | |
| width: 0; | |
| &:focus { | |
| outline: none; | |
| } | |
| } | |
| input:checked { | |
| height: 40px; | |
| opacity: 1; | |
| position: fixed; | |
| right: 20px; | |
| top: 20px; | |
| z-index: 1; | |
| -webkit-appearance: none; | |
| width: 40px; | |
| &::after, | |
| &:before { | |
| border-top: 1px solid #FFF; | |
| content: ''; | |
| display: block; | |
| position: absolute; | |
| top: 50%; | |
| transform: rotate(45deg); | |
| width: 100%; | |
| } | |
| &::after { | |
| transform: rotate(-45deg); | |
| } | |
| } | |
| input:checked + label { | |
| color: #FFF; | |
| transition: color 0.5s ease, | |
| } | |
| input:checked ~ .modal { | |
| height: 100%; | |
| width: 100%; | |
| transition: width 0.5s ease, | |
| height 0.5s ease 0.5s; | |
| .content { | |
| color: #FFF; | |
| transition: color 0.5s ease 0.5s; | |
| } | |
| } |