UNPKG

@navelpluisje/pcb-components

Version:

A library with native components. They are all pcb components, like a dip-switch, resitor etc.

202 lines (181 loc) 5.86 kB
.trimmer { --background: hsl(0, 0%, 100%); --knob-size: 4rem; --switch-bg: hsl(var(--switch-color), var(--switch-saturation), 50%); --switch-shadow: hsl(var(--switch-color), var(--switch-saturation), 35%); --switch-shadow-fine: hsl(var(--switch-color), var(--switch-saturation), 45%); --switch-text-color: hsl(0, 0%, 100%); --switch-switch-color: hsl(var(--switch-color), 0%, 100%); --switch-switch-shadow: hsl(var(--switch-color), 0%, 67%); --switch-switch-shadow-fine: hsla(var(--switch-color), 0%, 27%); background-color: var(--switch-bg); display: inline-block; height: calc(var(--knob-size) * 1.1); margin-bottom: 1rem; position: relative; width: var(--knob-size); } .trimmer:focus { background-color: hsl(var(--switch-color), var(--switch-saturation), 60%); outline: none; } .trimmer::before, .trimmer::after { background-color: var(--switch-shadow); content: ''; display: block; position: absolute; transform-origin: top left; } .trimmer::before { height: 100%; left: 100%; top: 0; transform: skewY(60deg); width: .15rem; } .trimmer::after { height: .25rem; left: 0; top: 100%; transform: skewX(30deg); width: 100%; } .trimmer:focus::before, .trimmer:focus::after { background-color: hsl(var(--switch-color), var(--switch-saturation), 45%); } .trimmer-chip { background-color: var(--switch-shadow-fine); border-color: var(--switch-shadow) transparent transparent var(--switch-shadow); border-style: solid; border-width: .125rem 0 0 .0625rem; bottom: 0; content: ''; display: block; height: .25rem; left: calc(25% - .0625rem); position: absolute; width: calc(50% + .0625rem); } .trimmer:focus .trimmer-chip { background-color: var(--switch-bg); border-color: hsl(var(--switch-color), var(--switch-saturation), 45%) transparent transparent hsl(var(--switch-color), var(--switch-saturation), 45%); } .trimmer-chip::before { background-color: inherit; content: ''; display: block; height: .125rem; left: 0; position: absolute; top: 100%; transform: skewX(30deg); transform-origin: top left; width: 100%; z-index: 1; } .trimmer-ring { background-color: var(--switch-bg); background-image: radial-gradient( var(--switch-bg) 55.7%, transparent 55.7%, transparent 70.7%, var(--switch-bg) 70.7%), linear-gradient(0deg, transparent 48.5%, var(--switch-shadow) 48.5%, var(--switch-shadow) 51.5%, transparent 51.5%), linear-gradient(15deg, transparent 49.5%, var(--switch-shadow) 49.5%, var(--switch-shadow) 50.5%, transparent 50.5%), linear-gradient(30deg, transparent 49.5%, var(--switch-shadow) 49.5%, var(--switch-shadow) 50.5%, transparent 50.5%), linear-gradient(45deg, transparent 48.5%, var(--switch-shadow) 48.5%, var(--switch-shadow) 51.5%, transparent 51.5%), linear-gradient(60deg, transparent 49.5%, var(--switch-shadow) 49.5%, var(--switch-shadow) 50.5%, transparent 50.5%), linear-gradient(75deg, transparent 49.5%, var(--switch-shadow) 49.5%, var(--switch-shadow) 50.5%, transparent 50.5%), linear-gradient(90deg, transparent 48.5%, var(--switch-shadow) 48.5%, var(--switch-shadow) 51.5%, transparent 51.5%), linear-gradient(105deg, transparent 49.5%, var(--switch-shadow) 49.5%, var(--switch-shadow) 50.5%, transparent 50.5%), linear-gradient(120deg, transparent 49.5%, var(--switch-shadow) 49.5%, var(--switch-shadow) 50.5%, transparent 50.5%), linear-gradient(135deg, transparent 48.5%, var(--switch-shadow) 48.5%, var(--switch-shadow) 51.5%, transparent 51.5%), linear-gradient(150deg, transparent 49.5%, var(--switch-shadow) 49.5%, var(--switch-shadow) 50.5%, transparent 50.5%), linear-gradient(165deg, transparent 49.5%, var(--switch-shadow) 49.5%, var(--switch-shadow) 50.5%, transparent 50.5%); background-position: left top; background-repeat: no-repeat; background-size: calc(var(--knob-size) * .75); border-radius: 50%; height: calc(var(--knob-size) * .75); left: calc(var(--knob-size) * .125); margin-bottom: 1rem; position: absolute; top: calc(var(--knob-size) * .125); width: calc(var(--knob-size) * .75); } .trimmer-ring::before, .trimmer-ring::after { content: ''; display: block; position: absolute; } .trimmer-ring::before { border-color: transparent transparent var(--switch-bg); border-style: solid; border-width: 0 calc(var(--knob-size) * .75 / 2 - 3px) calc(var(--knob-size) * .75 / 2 - 3px); bottom: 0; height: 0; left: 3px; width: 0; z-index: 0; } .trimmer:focus .trimmer-ring::before { border-color: transparent transparent hsl(var(--switch-color), var(--switch-saturation), 60%); } .trimmer-ring::after { color: var(--switch-shadow); content: attr(data-label); font-family: monospace; font-size: .5rem; right: -.375rem; text-shadow: 1px 1px 0 var(--switch-shadow-fine); text-transform: uppercase; top: -.375rem; } .trimmer-knob { background-clip: content-box; background-color: #eee; border-radius: 50%; box-sizing: border-box; display: block; height: var(--knob-size); padding: 1rem; position: relative; transition: transform .15s ease; width: var(--knob-size); } .trimmer-knob::before, .trimmer-knob::after { content: ''; display: block; left: 50%; position: absolute; transform: translateX(-50%); } .trimmer-knob::after { border-color: transparent transparent var(--switch-switch-shadow); border-style: solid; border-width: 0 .5rem .6rem; height: 0; top: 1rem; width: 0; } .trimmer-knob::before { background-color: var(--switch-switch-shadow); box-shadow: -.05rem -.05rem 0 0 hsla(0, 0%, 0%, 0.3) inset; height: 1.75rem; top: 1.25rem; width: .4rem; } .value { bottom: .4rem; color: white; font-family: monospace; font-size: .8rem; position: absolute; text-align: center; width: 100%; }