From 82d82cc8110b08175fc8a719a69ebe09458f51b7 Mon Sep 17 00:00:00 2001 From: daudix Date: Sun, 1 Sep 2024 04:51:44 +0300 Subject: [PATCH] Add switch class for checkboxes (fixes #70) --- CHANGELOG.md | 2 +- content/demo/index.md | 30 +++++++++++++++++ sass/_input.scss | 75 ++++++++++++++++++++++++++++--------------- 3 files changed, 81 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e654d9d..61e5742 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,8 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add active state to footer's "Powered by" links. - Add active state to footnotes' go back button. - Add active state to slider thumb. -- Add hover state to slider thumb. - Add loading animation to "Load Comments" button. +- Add special `switch` class for checkboxes (#70). - Add zoom-on-hover to custom comment emojis. - Style mentions and hashtags. diff --git a/content/demo/index.md b/content/demo/index.md index b19e34e..d79ab63 100644 --- a/content/demo/index.md +++ b/content/demo/index.md @@ -334,6 +334,36 @@ Available variables are: +With `switch` class: + +```html + + +``` + + + With `radio` type: ```html diff --git a/sass/_input.scss b/sass/_input.scss index ecf65ed..7a0ebac 100644 --- a/sass/_input.scss +++ b/sass/_input.scss @@ -81,30 +81,67 @@ input[type="checkbox"] { mask-size: cover; width: 1rem; height: 1rem; - content: ""; + } + + &.switch { + vertical-align: -0.625rem; + box-shadow: var(--edge-highlight); + border: none; + border-radius: 999px; + width: 3rem; + height: 2rem; + + &::before { + -webkit-mask-image: none; + top: 0.25rem; + left: 0.25rem; + transform: none; + transform-origin: center; + opacity: 1; + mask-image: none; + transition: var(--transition); + box-shadow: var(--shadow); + border-radius: 50%; + background-color: white; + width: 1.5rem; + height: 1.5rem; + } + + &:checked { + background-color: var(--primary-color); + + &::before { + transform: translateX(1rem); + background-color: var(--contrast-color); + } + } + + &:disabled { + &::before { + opacity: 0.6; + box-shadow: none; + } + } } } input[type="color"] { vertical-align: -0.375em; - border: 0.25rem solid var(--fg-muted-2); + box-shadow: var(--edge-highlight); + border: none; border-radius: var(--rounded-corner-small); - padding: 0; + padding: 0.25rem; width: 3rem; height: 2rem; - &:hover { - background-color: var(--fg-muted-2); - } - &:disabled { - border: 0.25rem solid var(--fg-muted-2); - background-color: var(--fg-muted-1); + opacity: 0.6; + border: none; } &::-moz-color-swatch { border: none; - border-radius: calc(var(--rounded-corner-small) / 2); + border-radius: calc(var(--rounded-corner-small) - 0.25rem); } &::-webkit-color-swatch-wrapper { @@ -112,7 +149,7 @@ input[type="color"] { } &::-webkit-color-swatch { - border-radius: calc(var(--rounded-corner-small) / 2); + border-radius: calc(var(--rounded-corner-small) - 0.25rem); } } @@ -135,16 +172,10 @@ input[type="range"] { cursor: grab; box-shadow: var(--shadow); border-radius: 999px; - background-color: hsl(0, 0%, 90%); + background-color: white; width: 1.5rem; height: 1.5rem; - &:hover { - transform: scale(1.1); - box-shadow: var(--shadow-raised); - background-color: white; - } - &:active { transform: scale(var(--active)); cursor: grabbing; @@ -158,16 +189,10 @@ input[type="range"] { box-shadow: var(--shadow); border: none; border-radius: 999px; - background-color: hsl(0, 0%, 90%); + background-color: white; width: 1.5rem; height: 1.5rem; - &:hover { - transform: scale(1.1); - box-shadow: var(--shadow-raised); - background-color: white; - } - &:active { transform: scale(var(--active)); cursor: grabbing;